You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Now if you run
select * from t where i=1 with lock;
it results in writing broken record version and the next run
select * from t where i=1;
will lead to bugcheck.
Explanation:
VIO_writelock always sure that it writes delta but in case of example after restore calculated fields there are two formats. VIO_writelock writes a full version of format 1 but not a delta but the functions always set delta flag. To fix it's enough to copy correct behaviour from VIO_modify.
Now if you run
select * from t where i=1 with lock;
it results in writing broken record version and the next run
select * from t where i=1;
will lead to bugcheck.
Explanation:
VIO_writelock always sure that it writes delta but in case of example after restore calculated fields there are two formats. VIO_writelock writes a full version of format 1 but not a delta but the functions always set delta flag. To fix it's enough to copy correct behaviour from VIO_modify.
=>
Reproducible example:
Create a database (say /tmp/wl.fdb) by script
create database '/tmp/wl.fdb';
create table t (
i integer not null primary key,
d char(1024) computed by ('qwert'),
s varchar(8192)
);
insert into t values (1, 'format1opqwertyuiopqwertyuiop');
commit;
Now if you run
select * from t where i=1 with lock;
it results in writing broken record version and the next run
select * from t where i=1;
will lead to bugcheck.
Explanation:
VIO_writelock always sure that it writes delta but in case of example after restore calculated fields there are two formats. VIO_writelock writes a full version of format 1 but not a delta but the functions always set delta flag. To fix it's enough to copy correct behaviour from VIO_modify.
Submitted by: @romansimakov
Attachments:
c5576.bat.7z
Reproducible example:
Create a database (say /tmp/wl.fdb) by script
create database '/tmp/wl.fdb';
create table t (
i integer not null primary key,
d char(1024) computed by ('qwert'),
s varchar(8192)
);
insert into t values (1, 'format1opqwertyuiopqwertyuiop');
commit;
Then perform backup/restore operation:
./gbak -b /tmp/wl.fdb stdout | ./gbak -c -rep stdin /tmp/wlr.fdb
Now if you run
select * from t where i=1 with lock;
it results in writing broken record version and the next run
select * from t where i=1;
will lead to bugcheck.
Explanation:
VIO_writelock always sure that it writes delta but in case of example after restore calculated fields there are two formats. VIO_writelock writes a full version of format 1 but not a delta but the functions always set delta flag. To fix it's enough to copy correct behaviour from VIO_modify.
Thanks Vlad for the help in resolving
Commits: 00e5a9f 74b04f8
The text was updated successfully, but these errors were encountered: