mirror of
https://github.com/MariaDB/server.git
synced 2025-08-31 22:22:30 +03:00
ndb - bug#31477 - 5.0
This commit is contained in:
35
mysql-test/r/bdb_notembedded.result
Normal file
35
mysql-test/r/bdb_notembedded.result
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
set autocommit=1;
|
||||||
|
reset master;
|
||||||
|
create table bug16206 (a int);
|
||||||
|
insert into bug16206 values(1);
|
||||||
|
start transaction;
|
||||||
|
insert into bug16206 values(2);
|
||||||
|
commit;
|
||||||
|
show binlog events;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
f n Format_desc 1 n Server ver: VERSION, Binlog ver: 4
|
||||||
|
f n Query 1 n use `test`; create table bug16206 (a int)
|
||||||
|
f n Query 1 n use `test`; insert into bug16206 values(1)
|
||||||
|
f n Query 1 n use `test`; insert into bug16206 values(2)
|
||||||
|
drop table bug16206;
|
||||||
|
reset master;
|
||||||
|
create table bug16206 (a int) engine= bdb;
|
||||||
|
insert into bug16206 values(0);
|
||||||
|
insert into bug16206 values(1);
|
||||||
|
start transaction;
|
||||||
|
insert into bug16206 values(2);
|
||||||
|
commit;
|
||||||
|
insert into bug16206 values(3);
|
||||||
|
show binlog events;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
f n Format_desc 1 n Server ver: VERSION, Binlog ver: 4
|
||||||
|
f n Query 1 n use `test`; create table bug16206 (a int) engine= bdb
|
||||||
|
f n Query 1 n use `test`; insert into bug16206 values(0)
|
||||||
|
f n Query 1 n use `test`; insert into bug16206 values(1)
|
||||||
|
f n Query 1 n use `test`; BEGIN
|
||||||
|
f n Query 1 n use `test`; insert into bug16206 values(2)
|
||||||
|
f n Query 1 n use `test`; COMMIT
|
||||||
|
f n Query 1 n use `test`; insert into bug16206 values(3)
|
||||||
|
drop table bug16206;
|
||||||
|
set autocommit=0;
|
||||||
|
End of 5.0 tests
|
98
mysql-test/r/ndb_bug31477.result
Normal file
98
mysql-test/r/ndb_bug31477.result
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
drop table if exists t1;
|
||||||
|
create table t1(a int primary key, b int, c int, unique(b)) engine = ndb;
|
||||||
|
insert into t1 values (2,2,2);
|
||||||
|
insert into t1 values (3,3,3);
|
||||||
|
insert into t1 values (4,4,4);
|
||||||
|
begin;
|
||||||
|
insert into t1 values (1,1,1);
|
||||||
|
begin;
|
||||||
|
update t1 set c = 2 where b = 1;
|
||||||
|
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
||||||
|
rollback;
|
||||||
|
rollback;
|
||||||
|
drop table t1;
|
||||||
|
create table t1(a int primary key, b int, c int, key(b)) engine = ndb;
|
||||||
|
insert into t1 values (2,2,2);
|
||||||
|
insert into t1 values (3,3,3);
|
||||||
|
insert into t1 values (4,4,4);
|
||||||
|
begin;
|
||||||
|
insert into t1 values (1,1,1);
|
||||||
|
begin;
|
||||||
|
update t1 set c = 2 where b = 1;
|
||||||
|
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
||||||
|
rollback;
|
||||||
|
rollback;
|
||||||
|
drop table t1;
|
||||||
|
--con1
|
||||||
|
create table t1(a int primary key, b int, c int, key(b)) engine = ndb;
|
||||||
|
insert into t1 values (1,1,1);
|
||||||
|
insert into t1 values (2,2,2);
|
||||||
|
insert into t1 values (3,3,3);
|
||||||
|
insert into t1 values (4,4,4);
|
||||||
|
begin;
|
||||||
|
update t1 set c = 10 where a = 1;
|
||||||
|
update t1 set c = 20 where a = 1;
|
||||||
|
update t1 set c = 30 where a = 1;
|
||||||
|
--con1 c=30
|
||||||
|
select * from t1 where b >= 1 order by b;
|
||||||
|
a b c
|
||||||
|
1 1 30
|
||||||
|
2 2 2
|
||||||
|
3 3 3
|
||||||
|
4 4 4
|
||||||
|
--con2 c=1
|
||||||
|
select * from t1 where b >= 1 order by b;
|
||||||
|
a b c
|
||||||
|
1 1 1
|
||||||
|
2 2 2
|
||||||
|
3 3 3
|
||||||
|
4 4 4
|
||||||
|
--con1
|
||||||
|
delete from t1 where a = 1;
|
||||||
|
--con1 c=none
|
||||||
|
select * from t1 where b >= 1 order by b;
|
||||||
|
a b c
|
||||||
|
2 2 2
|
||||||
|
3 3 3
|
||||||
|
4 4 4
|
||||||
|
--con2 c=1
|
||||||
|
select * from t1 where b >= 1 order by b;
|
||||||
|
a b c
|
||||||
|
1 1 1
|
||||||
|
2 2 2
|
||||||
|
3 3 3
|
||||||
|
4 4 4
|
||||||
|
--con1
|
||||||
|
commit;
|
||||||
|
--con1 c=none
|
||||||
|
select * from t1 where b >= 1 order by b;
|
||||||
|
a b c
|
||||||
|
2 2 2
|
||||||
|
3 3 3
|
||||||
|
4 4 4
|
||||||
|
--con2 c=none
|
||||||
|
select * from t1 where b >= 1 order by b;
|
||||||
|
a b c
|
||||||
|
2 2 2
|
||||||
|
3 3 3
|
||||||
|
4 4 4
|
||||||
|
--con1
|
||||||
|
begin;
|
||||||
|
insert into t1 values (1,1,1);
|
||||||
|
update t1 set c = 10 where a = 1;
|
||||||
|
update t1 set c = 20 where a = 1;
|
||||||
|
update t1 set c = 30 where a = 1;
|
||||||
|
--con1 c=30
|
||||||
|
select * from t1 where b >= 1 order by b;
|
||||||
|
a b c
|
||||||
|
1 1 30
|
||||||
|
2 2 2
|
||||||
|
3 3 3
|
||||||
|
4 4 4
|
||||||
|
--con2 c=none
|
||||||
|
select * from t1 where b >= 1 order by b;
|
||||||
|
a b c
|
||||||
|
2 2 2
|
||||||
|
3 3 3
|
||||||
|
4 4 4
|
||||||
|
drop table t1;
|
38
mysql-test/t/bdb_notembedded.test
Normal file
38
mysql-test/t/bdb_notembedded.test
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
-- source include/not_embedded.inc
|
||||||
|
-- source include/have_bdb.inc
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #16206: Superfluous COMMIT event in binlog when updating BDB in autocommit mode
|
||||||
|
#
|
||||||
|
set autocommit=1;
|
||||||
|
|
||||||
|
let $VERSION=`select version()`;
|
||||||
|
|
||||||
|
reset master;
|
||||||
|
create table bug16206 (a int);
|
||||||
|
insert into bug16206 values(1);
|
||||||
|
start transaction;
|
||||||
|
insert into bug16206 values(2);
|
||||||
|
commit;
|
||||||
|
--replace_result $VERSION VERSION
|
||||||
|
--replace_column 1 f 2 n 5 n
|
||||||
|
show binlog events;
|
||||||
|
drop table bug16206;
|
||||||
|
|
||||||
|
reset master;
|
||||||
|
create table bug16206 (a int) engine= bdb;
|
||||||
|
insert into bug16206 values(0);
|
||||||
|
insert into bug16206 values(1);
|
||||||
|
start transaction;
|
||||||
|
insert into bug16206 values(2);
|
||||||
|
commit;
|
||||||
|
insert into bug16206 values(3);
|
||||||
|
--replace_result $VERSION VERSION
|
||||||
|
--replace_column 1 f 2 n 5 n
|
||||||
|
show binlog events;
|
||||||
|
drop table bug16206;
|
||||||
|
|
||||||
|
set autocommit=0;
|
||||||
|
|
||||||
|
|
||||||
|
--echo End of 5.0 tests
|
109
mysql-test/t/ndb_bug31477.test
Normal file
109
mysql-test/t/ndb_bug31477.test
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
--source include/have_ndb.inc
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
|
drop table if exists t1;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
|
# setup
|
||||||
|
|
||||||
|
connect (con1,localhost,root,,test);
|
||||||
|
connect (con2,localhost,root,,test);
|
||||||
|
|
||||||
|
# unique index
|
||||||
|
connection con1;
|
||||||
|
create table t1(a int primary key, b int, c int, unique(b)) engine = ndb;
|
||||||
|
insert into t1 values (2,2,2);
|
||||||
|
insert into t1 values (3,3,3);
|
||||||
|
insert into t1 values (4,4,4);
|
||||||
|
|
||||||
|
begin;
|
||||||
|
insert into t1 values (1,1,1);
|
||||||
|
|
||||||
|
connection con2;
|
||||||
|
begin;
|
||||||
|
--error 1205
|
||||||
|
update t1 set c = 2 where b = 1;
|
||||||
|
rollback;
|
||||||
|
|
||||||
|
connection con1;
|
||||||
|
rollback;
|
||||||
|
drop table t1;
|
||||||
|
# ordered index
|
||||||
|
|
||||||
|
connection con1;
|
||||||
|
create table t1(a int primary key, b int, c int, key(b)) engine = ndb;
|
||||||
|
insert into t1 values (2,2,2);
|
||||||
|
insert into t1 values (3,3,3);
|
||||||
|
insert into t1 values (4,4,4);
|
||||||
|
|
||||||
|
begin;
|
||||||
|
insert into t1 values (1,1,1);
|
||||||
|
|
||||||
|
connection con2;
|
||||||
|
begin;
|
||||||
|
--error 1205
|
||||||
|
update t1 set c = 2 where b = 1;
|
||||||
|
rollback;
|
||||||
|
|
||||||
|
connection con1;
|
||||||
|
rollback;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
# multiple versions
|
||||||
|
|
||||||
|
--echo --con1
|
||||||
|
connection con1;
|
||||||
|
create table t1(a int primary key, b int, c int, key(b)) engine = ndb;
|
||||||
|
insert into t1 values (1,1,1);
|
||||||
|
insert into t1 values (2,2,2);
|
||||||
|
insert into t1 values (3,3,3);
|
||||||
|
insert into t1 values (4,4,4);
|
||||||
|
|
||||||
|
begin;
|
||||||
|
update t1 set c = 10 where a = 1;
|
||||||
|
update t1 set c = 20 where a = 1;
|
||||||
|
update t1 set c = 30 where a = 1;
|
||||||
|
|
||||||
|
--echo --con1 c=30
|
||||||
|
select * from t1 where b >= 1 order by b;
|
||||||
|
--echo --con2 c=1
|
||||||
|
connection con2;
|
||||||
|
select * from t1 where b >= 1 order by b;
|
||||||
|
|
||||||
|
--echo --con1
|
||||||
|
connection con1;
|
||||||
|
delete from t1 where a = 1;
|
||||||
|
|
||||||
|
--echo --con1 c=none
|
||||||
|
select * from t1 where b >= 1 order by b;
|
||||||
|
--echo --con2 c=1
|
||||||
|
connection con2;
|
||||||
|
select * from t1 where b >= 1 order by b;
|
||||||
|
|
||||||
|
--echo --con1
|
||||||
|
connection con1;
|
||||||
|
commit;
|
||||||
|
|
||||||
|
--echo --con1 c=none
|
||||||
|
select * from t1 where b >= 1 order by b;
|
||||||
|
--echo --con2 c=none
|
||||||
|
connection con2;
|
||||||
|
select * from t1 where b >= 1 order by b;
|
||||||
|
|
||||||
|
--echo --con1
|
||||||
|
connection con1;
|
||||||
|
begin;
|
||||||
|
insert into t1 values (1,1,1);
|
||||||
|
update t1 set c = 10 where a = 1;
|
||||||
|
update t1 set c = 20 where a = 1;
|
||||||
|
update t1 set c = 30 where a = 1;
|
||||||
|
|
||||||
|
--echo --con1 c=30
|
||||||
|
select * from t1 where b >= 1 order by b;
|
||||||
|
--echo --con2 c=none
|
||||||
|
connection con2;
|
||||||
|
select * from t1 where b >= 1 order by b;
|
||||||
|
|
||||||
|
# this fails with "no such table" via con2 ???
|
||||||
|
connection con1;
|
||||||
|
drop table t1;
|
@@ -29,7 +29,7 @@ static const char * fms[] = {
|
|||||||
"%d", "0x%08x", // Int32
|
"%d", "0x%08x", // Int32
|
||||||
"%u", "0x%08x", // Uint32
|
"%u", "0x%08x", // Uint32
|
||||||
"%lld", "0x%016llx", // Int64
|
"%lld", "0x%016llx", // Int64
|
||||||
"%llu", "0x%016llx" // Uint64
|
"%llu", "0x%016llx", // Uint64
|
||||||
"%llu", "0x%016llx" // UintPtr
|
"%llu", "0x%016llx" // UintPtr
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -1085,7 +1085,7 @@ public:
|
|||||||
/*
|
/*
|
||||||
* TUX checks if tuple is visible to scan.
|
* TUX checks if tuple is visible to scan.
|
||||||
*/
|
*/
|
||||||
bool tuxQueryTh(Uint32 fragPtrI, Uint32 tupAddr, Uint32 tupVersion, Uint32 transId1, Uint32 transId2, Uint32 savePointId);
|
bool tuxQueryTh(Uint32 fragPtrI, Uint32 pageId, Uint32 pageOffset, Uint32 tupVersion, Uint32 transId1, Uint32 transId2, bool dirty, Uint32 savePointId);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
BLOCK_DEFINES(Dbtup);
|
BLOCK_DEFINES(Dbtup);
|
||||||
@@ -1942,6 +1942,8 @@ private:
|
|||||||
bool getPageThroughSavePoint(Operationrec* const regOperPtr,
|
bool getPageThroughSavePoint(Operationrec* const regOperPtr,
|
||||||
Operationrec* const leaderOpPtr);
|
Operationrec* const leaderOpPtr);
|
||||||
|
|
||||||
|
bool find_savepoint(OperationrecPtr& loopOpPtr, Uint32 savepointId);
|
||||||
|
|
||||||
Uint32 calculateChecksum(Page* const pagePtr, Uint32 tupHeadOffset, Uint32 tupHeadSize);
|
Uint32 calculateChecksum(Page* const pagePtr, Uint32 tupHeadOffset, Uint32 tupHeadSize);
|
||||||
void setChecksum(Page* const pagePtr, Uint32 tupHeadOffset, Uint32 tupHeadSize);
|
void setChecksum(Page* const pagePtr, Uint32 tupHeadOffset, Uint32 tupHeadSize);
|
||||||
|
|
||||||
@@ -2467,4 +2469,22 @@ bool Dbtup::isPageUndoLogged(Fragrecord* const regFragPtr,
|
|||||||
return false;
|
return false;
|
||||||
}//Dbtup::isUndoLoggingNeeded()
|
}//Dbtup::isUndoLoggingNeeded()
|
||||||
|
|
||||||
|
inline
|
||||||
|
bool Dbtup::find_savepoint(OperationrecPtr& loopOpPtr, Uint32 savepointId)
|
||||||
|
{
|
||||||
|
while (true) {
|
||||||
|
if (savepointId > loopOpPtr.p->savePointId) {
|
||||||
|
jam();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// note 5.0 has reversed next/prev pointers
|
||||||
|
loopOpPtr.i = loopOpPtr.p->nextActiveOp;
|
||||||
|
if (loopOpPtr.i == RNIL) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
ptrCheckGuard(loopOpPtr, cnoOfOprec, operationrec);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -246,8 +246,18 @@ Dbtup::accReadPk(Uint32 tableId, Uint32 fragId, Uint32 fragPageId, Uint32 pageIn
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* TUX index contains all tuple versions. A scan in TUX has scanned
|
||||||
|
* one of them and asks if it can be returned as scan result. This
|
||||||
|
* depends on trans id, dirty read flag, and savepoint within trans.
|
||||||
|
*
|
||||||
|
* Previously this faked a ZREAD operation and used getPage().
|
||||||
|
* In TUP getPage() is run after ACC locking, but TUX comes here
|
||||||
|
* before ACC access. Instead of modifying getPage() it is more
|
||||||
|
* clear to do the full check here.
|
||||||
|
*/
|
||||||
bool
|
bool
|
||||||
Dbtup::tuxQueryTh(Uint32 fragPtrI, Uint32 tupAddr, Uint32 tupVersion, Uint32 transId1, Uint32 transId2, Uint32 savePointId)
|
Dbtup::tuxQueryTh(Uint32 fragPtrI, Uint32 pageId, Uint32 pageOffset, Uint32 tupVersion, Uint32 transId1, Uint32 transId2, bool dirty, Uint32 savePointId)
|
||||||
{
|
{
|
||||||
ljamEntry();
|
ljamEntry();
|
||||||
FragrecordPtr fragPtr;
|
FragrecordPtr fragPtr;
|
||||||
@@ -256,33 +266,73 @@ Dbtup::tuxQueryTh(Uint32 fragPtrI, Uint32 tupAddr, Uint32 tupVersion, Uint32 tra
|
|||||||
TablerecPtr tablePtr;
|
TablerecPtr tablePtr;
|
||||||
tablePtr.i = fragPtr.p->fragTableId;
|
tablePtr.i = fragPtr.p->fragTableId;
|
||||||
ptrCheckGuard(tablePtr, cnoOfTablerec, tablerec);
|
ptrCheckGuard(tablePtr, cnoOfTablerec, tablerec);
|
||||||
// get page
|
|
||||||
PagePtr pagePtr;
|
PagePtr pagePtr;
|
||||||
Uint32 fragPageId = tupAddr >> MAX_TUPLES_BITS;
|
pagePtr.i = pageId;
|
||||||
Uint32 pageIndex = tupAddr & ((1 << MAX_TUPLES_BITS ) - 1);
|
ptrCheckGuard(pagePtr, cnoOfPage, page);
|
||||||
// use temp op rec
|
|
||||||
Operationrec tempOp;
|
OperationrecPtr currOpPtr;
|
||||||
tempOp.fragPageId = fragPageId;
|
currOpPtr.i = pagePtr.p->pageWord[pageOffset];
|
||||||
tempOp.pageIndex = pageIndex;
|
if (currOpPtr.i == RNIL) {
|
||||||
tempOp.transid1 = transId1;
|
|
||||||
tempOp.transid2 = transId2;
|
|
||||||
tempOp.savePointId = savePointId;
|
|
||||||
tempOp.optype = ZREAD;
|
|
||||||
tempOp.dirtyOp = 1;
|
|
||||||
if (getPage(pagePtr, &tempOp, fragPtr.p, tablePtr.p)) {
|
|
||||||
/*
|
|
||||||
* We use the normal getPage which will return the tuple to be used
|
|
||||||
* for this transaction and savepoint id. If its tuple version
|
|
||||||
* equals the requested then we have a visible tuple otherwise not.
|
|
||||||
*/
|
|
||||||
ljam();
|
ljam();
|
||||||
Uint32 read_tupVersion = pagePtr.p->pageWord[tempOp.pageOffset + 1];
|
// tuple has no operation, any scan can see it
|
||||||
if (read_tupVersion == tupVersion) {
|
return true;
|
||||||
|
}
|
||||||
|
ptrCheckGuard(currOpPtr, cnoOfOprec, operationrec);
|
||||||
|
|
||||||
|
const bool sameTrans =
|
||||||
|
transId1 == currOpPtr.p->transid1 &&
|
||||||
|
transId2 == currOpPtr.p->transid2;
|
||||||
|
|
||||||
|
bool res = false;
|
||||||
|
OperationrecPtr loopOpPtr = currOpPtr;
|
||||||
|
|
||||||
|
if (!sameTrans) {
|
||||||
|
ljam();
|
||||||
|
if (!dirty) {
|
||||||
ljam();
|
ljam();
|
||||||
return true;
|
if (currOpPtr.p->prevActiveOp == RNIL) {
|
||||||
|
ljam();
|
||||||
|
// last op - TUX makes ACC lock request in same timeslice
|
||||||
|
res = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// loop to first op (returns false)
|
||||||
|
find_savepoint(loopOpPtr, 0);
|
||||||
|
const Uint32 op_type = loopOpPtr.p->optype;
|
||||||
|
|
||||||
|
if (op_type != ZINSERT) {
|
||||||
|
ljam();
|
||||||
|
// read committed version from the page
|
||||||
|
const Uint32 origVersion = pagePtr.p->pageWord[pageOffset + 1];
|
||||||
|
if (origVersion == tupVersion) {
|
||||||
|
ljam();
|
||||||
|
res = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
else {
|
||||||
|
ljam();
|
||||||
|
// for own trans, ignore dirty flag
|
||||||
|
|
||||||
|
if (find_savepoint(loopOpPtr, savePointId)) {
|
||||||
|
ljam();
|
||||||
|
const Uint32 op_type = loopOpPtr.p->optype;
|
||||||
|
|
||||||
|
if (op_type != ZDELETE) {
|
||||||
|
ljam();
|
||||||
|
// check if this op has produced the scanned version
|
||||||
|
Uint32 loopVersion = loopOpPtr.p->tupVersion;
|
||||||
|
if (loopVersion == tupVersion) {
|
||||||
|
ljam();
|
||||||
|
res = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ordered index build
|
// ordered index build
|
||||||
|
@@ -984,7 +984,8 @@ Dbtux::scanVisible(ScanOpPtr scanPtr, TreeEnt ent)
|
|||||||
const Frag& frag = *c_fragPool.getPtr(scan.m_fragPtrI);
|
const Frag& frag = *c_fragPool.getPtr(scan.m_fragPtrI);
|
||||||
Uint32 fragBit = ent.m_fragBit;
|
Uint32 fragBit = ent.m_fragBit;
|
||||||
Uint32 tableFragPtrI = frag.m_tupTableFragPtrI[fragBit];
|
Uint32 tableFragPtrI = frag.m_tupTableFragPtrI[fragBit];
|
||||||
Uint32 tupAddr = getTupAddr(frag, ent);
|
Uint32 pageId = ent.m_tupLoc.getPageId();
|
||||||
|
Uint32 pageOffset = ent.m_tupLoc.getPageOffset();
|
||||||
Uint32 tupVersion = ent.m_tupVersion;
|
Uint32 tupVersion = ent.m_tupVersion;
|
||||||
// check for same tuple twice in row
|
// check for same tuple twice in row
|
||||||
if (scan.m_scanEnt.m_tupLoc == ent.m_tupLoc &&
|
if (scan.m_scanEnt.m_tupLoc == ent.m_tupLoc &&
|
||||||
@@ -994,8 +995,9 @@ Dbtux::scanVisible(ScanOpPtr scanPtr, TreeEnt ent)
|
|||||||
}
|
}
|
||||||
Uint32 transId1 = scan.m_transId1;
|
Uint32 transId1 = scan.m_transId1;
|
||||||
Uint32 transId2 = scan.m_transId2;
|
Uint32 transId2 = scan.m_transId2;
|
||||||
|
bool dirty = scan.m_readCommitted;
|
||||||
Uint32 savePointId = scan.m_savePointId;
|
Uint32 savePointId = scan.m_savePointId;
|
||||||
bool ret = c_tup->tuxQueryTh(tableFragPtrI, tupAddr, tupVersion, transId1, transId2, savePointId);
|
bool ret = c_tup->tuxQueryTh(tableFragPtrI, pageId, pageOffset, tupVersion, transId1, transId2, dirty, savePointId);
|
||||||
jamEntry();
|
jamEntry();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user