Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
9fb5e5d0
Commit
9fb5e5d0
authored
Mar 13, 2007
by
lzhou/zhl@dev3-63.(none)
Browse files
Options
Browse Files
Download
Plain Diff
Merge lzhou@bk-internal.mysql.com:/home/bk/mysql-5.1-new-ndb-bj
into dev3-63.(none):/home/zhl/mysql/mysql-5.1/bug26307
parents
afd6dbbc
be4db499
Changes
18
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
604 additions
and
556 deletions
+604
-556
storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp
storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp
+93
-16
storage/ndb/src/kernel/blocks/dbtup/DbtupAbort.cpp
storage/ndb/src/kernel/blocks/dbtup/DbtupAbort.cpp
+32
-34
storage/ndb/src/kernel/blocks/dbtup/DbtupBuffer.cpp
storage/ndb/src/kernel/blocks/dbtup/DbtupBuffer.cpp
+16
-18
storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp
storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp
+20
-22
storage/ndb/src/kernel/blocks/dbtup/DbtupDebug.cpp
storage/ndb/src/kernel/blocks/dbtup/DbtupDebug.cpp
+6
-8
storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp
storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp
+1
-0
storage/ndb/src/kernel/blocks/dbtup/DbtupFixAlloc.cpp
storage/ndb/src/kernel/blocks/dbtup/DbtupFixAlloc.cpp
+5
-7
storage/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp
storage/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp
+40
-42
storage/ndb/src/kernel/blocks/dbtup/DbtupIndex.cpp
storage/ndb/src/kernel/blocks/dbtup/DbtupIndex.cpp
+34
-36
storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp
storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp
+47
-49
storage/ndb/src/kernel/blocks/dbtup/DbtupPagMan.cpp
storage/ndb/src/kernel/blocks/dbtup/DbtupPagMan.cpp
+26
-28
storage/ndb/src/kernel/blocks/dbtup/DbtupPageMap.cpp
storage/ndb/src/kernel/blocks/dbtup/DbtupPageMap.cpp
+38
-40
storage/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp
storage/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp
+113
-115
storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp
storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp
+1
-0
storage/ndb/src/kernel/blocks/dbtup/DbtupStoredProcDef.cpp
storage/ndb/src/kernel/blocks/dbtup/DbtupStoredProcDef.cpp
+12
-14
storage/ndb/src/kernel/blocks/dbtup/DbtupTabDesMan.cpp
storage/ndb/src/kernel/blocks/dbtup/DbtupTabDesMan.cpp
+18
-20
storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp
storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp
+85
-87
storage/ndb/src/kernel/blocks/dbtup/DbtupVarAlloc.cpp
storage/ndb/src/kernel/blocks/dbtup/DbtupVarAlloc.cpp
+17
-20
No files found.
storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp
View file @
9fb5e5d0
...
@@ -32,6 +32,82 @@
...
@@ -32,6 +32,82 @@
#include <../pgman.hpp>
#include <../pgman.hpp>
#include <../tsman.hpp>
#include <../tsman.hpp>
// jams
#undef jam
#undef jamEntry
#ifdef DBTUP_BUFFER_CPP
#define jam() jamLine(10000 + __LINE__)
#define jamEntry() jamEntryLine(10000 + __LINE__)
#endif
#ifdef DBTUP_ROUTINES_CPP
#define jam() jamLine(15000 + __LINE__)
#define jamEntry() jamEntryLine(15000 + __LINE__)
#endif
#ifdef DBTUP_COMMIT_CPP
#define jam() jamLine(20000 + __LINE__)
#define jamEntry() jamEntryLine(20000 + __LINE__)
#endif
#ifdef DBTUP_FIXALLOC_CPP
#define jam() jamLine(25000 + __LINE__)
#define jamEntry() jamEntryLine(25000 + __LINE__)
#endif
#ifdef DBTUP_TRIGGER_CPP
#define jam() jamLine(30000 + __LINE__)
#define jamEntry() jamEntryLine(30000 + __LINE__)
#endif
#ifdef DBTUP_ABORT_CPP
#define jam() jamLine(35000 + __LINE__)
#define jamEntry() jamEntryLine(35000 + __LINE__)
#endif
#ifdef DBTUP_PAGE_MAP_CPP
#define jam() jamLine(40000 + __LINE__)
#define jamEntry() jamEntryLine(40000 + __LINE__)
#endif
#ifdef DBTUP_PAG_MAN_CPP
#define jam() jamLine(45000 + __LINE__)
#define jamEntry() jamEntryLine(45000 + __LINE__)
#endif
#ifdef DBTUP_STORE_PROC_DEF_CPP
#define jam() jamLine(50000 + __LINE__)
#define jamEntry() jamEntryLine(50000 + __LINE__)
#endif
#ifdef DBTUP_META_CPP
#define jam() jamLine(55000 + __LINE__)
#define jamEntry() jamEntryLine(55000 + __LINE__)
#endif
#ifdef DBTUP_TAB_DES_MAN_CPP
#define jam() jamLine(60000 + __LINE__)
#define jamEntry() jamEntryLine(60000 + __LINE__)
#endif
#ifdef DBTUP_GEN_CPP
#define jam() jamLine(65000 + __LINE__)
#define jamEntry() jamEntryLine(65000 + __LINE__)
#endif
#ifdef DBTUP_INDEX_CPP
#define jam() jamLine(70000 + __LINE__)
#define jamEntry() jamEntryLine(70000 + __LINE__)
#endif
#ifdef DBTUP_DEBUG_CPP
#define jam() jamLine(75000 + __LINE__)
#define jamEntry() jamEntryLine(75000 + __LINE__)
#endif
#ifdef DBTUP_VAR_ALLOC_CPP
#define jam() jamLine(80000 + __LINE__)
#define jamEntry() jamEntryLine(80000 + __LINE__)
#endif
#ifdef DBTUP_SCAN_CPP
#define jam() jamLine(85000 + __LINE__)
#define jamEntry() jamEntryLine(85000 + __LINE__)
#endif
#ifdef DBTUP_DISK_ALLOC_CPP
#define jam() jamLine(90000 + __LINE__)
#define jamEntry() jamEntryLine(90000 + __LINE__)
#endif
#ifndef jam
#define jam() jamLine(__LINE__)
#define jamEntry() jamEntryLine(__LINE__)
#endif
#ifdef VM_TRACE
#ifdef VM_TRACE
inline
const
char
*
dbgmask
(
const
Bitmask
<
MAXNROFATTRIBUTESINWORDS
>&
bm
)
{
inline
const
char
*
dbgmask
(
const
Bitmask
<
MAXNROFATTRIBUTESINWORDS
>&
bm
)
{
static
int
i
=
0
;
static
char
buf
[
5
][
200
];
static
int
i
=
0
;
static
char
buf
[
5
][
200
];
...
@@ -70,22 +146,23 @@ inline const Uint32* ALIGN_WORD(const void* ptr)
...
@@ -70,22 +146,23 @@ inline const Uint32* ALIGN_WORD(const void* ptr)
// only reports the line number in the file it currently is located in.
// only reports the line number in the file it currently is located in.
//
//
// DbtupExecQuery.cpp 0
// DbtupExecQuery.cpp 0
// DbtupBuffer.cpp 2000
// DbtupBuffer.cpp 10000
// DbtupRoutines.cpp 3000
// DbtupRoutines.cpp 15000
// DbtupCommit.cpp 5000
// DbtupCommit.cpp 20000
// DbtupFixAlloc.cpp 6000
// DbtupFixAlloc.cpp 25000
// DbtupTrigger.cpp 7000
// DbtupTrigger.cpp 30000
// DbtupAbort.cpp 9000
// DbtupAbort.cpp 35000
// DbtupPageMap.cpp 14000
// DbtupPageMap.cpp 40000
// DbtupPagMan.cpp 16000
// DbtupPagMan.cpp 45000
// DbtupStoredProcDef.cpp 18000
// DbtupStoredProcDef.cpp 50000
// DbtupMeta.cpp 20000
// DbtupMeta.cpp 55000
// DbtupTabDesMan.cpp 22000
// DbtupTabDesMan.cpp 60000
// DbtupGen.cpp 24000
// DbtupGen.cpp 65000
// DbtupIndex.cpp 28000
// DbtupIndex.cpp 70000
// DbtupDebug.cpp 30000
// DbtupDebug.cpp 75000
// DbtupVarAlloc.cpp 32000
// DbtupVarAlloc.cpp 80000
// DbtupScan.cpp 33000
// DbtupScan.cpp 85000
// DbtupDiskAlloc.cpp 90000
//------------------------------------------------------------------
//------------------------------------------------------------------
/*
/*
...
...
storage/ndb/src/kernel/blocks/dbtup/DbtupAbort.cpp
View file @
9fb5e5d0
...
@@ -14,21 +14,19 @@
...
@@ -14,21 +14,19 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C
#define DBTUP_C
#define DBTUP_ABORT_CPP
#include "Dbtup.hpp"
#include "Dbtup.hpp"
#include <RefConvert.hpp>
#include <RefConvert.hpp>
#include <ndb_limits.h>
#include <ndb_limits.h>
#include <pc.hpp>
#include <pc.hpp>
#define ljam() { jamLine(9000 + __LINE__); }
#define ljamEntry() { jamEntryLine(9000 + __LINE__); }
void
Dbtup
::
freeAllAttrBuffers
(
Operationrec
*
const
regOperPtr
)
void
Dbtup
::
freeAllAttrBuffers
(
Operationrec
*
const
regOperPtr
)
{
{
if
(
regOperPtr
->
storedProcedureId
==
RNIL
)
{
if
(
regOperPtr
->
storedProcedureId
==
RNIL
)
{
l
jam
();
jam
();
freeAttrinbufrec
(
regOperPtr
->
firstAttrinbufrec
);
freeAttrinbufrec
(
regOperPtr
->
firstAttrinbufrec
);
}
else
{
}
else
{
l
jam
();
jam
();
StoredProcPtr
storedPtr
;
StoredProcPtr
storedPtr
;
c_storedProcPool
.
getPtr
(
storedPtr
,
(
Uint32
)
regOperPtr
->
storedProcedureId
);
c_storedProcPool
.
getPtr
(
storedPtr
,
(
Uint32
)
regOperPtr
->
storedProcedureId
);
ndbrequire
(
storedPtr
.
p
->
storedCode
==
ZSCAN_PROCEDURE
);
ndbrequire
(
storedPtr
.
p
->
storedCode
==
ZSCAN_PROCEDURE
);
...
@@ -46,7 +44,7 @@ void Dbtup::freeAttrinbufrec(Uint32 anAttrBuf)
...
@@ -46,7 +44,7 @@ void Dbtup::freeAttrinbufrec(Uint32 anAttrBuf)
Uint32
RnoFree
=
cnoFreeAttrbufrec
;
Uint32
RnoFree
=
cnoFreeAttrbufrec
;
localAttrBufPtr
.
i
=
anAttrBuf
;
localAttrBufPtr
.
i
=
anAttrBuf
;
while
(
localAttrBufPtr
.
i
!=
RNIL
)
{
while
(
localAttrBufPtr
.
i
!=
RNIL
)
{
l
jam
();
jam
();
ptrCheckGuard
(
localAttrBufPtr
,
cnoOfAttrbufrec
,
attrbufrec
);
ptrCheckGuard
(
localAttrBufPtr
,
cnoOfAttrbufrec
,
attrbufrec
);
Ttemp
=
localAttrBufPtr
.
p
->
attrbuf
[
ZBUF_NEXT
];
Ttemp
=
localAttrBufPtr
.
p
->
attrbuf
[
ZBUF_NEXT
];
localAttrBufPtr
.
p
->
attrbuf
[
ZBUF_NEXT
]
=
cfirstfreeAttrbufrec
;
localAttrBufPtr
.
p
->
attrbuf
[
ZBUF_NEXT
]
=
cfirstfreeAttrbufrec
;
...
@@ -62,7 +60,7 @@ void Dbtup::freeAttrinbufrec(Uint32 anAttrBuf)
...
@@ -62,7 +60,7 @@ void Dbtup::freeAttrinbufrec(Uint32 anAttrBuf)
*/
*/
void
Dbtup
::
execTUP_ABORTREQ
(
Signal
*
signal
)
void
Dbtup
::
execTUP_ABORTREQ
(
Signal
*
signal
)
{
{
l
jamEntry
();
jamEntry
();
do_tup_abortreq
(
signal
,
0
);
do_tup_abortreq
(
signal
,
0
);
}
}
...
@@ -80,7 +78,7 @@ void Dbtup::do_tup_abortreq(Signal* signal, Uint32 flags)
...
@@ -80,7 +78,7 @@ void Dbtup::do_tup_abortreq(Signal* signal, Uint32 flags)
(
trans_state
==
TRANS_ERROR_WAIT_TUPKEYREQ
)
||
(
trans_state
==
TRANS_ERROR_WAIT_TUPKEYREQ
)
||
(
trans_state
==
TRANS_IDLE
));
(
trans_state
==
TRANS_IDLE
));
if
(
regOperPtr
.
p
->
op_struct
.
op_type
==
ZREAD
)
{
if
(
regOperPtr
.
p
->
op_struct
.
op_type
==
ZREAD
)
{
l
jam
();
jam
();
freeAllAttrBuffers
(
regOperPtr
.
p
);
freeAllAttrBuffers
(
regOperPtr
.
p
);
initOpConnection
(
regOperPtr
.
p
);
initOpConnection
(
regOperPtr
.
p
);
return
;
return
;
...
@@ -94,7 +92,7 @@ void Dbtup::do_tup_abortreq(Signal* signal, Uint32 flags)
...
@@ -94,7 +92,7 @@ void Dbtup::do_tup_abortreq(Signal* signal, Uint32 flags)
if
(
get_tuple_state
(
regOperPtr
.
p
)
==
TUPLE_PREPARED
)
if
(
get_tuple_state
(
regOperPtr
.
p
)
==
TUPLE_PREPARED
)
{
{
l
jam
();
jam
();
if
(
!
regTabPtr
.
p
->
tuxCustomTriggers
.
isEmpty
()
&&
if
(
!
regTabPtr
.
p
->
tuxCustomTriggers
.
isEmpty
()
&&
(
flags
&
ZSKIP_TUX_TRIGGERS
)
==
0
)
(
flags
&
ZSKIP_TUX_TRIGGERS
)
==
0
)
executeTuxAbortTriggers
(
signal
,
executeTuxAbortTriggers
(
signal
,
...
@@ -105,12 +103,12 @@ void Dbtup::do_tup_abortreq(Signal* signal, Uint32 flags)
...
@@ -105,12 +103,12 @@ void Dbtup::do_tup_abortreq(Signal* signal, Uint32 flags)
OperationrecPtr
loopOpPtr
;
OperationrecPtr
loopOpPtr
;
loopOpPtr
.
i
=
regOperPtr
.
p
->
nextActiveOp
;
loopOpPtr
.
i
=
regOperPtr
.
p
->
nextActiveOp
;
while
(
loopOpPtr
.
i
!=
RNIL
)
{
while
(
loopOpPtr
.
i
!=
RNIL
)
{
l
jam
();
jam
();
c_operation_pool
.
getPtr
(
loopOpPtr
);
c_operation_pool
.
getPtr
(
loopOpPtr
);
if
(
get_tuple_state
(
loopOpPtr
.
p
)
!=
TUPLE_ALREADY_ABORTED
&&
if
(
get_tuple_state
(
loopOpPtr
.
p
)
!=
TUPLE_ALREADY_ABORTED
&&
!
regTabPtr
.
p
->
tuxCustomTriggers
.
isEmpty
()
&&
!
regTabPtr
.
p
->
tuxCustomTriggers
.
isEmpty
()
&&
(
flags
&
ZSKIP_TUX_TRIGGERS
)
==
0
)
{
(
flags
&
ZSKIP_TUX_TRIGGERS
)
==
0
)
{
l
jam
();
jam
();
executeTuxAbortTriggers
(
signal
,
executeTuxAbortTriggers
(
signal
,
loopOpPtr
.
p
,
loopOpPtr
.
p
,
regFragPtr
.
p
,
regFragPtr
.
p
,
...
@@ -211,116 +209,116 @@ int Dbtup::TUPKEY_abort(Signal* signal, int error_type)
...
@@ -211,116 +209,116 @@ int Dbtup::TUPKEY_abort(Signal* signal, int error_type)
case
1
:
case
1
:
//tmupdate_alloc_error:
//tmupdate_alloc_error:
terrorCode
=
ZMEM_NOMEM_ERROR
;
terrorCode
=
ZMEM_NOMEM_ERROR
;
l
jam
();
jam
();
break
;
break
;
case
15
:
case
15
:
l
jam
();
jam
();
terrorCode
=
ZREGISTER_INIT_ERROR
;
terrorCode
=
ZREGISTER_INIT_ERROR
;
break
;
break
;
case
16
:
case
16
:
l
jam
();
jam
();
terrorCode
=
ZTRY_TO_UPDATE_ERROR
;
terrorCode
=
ZTRY_TO_UPDATE_ERROR
;
break
;
break
;
case
17
:
case
17
:
l
jam
();
jam
();
terrorCode
=
ZNO_ILLEGAL_NULL_ATTR
;
terrorCode
=
ZNO_ILLEGAL_NULL_ATTR
;
break
;
break
;
case
19
:
case
19
:
l
jam
();
jam
();
terrorCode
=
ZTRY_TO_UPDATE_ERROR
;
terrorCode
=
ZTRY_TO_UPDATE_ERROR
;
break
;
break
;
case
20
:
case
20
:
l
jam
();
jam
();
terrorCode
=
ZREGISTER_INIT_ERROR
;
terrorCode
=
ZREGISTER_INIT_ERROR
;
break
;
break
;
case
22
:
case
22
:
l
jam
();
jam
();
terrorCode
=
ZTOTAL_LEN_ERROR
;
terrorCode
=
ZTOTAL_LEN_ERROR
;
break
;
break
;
case
23
:
case
23
:
l
jam
();
jam
();
terrorCode
=
ZREGISTER_INIT_ERROR
;
terrorCode
=
ZREGISTER_INIT_ERROR
;
break
;
break
;
case
24
:
case
24
:
l
jam
();
jam
();
terrorCode
=
ZREGISTER_INIT_ERROR
;
terrorCode
=
ZREGISTER_INIT_ERROR
;
break
;
break
;
case
26
:
case
26
:
l
jam
();
jam
();
terrorCode
=
ZREGISTER_INIT_ERROR
;
terrorCode
=
ZREGISTER_INIT_ERROR
;
break
;
break
;
case
27
:
case
27
:
l
jam
();
jam
();
terrorCode
=
ZREGISTER_INIT_ERROR
;
terrorCode
=
ZREGISTER_INIT_ERROR
;
break
;
break
;
case
28
:
case
28
:
l
jam
();
jam
();
terrorCode
=
ZREGISTER_INIT_ERROR
;
terrorCode
=
ZREGISTER_INIT_ERROR
;
break
;
break
;
case
29
:
case
29
:
l
jam
();
jam
();
break
;
break
;
case
30
:
case
30
:
l
jam
();
jam
();
terrorCode
=
ZCALL_ERROR
;
terrorCode
=
ZCALL_ERROR
;
break
;
break
;
case
31
:
case
31
:
l
jam
();
jam
();
terrorCode
=
ZSTACK_OVERFLOW_ERROR
;
terrorCode
=
ZSTACK_OVERFLOW_ERROR
;
break
;
break
;
case
32
:
case
32
:
l
jam
();
jam
();
terrorCode
=
ZSTACK_UNDERFLOW_ERROR
;
terrorCode
=
ZSTACK_UNDERFLOW_ERROR
;
break
;
break
;
case
33
:
case
33
:
l
jam
();
jam
();
terrorCode
=
ZNO_INSTRUCTION_ERROR
;
terrorCode
=
ZNO_INSTRUCTION_ERROR
;
break
;
break
;
case
34
:
case
34
:
l
jam
();
jam
();
terrorCode
=
ZOUTSIDE_OF_PROGRAM_ERROR
;
terrorCode
=
ZOUTSIDE_OF_PROGRAM_ERROR
;
break
;
break
;
case
35
:
case
35
:
l
jam
();
jam
();
terrorCode
=
ZTOO_MANY_INSTRUCTIONS_ERROR
;
terrorCode
=
ZTOO_MANY_INSTRUCTIONS_ERROR
;
break
;
break
;
case
38
:
case
38
:
l
jam
();
jam
();
terrorCode
=
ZTEMPORARY_RESOURCE_FAILURE
;
terrorCode
=
ZTEMPORARY_RESOURCE_FAILURE
;
break
;
break
;
case
39
:
case
39
:
if
(
get_trans_state
(
operPtr
.
p
)
==
TRANS_TOO_MUCH_AI
)
{
if
(
get_trans_state
(
operPtr
.
p
)
==
TRANS_TOO_MUCH_AI
)
{
l
jam
();
jam
();
terrorCode
=
ZTOO_MUCH_ATTRINFO_ERROR
;
terrorCode
=
ZTOO_MUCH_ATTRINFO_ERROR
;
}
else
if
(
get_trans_state
(
operPtr
.
p
)
==
TRANS_ERROR_WAIT_TUPKEYREQ
)
{
}
else
if
(
get_trans_state
(
operPtr
.
p
)
==
TRANS_ERROR_WAIT_TUPKEYREQ
)
{
l
jam
();
jam
();
terrorCode
=
ZSEIZE_ATTRINBUFREC_ERROR
;
terrorCode
=
ZSEIZE_ATTRINBUFREC_ERROR
;
}
else
{
}
else
{
ndbrequire
(
false
);
ndbrequire
(
false
);
}
//if
}
//if
break
;
break
;
case
40
:
case
40
:
l
jam
();
jam
();
terrorCode
=
ZUNSUPPORTED_BRANCH
;
terrorCode
=
ZUNSUPPORTED_BRANCH
;
break
;
break
;
default:
default:
...
...
storage/ndb/src/kernel/blocks/dbtup/DbtupBuffer.cpp
View file @
9fb5e5d0
...
@@ -14,28 +14,26 @@
...
@@ -14,28 +14,26 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C
#define DBTUP_C
#define DBTUP_BUFFER_CPP
#include "Dbtup.hpp"
#include "Dbtup.hpp"
#include <RefConvert.hpp>
#include <RefConvert.hpp>
#include <ndb_limits.h>
#include <ndb_limits.h>
#include <pc.hpp>
#include <pc.hpp>
#include <signaldata/TransIdAI.hpp>
#include <signaldata/TransIdAI.hpp>
#define ljam() { jamLine(2000 + __LINE__); }
#define ljamEntry() { jamEntryLine(2000 + __LINE__); }
void
Dbtup
::
execSEND_PACKED
(
Signal
*
signal
)
void
Dbtup
::
execSEND_PACKED
(
Signal
*
signal
)
{
{
Uint16
hostId
;
Uint16
hostId
;
Uint32
i
;
Uint32
i
;
Uint32
TpackedListIndex
=
cpackedListIndex
;
Uint32
TpackedListIndex
=
cpackedListIndex
;
l
jamEntry
();
jamEntry
();
for
(
i
=
0
;
i
<
TpackedListIndex
;
i
++
)
{
for
(
i
=
0
;
i
<
TpackedListIndex
;
i
++
)
{
l
jam
();
jam
();
hostId
=
cpackedList
[
i
];
hostId
=
cpackedList
[
i
];
ndbrequire
((
hostId
-
1
)
<
(
MAX_NODES
-
1
));
// Also check not zero
ndbrequire
((
hostId
-
1
)
<
(
MAX_NODES
-
1
));
// Also check not zero
Uint32
TpacketTA
=
hostBuffer
[
hostId
].
noOfPacketsTA
;
Uint32
TpacketTA
=
hostBuffer
[
hostId
].
noOfPacketsTA
;
if
(
TpacketTA
!=
0
)
{
if
(
TpacketTA
!=
0
)
{
l
jam
();
jam
();
BlockReference
TBref
=
numberToRef
(
API_PACKED
,
hostId
);
BlockReference
TBref
=
numberToRef
(
API_PACKED
,
hostId
);
Uint32
TpacketLen
=
hostBuffer
[
hostId
].
packetLenTA
;
Uint32
TpacketLen
=
hostBuffer
[
hostId
].
packetLenTA
;
MEMCOPY_NO_WORDS
(
&
signal
->
theData
[
0
],
MEMCOPY_NO_WORDS
(
&
signal
->
theData
[
0
],
...
@@ -73,7 +71,7 @@ void Dbtup::bufferTRANSID_AI(Signal* signal, BlockReference aRef,
...
@@ -73,7 +71,7 @@ void Dbtup::bufferTRANSID_AI(Signal* signal, BlockReference aRef,
// There is still space in the buffer. We will copy it into the
// There is still space in the buffer. We will copy it into the
// buffer.
// buffer.
// ----------------------------------------------------------------
// ----------------------------------------------------------------
l
jam
();
jam
();
updatePackedList
(
signal
,
hostId
);
updatePackedList
(
signal
,
hostId
);
}
else
if
(
false
&&
TnoOfPackets
==
1
)
{
}
else
if
(
false
&&
TnoOfPackets
==
1
)
{
// ----------------------------------------------------------------
// ----------------------------------------------------------------
...
@@ -118,7 +116,7 @@ void Dbtup::updatePackedList(Signal* signal, Uint16 hostId)
...
@@ -118,7 +116,7 @@ void Dbtup::updatePackedList(Signal* signal, Uint16 hostId)
{
{
if
(
hostBuffer
[
hostId
].
inPackedList
==
false
)
{
if
(
hostBuffer
[
hostId
].
inPackedList
==
false
)
{
Uint32
TpackedListIndex
=
cpackedListIndex
;
Uint32
TpackedListIndex
=
cpackedListIndex
;
l
jam
();
jam
();
hostBuffer
[
hostId
].
inPackedList
=
true
;
hostBuffer
[
hostId
].
inPackedList
=
true
;
cpackedList
[
TpackedListIndex
]
=
hostId
;
cpackedList
[
TpackedListIndex
]
=
hostId
;
cpackedListIndex
=
TpackedListIndex
+
1
;
cpackedListIndex
=
TpackedListIndex
+
1
;
...
@@ -149,7 +147,7 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
...
@@ -149,7 +147,7 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
if
(
ERROR_INSERTED
(
4006
)
&&
(
nodeId
!=
getOwnNodeId
())){
if
(
ERROR_INSERTED
(
4006
)
&&
(
nodeId
!=
getOwnNodeId
())){
// Use error insert to turn routing on
// Use error insert to turn routing on
l
jam
();
jam
();
connectedToNode
=
false
;
connectedToNode
=
false
;
}
}
...
@@ -167,18 +165,18 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
...
@@ -167,18 +165,18 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
* Own node -> execute direct
* Own node -> execute direct
*/
*/
if
(
nodeId
!=
getOwnNodeId
()){
if
(
nodeId
!=
getOwnNodeId
()){
l
jam
();
jam
();
/**
/**
* Send long sig
* Send long sig
*/
*/
if
(
ToutBufIndex
>=
22
&&
is_api
&&
!
old_dest
)
{
if
(
ToutBufIndex
>=
22
&&
is_api
&&
!
old_dest
)
{
l
jam
();
jam
();
/**
/**
* Flush buffer so that order is maintained
* Flush buffer so that order is maintained
*/
*/
if
(
TpacketTA
!=
0
)
{
if
(
TpacketTA
!=
0
)
{
l
jam
();
jam
();
BlockReference
TBref
=
numberToRef
(
API_PACKED
,
nodeId
);
BlockReference
TBref
=
numberToRef
(
API_PACKED
,
nodeId
);
MEMCOPY_NO_WORDS
(
&
signal
->
theData
[
0
],
MEMCOPY_NO_WORDS
(
&
signal
->
theData
[
0
],
&
hostBuffer
[
nodeId
].
packetBufferTA
[
0
],
&
hostBuffer
[
nodeId
].
packetBufferTA
[
0
],
...
@@ -202,7 +200,7 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
...
@@ -202,7 +200,7 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
*/
*/
#ifndef NDB_NO_DROPPED_SIGNAL
#ifndef NDB_NO_DROPPED_SIGNAL
if
(
ToutBufIndex
<
22
&&
is_api
){
if
(
ToutBufIndex
<
22
&&
is_api
){
l
jam
();
jam
();
bufferTRANSID_AI
(
signal
,
recBlockref
,
3
+
ToutBufIndex
);
bufferTRANSID_AI
(
signal
,
recBlockref
,
3
+
ToutBufIndex
);
return
;
return
;
}
}
...
@@ -214,7 +212,7 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
...
@@ -214,7 +212,7 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
Uint32
*
src
=
signal
->
theData
+
25
;
Uint32
*
src
=
signal
->
theData
+
25
;
if
(
ToutBufIndex
>=
22
){
if
(
ToutBufIndex
>=
22
){
do
{
do
{
l
jam
();
jam
();
MEMCOPY_NO_WORDS
(
&
signal
->
theData
[
3
],
src
,
22
);
MEMCOPY_NO_WORDS
(
&
signal
->
theData
[
3
],
src
,
22
);
sendSignal
(
recBlockref
,
GSN_TRANSID_AI
,
signal
,
25
,
JBB
);
sendSignal
(
recBlockref
,
GSN_TRANSID_AI
,
signal
,
25
,
JBB
);
ToutBufIndex
-=
22
;
ToutBufIndex
-=
22
;
...
@@ -223,14 +221,14 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
...
@@ -223,14 +221,14 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
}
}
if
(
ToutBufIndex
>
0
){
if
(
ToutBufIndex
>
0
){
l
jam
();
jam
();
MEMCOPY_NO_WORDS
(
&
signal
->
theData
[
3
],
src
,
ToutBufIndex
);
MEMCOPY_NO_WORDS
(
&
signal
->
theData
[
3
],
src
,
ToutBufIndex
);
sendSignal
(
recBlockref
,
GSN_TRANSID_AI
,
signal
,
3
+
ToutBufIndex
,
JBB
);
sendSignal
(
recBlockref
,
GSN_TRANSID_AI
,
signal
,
3
+
ToutBufIndex
,
JBB
);
}
}
return
;
return
;
}
}
EXECUTE_DIRECT
(
block
,
GSN_TRANSID_AI
,
signal
,
3
+
ToutBufIndex
);
EXECUTE_DIRECT
(
block
,
GSN_TRANSID_AI
,
signal
,
3
+
ToutBufIndex
);
l
jamEntry
();
jamEntry
();
return
;
return
;
}
}
...
@@ -242,7 +240,7 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
...
@@ -242,7 +240,7 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
Uint32
routeBlockref
=
req_struct
->
TC_ref
;
Uint32
routeBlockref
=
req_struct
->
TC_ref
;
if
(
true
){
// TODO is_api && !old_dest){
if
(
true
){
// TODO is_api && !old_dest){
l
jam
();
jam
();
transIdAI
->
attrData
[
0
]
=
recBlockref
;
transIdAI
->
attrData
[
0
]
=
recBlockref
;
LinearSectionPtr
ptr
[
3
];
LinearSectionPtr
ptr
[
3
];
ptr
[
0
].
p
=
&
signal
->
theData
[
25
];
ptr
[
0
].
p
=
&
signal
->
theData
[
25
];
...
@@ -260,7 +258,7 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
...
@@ -260,7 +258,7 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
Uint32
sent
=
0
;
Uint32
sent
=
0
;
Uint32
maxLen
=
TransIdAI
::
DataLength
-
1
;
Uint32
maxLen
=
TransIdAI
::
DataLength
-
1
;
while
(
sent
<
tot
)
{
while
(
sent
<
tot
)
{
l
jam
();
jam
();
Uint32
dataLen
=
(
tot
-
sent
>
maxLen
)
?
maxLen
:
tot
-
sent
;
Uint32
dataLen
=
(
tot
-
sent
>
maxLen
)
?
maxLen
:
tot
-
sent
;
Uint32
sigLen
=
dataLen
+
TransIdAI
::
HeaderLength
+
1
;
Uint32
sigLen
=
dataLen
+
TransIdAI
::
HeaderLength
+
1
;
MEMCOPY_NO_WORDS
(
&
transIdAI
->
attrData
,
MEMCOPY_NO_WORDS
(
&
transIdAI
->
attrData
,
...
...
storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp
View file @
9fb5e5d0
...
@@ -14,6 +14,7 @@
...
@@ -14,6 +14,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C
#define DBTUP_C
#define DBTUP_COMMIT_CPP
#include "Dbtup.hpp"
#include "Dbtup.hpp"
#include <RefConvert.hpp>
#include <RefConvert.hpp>
#include <ndb_limits.h>
#include <ndb_limits.h>
...
@@ -21,16 +22,13 @@
...
@@ -21,16 +22,13 @@
#include <signaldata/TupCommit.hpp>
#include <signaldata/TupCommit.hpp>
#include "../dblqh/Dblqh.hpp"
#include "../dblqh/Dblqh.hpp"
#define ljam() { jamLine(5000 + __LINE__); }
#define ljamEntry() { jamEntryLine(5000 + __LINE__); }
void
Dbtup
::
execTUP_DEALLOCREQ
(
Signal
*
signal
)
void
Dbtup
::
execTUP_DEALLOCREQ
(
Signal
*
signal
)
{
{
TablerecPtr
regTabPtr
;
TablerecPtr
regTabPtr
;
FragrecordPtr
regFragPtr
;
FragrecordPtr
regFragPtr
;
Uint32
frag_page_id
,
frag_id
;
Uint32
frag_page_id
,
frag_id
;
l
jamEntry
();
jamEntry
();
frag_id
=
signal
->
theData
[
0
];
frag_id
=
signal
->
theData
[
0
];
regTabPtr
.
i
=
signal
->
theData
[
1
];
regTabPtr
.
i
=
signal
->
theData
[
1
];
...
@@ -62,7 +60,7 @@ void Dbtup::execTUP_DEALLOCREQ(Signal* signal)
...
@@ -62,7 +60,7 @@ void Dbtup::execTUP_DEALLOCREQ(Signal* signal)
if
(
regTabPtr
.
p
->
m_attributes
[
MM
].
m_no_of_varsize
)
if
(
regTabPtr
.
p
->
m_attributes
[
MM
].
m_no_of_varsize
)
{
{
l
jam
();
jam
();
free_var_rec
(
regFragPtr
.
p
,
regTabPtr
.
p
,
&
tmp
,
pagePtr
);
free_var_rec
(
regFragPtr
.
p
,
regTabPtr
.
p
,
&
tmp
,
pagePtr
);
}
else
{
}
else
{
free_fix_rec
(
regFragPtr
.
p
,
regTabPtr
.
p
,
&
tmp
,
(
Fix_page
*
)
pagePtr
.
p
);
free_fix_rec
(
regFragPtr
.
p
,
regTabPtr
.
p
,
&
tmp
,
(
Fix_page
*
)
pagePtr
.
p
);
...
@@ -78,7 +76,7 @@ void Dbtup::execTUP_WRITELOG_REQ(Signal* signal)
...
@@ -78,7 +76,7 @@ void Dbtup::execTUP_WRITELOG_REQ(Signal* signal)
Uint32
gci
=
signal
->
theData
[
1
];
Uint32
gci
=
signal
->
theData
[
1
];
c_operation_pool
.
getPtr
(
loopOpPtr
);
c_operation_pool
.
getPtr
(
loopOpPtr
);
while
(
loopOpPtr
.
p
->
prevActiveOp
!=
RNIL
)
{
while
(
loopOpPtr
.
p
->
prevActiveOp
!=
RNIL
)
{
l
jam
();
jam
();
loopOpPtr
.
i
=
loopOpPtr
.
p
->
prevActiveOp
;
loopOpPtr
.
i
=
loopOpPtr
.
p
->
prevActiveOp
;
c_operation_pool
.
getPtr
(
loopOpPtr
);
c_operation_pool
.
getPtr
(
loopOpPtr
);
}
}
...
@@ -87,11 +85,11 @@ void Dbtup::execTUP_WRITELOG_REQ(Signal* signal)
...
@@ -87,11 +85,11 @@ void Dbtup::execTUP_WRITELOG_REQ(Signal* signal)
signal
->
theData
[
0
]
=
loopOpPtr
.
p
->
userpointer
;
signal
->
theData
[
0
]
=
loopOpPtr
.
p
->
userpointer
;
signal
->
theData
[
1
]
=
gci
;
signal
->
theData
[
1
]
=
gci
;
if
(
loopOpPtr
.
p
->
nextActiveOp
==
RNIL
)
{
if
(
loopOpPtr
.
p
->
nextActiveOp
==
RNIL
)
{
l
jam
();
jam
();
EXECUTE_DIRECT
(
DBLQH
,
GSN_LQH_WRITELOG_REQ
,
signal
,
2
);
EXECUTE_DIRECT
(
DBLQH
,
GSN_LQH_WRITELOG_REQ
,
signal
,
2
);
return
;
return
;
}
}
l
jam
();
jam
();
EXECUTE_DIRECT
(
DBLQH
,
GSN_LQH_WRITELOG_REQ
,
signal
,
2
);
EXECUTE_DIRECT
(
DBLQH
,
GSN_LQH_WRITELOG_REQ
,
signal
,
2
);
jamEntry
();
jamEntry
();
loopOpPtr
.
i
=
loopOpPtr
.
p
->
nextActiveOp
;
loopOpPtr
.
i
=
loopOpPtr
.
p
->
nextActiveOp
;
...
@@ -114,16 +112,16 @@ void Dbtup::removeActiveOpList(Operationrec* const regOperPtr,
...
@@ -114,16 +112,16 @@ void Dbtup::removeActiveOpList(Operationrec* const regOperPtr,
if
(
regOperPtr
->
op_struct
.
in_active_list
)
{
if
(
regOperPtr
->
op_struct
.
in_active_list
)
{
regOperPtr
->
op_struct
.
in_active_list
=
false
;
regOperPtr
->
op_struct
.
in_active_list
=
false
;
if
(
regOperPtr
->
nextActiveOp
!=
RNIL
)
{
if
(
regOperPtr
->
nextActiveOp
!=
RNIL
)
{
l
jam
();
jam
();
raoOperPtr
.
i
=
regOperPtr
->
nextActiveOp
;
raoOperPtr
.
i
=
regOperPtr
->
nextActiveOp
;
c_operation_pool
.
getPtr
(
raoOperPtr
);
c_operation_pool
.
getPtr
(
raoOperPtr
);
raoOperPtr
.
p
->
prevActiveOp
=
regOperPtr
->
prevActiveOp
;
raoOperPtr
.
p
->
prevActiveOp
=
regOperPtr
->
prevActiveOp
;
}
else
{
}
else
{
l
jam
();
jam
();
tuple_ptr
->
m_operation_ptr_i
=
regOperPtr
->
prevActiveOp
;
tuple_ptr
->
m_operation_ptr_i
=
regOperPtr
->
prevActiveOp
;
}
}
if
(
regOperPtr
->
prevActiveOp
!=
RNIL
)
{
if
(
regOperPtr
->
prevActiveOp
!=
RNIL
)
{
l
jam
();
jam
();
raoOperPtr
.
i
=
regOperPtr
->
prevActiveOp
;
raoOperPtr
.
i
=
regOperPtr
->
prevActiveOp
;
c_operation_pool
.
getPtr
(
raoOperPtr
);
c_operation_pool
.
getPtr
(
raoOperPtr
);
raoOperPtr
.
p
->
nextActiveOp
=
regOperPtr
->
nextActiveOp
;
raoOperPtr
.
p
->
nextActiveOp
=
regOperPtr
->
nextActiveOp
;
...
@@ -343,7 +341,7 @@ Dbtup::disk_page_commit_callback(Signal* signal,
...
@@ -343,7 +341,7 @@ Dbtup::disk_page_commit_callback(Signal* signal,
Uint32
gci
;
Uint32
gci
;
OperationrecPtr
regOperPtr
;
OperationrecPtr
regOperPtr
;
l
jamEntry
();
jamEntry
();
c_operation_pool
.
getPtr
(
regOperPtr
,
opPtrI
);
c_operation_pool
.
getPtr
(
regOperPtr
,
opPtrI
);
c_lqh
->
get_op_info
(
regOperPtr
.
p
->
userpointer
,
&
hash_value
,
&
gci
);
c_lqh
->
get_op_info
(
regOperPtr
.
p
->
userpointer
,
&
hash_value
,
&
gci
);
...
@@ -379,7 +377,7 @@ Dbtup::disk_page_log_buffer_callback(Signal* signal,
...
@@ -379,7 +377,7 @@ Dbtup::disk_page_log_buffer_callback(Signal* signal,
Uint32
gci
;
Uint32
gci
;
OperationrecPtr
regOperPtr
;
OperationrecPtr
regOperPtr
;
l
jamEntry
();
jamEntry
();
c_operation_pool
.
getPtr
(
regOperPtr
,
opPtrI
);
c_operation_pool
.
getPtr
(
regOperPtr
,
opPtrI
);
c_lqh
->
get_op_info
(
regOperPtr
.
p
->
userpointer
,
&
hash_value
,
&
gci
);
c_lqh
->
get_op_info
(
regOperPtr
.
p
->
userpointer
,
&
hash_value
,
&
gci
);
...
@@ -447,7 +445,7 @@ void Dbtup::execTUP_COMMITREQ(Signal* signal)
...
@@ -447,7 +445,7 @@ void Dbtup::execTUP_COMMITREQ(Signal* signal)
TupCommitReq
*
const
tupCommitReq
=
(
TupCommitReq
*
)
signal
->
getDataPtr
();
TupCommitReq
*
const
tupCommitReq
=
(
TupCommitReq
*
)
signal
->
getDataPtr
();
regOperPtr
.
i
=
tupCommitReq
->
opPtr
;
regOperPtr
.
i
=
tupCommitReq
->
opPtr
;
l
jamEntry
();
jamEntry
();
c_operation_pool
.
getPtr
(
regOperPtr
);
c_operation_pool
.
getPtr
(
regOperPtr
);
if
(
!
regOperPtr
.
p
->
is_first_operation
())
if
(
!
regOperPtr
.
p
->
is_first_operation
())
...
@@ -603,7 +601,7 @@ void Dbtup::execTUP_COMMITREQ(Signal* signal)
...
@@ -603,7 +601,7 @@ void Dbtup::execTUP_COMMITREQ(Signal* signal)
* why can't we instead remove "own version" (when approriate ofcourse)
* why can't we instead remove "own version" (when approriate ofcourse)
*/
*/
if
(
!
regTabPtr
.
p
->
tuxCustomTriggers
.
isEmpty
())
{
if
(
!
regTabPtr
.
p
->
tuxCustomTriggers
.
isEmpty
())
{
l
jam
();
jam
();
OperationrecPtr
loopPtr
=
regOperPtr
;
OperationrecPtr
loopPtr
=
regOperPtr
;
while
(
loopPtr
.
i
!=
RNIL
)
while
(
loopPtr
.
i
!=
RNIL
)
{
{
...
@@ -656,18 +654,18 @@ Dbtup::set_change_mask_info(KeyReqStruct * const req_struct,
...
@@ -656,18 +654,18 @@ Dbtup::set_change_mask_info(KeyReqStruct * const req_struct,
{
{
ChangeMaskState
state
=
get_change_mask_state
(
regOperPtr
);
ChangeMaskState
state
=
get_change_mask_state
(
regOperPtr
);
if
(
state
==
USE_SAVED_CHANGE_MASK
)
{
if
(
state
==
USE_SAVED_CHANGE_MASK
)
{
l
jam
();
jam
();
req_struct
->
changeMask
.
setWord
(
0
,
regOperPtr
->
saved_change_mask
[
0
]);
req_struct
->
changeMask
.
setWord
(
0
,
regOperPtr
->
saved_change_mask
[
0
]);
req_struct
->
changeMask
.
setWord
(
1
,
regOperPtr
->
saved_change_mask
[
1
]);
req_struct
->
changeMask
.
setWord
(
1
,
regOperPtr
->
saved_change_mask
[
1
]);
}
else
if
(
state
==
RECALCULATE_CHANGE_MASK
)
{
}
else
if
(
state
==
RECALCULATE_CHANGE_MASK
)
{
l
jam
();
jam
();
// Recompute change mask, for now set all bits
// Recompute change mask, for now set all bits
req_struct
->
changeMask
.
set
();
req_struct
->
changeMask
.
set
();
}
else
if
(
state
==
SET_ALL_MASK
)
{
}
else
if
(
state
==
SET_ALL_MASK
)
{
l
jam
();
jam
();
req_struct
->
changeMask
.
set
();
req_struct
->
changeMask
.
set
();
}
else
{
}
else
{
l
jam
();
jam
();
ndbrequire
(
state
==
DELETE_CHANGES
);
ndbrequire
(
state
==
DELETE_CHANGES
);
req_struct
->
changeMask
.
set
();
req_struct
->
changeMask
.
set
();
}
}
...
@@ -687,17 +685,17 @@ Dbtup::calculateChangeMask(Page* const pagePtr,
...
@@ -687,17 +685,17 @@ Dbtup::calculateChangeMask(Page* const pagePtr,
ndbrequire
(
loopOpPtr
.
p
->
op_struct
.
op_type
==
ZUPDATE
);
ndbrequire
(
loopOpPtr
.
p
->
op_struct
.
op_type
==
ZUPDATE
);
ChangeMaskState
change_mask
=
get_change_mask_state
(
loopOpPtr
.
p
);
ChangeMaskState
change_mask
=
get_change_mask_state
(
loopOpPtr
.
p
);
if
(
change_mask
==
USE_SAVED_CHANGE_MASK
)
{
if
(
change_mask
==
USE_SAVED_CHANGE_MASK
)
{
l
jam
();
jam
();
saved_word1
|=
loopOpPtr
.
p
->
saved_change_mask
[
0
];
saved_word1
|=
loopOpPtr
.
p
->
saved_change_mask
[
0
];
saved_word2
|=
loopOpPtr
.
p
->
saved_change_mask
[
1
];
saved_word2
|=
loopOpPtr
.
p
->
saved_change_mask
[
1
];
}
else
if
(
change_mask
==
RECALCULATE_CHANGE_MASK
)
{
}
else
if
(
change_mask
==
RECALCULATE_CHANGE_MASK
)
{
l
jam
();
jam
();
//Recompute change mask, for now set all bits
//Recompute change mask, for now set all bits
req_struct
->
changeMask
.
set
();
req_struct
->
changeMask
.
set
();
return
;
return
;
}
else
{
}
else
{
ndbrequire
(
change_mask
==
SET_ALL_MASK
);
ndbrequire
(
change_mask
==
SET_ALL_MASK
);
l
jam
();
jam
();
req_struct
->
changeMask
.
set
();
req_struct
->
changeMask
.
set
();
return
;
return
;
}
}
...
...
storage/ndb/src/kernel/blocks/dbtup/DbtupDebug.cpp
View file @
9fb5e5d0
...
@@ -15,6 +15,7 @@
...
@@ -15,6 +15,7 @@
#define DBTUP_C
#define DBTUP_C
#define DBTUP_DEBUG_CPP
#include "Dbtup.hpp"
#include "Dbtup.hpp"
#include <RefConvert.hpp>
#include <RefConvert.hpp>
#include <ndb_limits.h>
#include <ndb_limits.h>
...
@@ -24,9 +25,6 @@
...
@@ -24,9 +25,6 @@
#include <signaldata/EventReport.hpp>
#include <signaldata/EventReport.hpp>
#include <Vector.hpp>
#include <Vector.hpp>
#define ljam() { jamLine(30000 + __LINE__); }
#define ljamEntry() { jamEntryLine(30000 + __LINE__); }
/* **************************************************************** */
/* **************************************************************** */
/* ---------------------------------------------------------------- */
/* ---------------------------------------------------------------- */
/* ------------------------ DEBUG MODULE -------------------------- */
/* ------------------------ DEBUG MODULE -------------------------- */
...
@@ -35,7 +33,7 @@
...
@@ -35,7 +33,7 @@
void
Dbtup
::
execDEBUG_SIG
(
Signal
*
signal
)
void
Dbtup
::
execDEBUG_SIG
(
Signal
*
signal
)
{
{
PagePtr
regPagePtr
;
PagePtr
regPagePtr
;
l
jamEntry
();
jamEntry
();
regPagePtr
.
i
=
signal
->
theData
[
0
];
regPagePtr
.
i
=
signal
->
theData
[
0
];
c_page_pool
.
getPtr
(
regPagePtr
);
c_page_pool
.
getPtr
(
regPagePtr
);
}
//Dbtup::execDEBUG_SIG()
}
//Dbtup::execDEBUG_SIG()
...
@@ -248,18 +246,18 @@ void Dbtup::execMEMCHECKREQ(Signal* signal)
...
@@ -248,18 +246,18 @@ void Dbtup::execMEMCHECKREQ(Signal* signal)
PagePtr regPagePtr;
PagePtr regPagePtr;
Uint32* data = &signal->theData[0];
Uint32* data = &signal->theData[0];
l
jamEntry();
jamEntry();
BlockReference blockref = signal->theData[0];
BlockReference blockref = signal->theData[0];
Uint32 i;
Uint32 i;
for (i = 0; i < 25; i++) {
for (i = 0; i < 25; i++) {
l
jam();
jam();
data[i] = 0;
data[i] = 0;
}//for
}//for
for (i = 0; i < 16; i++) {
for (i = 0; i < 16; i++) {
regPagePtr.i = cfreepageList[i];
regPagePtr.i = cfreepageList[i];
l
jam();
jam();
while (regPagePtr.i != RNIL) {
while (regPagePtr.i != RNIL) {
l
jam();
jam();
ptrCheckGuard(regPagePtr, cnoOfPage, cpage);
ptrCheckGuard(regPagePtr, cnoOfPage, cpage);
regPagePtr.i = regPagePtr.p->next_page;
regPagePtr.i = regPagePtr.p->next_page;
data[0]++;
data[0]++;
...
...
storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp
View file @
9fb5e5d0
...
@@ -14,6 +14,7 @@
...
@@ -14,6 +14,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C
#define DBTUP_C
#define DBTUP_DISK_ALLOC_CPP
#include "Dbtup.hpp"
#include "Dbtup.hpp"
static
bool
f_undo_done
=
true
;
static
bool
f_undo_done
=
true
;
...
...
storage/ndb/src/kernel/blocks/dbtup/DbtupFixAlloc.cpp
View file @
9fb5e5d0
...
@@ -14,14 +14,12 @@
...
@@ -14,14 +14,12 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C
#define DBTUP_C
#define DBTUP_FIXALLOC_CPP
#include "Dbtup.hpp"
#include "Dbtup.hpp"
#include <RefConvert.hpp>
#include <RefConvert.hpp>
#include <ndb_limits.h>
#include <ndb_limits.h>
#include <pc.hpp>
#include <pc.hpp>
#define ljam() { jamLine(6000 + __LINE__); }
#define ljamEntry() { jamEntryLine(6000 + __LINE__); }
//
//
// Fixed Allocator
// Fixed Allocator
// This module is used to allocate and free fixed size tuples from the
// This module is used to allocate and free fixed size tuples from the
...
@@ -79,7 +77,7 @@ Dbtup::alloc_fix_rec(Fragrecord* const regFragPtr,
...
@@ -79,7 +77,7 @@ Dbtup::alloc_fix_rec(Fragrecord* const regFragPtr,
/* ---------------------------------------------------------------- */
/* ---------------------------------------------------------------- */
pagePtr
.
i
=
getEmptyPage
(
regFragPtr
);
pagePtr
.
i
=
getEmptyPage
(
regFragPtr
);
if
(
pagePtr
.
i
!=
RNIL
)
{
if
(
pagePtr
.
i
!=
RNIL
)
{
l
jam
();
jam
();
/* ---------------------------------------------------------------- */
/* ---------------------------------------------------------------- */
// We found empty pages on the fragment. Allocate an empty page and
// We found empty pages on the fragment. Allocate an empty page and
// convert it into a tuple header page and put it in thFreeFirst-list.
// convert it into a tuple header page and put it in thFreeFirst-list.
...
@@ -95,14 +93,14 @@ Dbtup::alloc_fix_rec(Fragrecord* const regFragPtr,
...
@@ -95,14 +93,14 @@ Dbtup::alloc_fix_rec(Fragrecord* const regFragPtr,
LocalDLList
<
Page
>
free_pages
(
c_page_pool
,
regFragPtr
->
thFreeFirst
);
LocalDLList
<
Page
>
free_pages
(
c_page_pool
,
regFragPtr
->
thFreeFirst
);
free_pages
.
add
(
pagePtr
);
free_pages
.
add
(
pagePtr
);
}
else
{
}
else
{
l
jam
();
jam
();
/* ---------------------------------------------------------------- */
/* ---------------------------------------------------------------- */
/* THERE ARE NO EMPTY PAGES. MEMORY CAN NOT BE ALLOCATED. */
/* THERE ARE NO EMPTY PAGES. MEMORY CAN NOT BE ALLOCATED. */
/* ---------------------------------------------------------------- */
/* ---------------------------------------------------------------- */
return
0
;
return
0
;
}
}
}
else
{
}
else
{
l
jam
();
jam
();
/* ---------------------------------------------------------------- */
/* ---------------------------------------------------------------- */
/* THIS SHOULD BE THE COMMON PATH THROUGH THE CODE, FREE */
/* THIS SHOULD BE THE COMMON PATH THROUGH THE CODE, FREE */
/* COPY PAGE EXISTED. */
/* COPY PAGE EXISTED. */
...
@@ -194,7 +192,7 @@ void Dbtup::free_fix_rec(Fragrecord* regFragPtr,
...
@@ -194,7 +192,7 @@ void Dbtup::free_fix_rec(Fragrecord* regFragPtr,
if
(
free
==
1
)
if
(
free
==
1
)
{
{
l
jam
();
jam
();
PagePtr
pagePtr
=
{
(
Page
*
)
regPagePtr
,
key
->
m_page_no
};
PagePtr
pagePtr
=
{
(
Page
*
)
regPagePtr
,
key
->
m_page_no
};
LocalDLList
<
Page
>
free_pages
(
c_page_pool
,
regFragPtr
->
thFreeFirst
);
LocalDLList
<
Page
>
free_pages
(
c_page_pool
,
regFragPtr
->
thFreeFirst
);
ndbrequire
(
regPagePtr
->
page_state
==
ZTH_MM_FULL
);
ndbrequire
(
regPagePtr
->
page_state
==
ZTH_MM_FULL
);
...
...
storage/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp
View file @
9fb5e5d0
...
@@ -15,6 +15,7 @@
...
@@ -15,6 +15,7 @@
#define DBTUP_C
#define DBTUP_C
#define DBTUP_GEN_CPP
#include "Dbtup.hpp"
#include "Dbtup.hpp"
#include <RefConvert.hpp>
#include <RefConvert.hpp>
#include <ndb_limits.h>
#include <ndb_limits.h>
...
@@ -34,9 +35,6 @@
...
@@ -34,9 +35,6 @@
#define DEBUG(x) { ndbout << "TUP::" << x << endl; }
#define DEBUG(x) { ndbout << "TUP::" << x << endl; }
#define ljam() { jamLine(24000 + __LINE__); }
#define ljamEntry() { jamEntryLine(24000 + __LINE__); }
void
Dbtup
::
initData
()
void
Dbtup
::
initData
()
{
{
cnoOfAttrbufrec
=
ZNO_OF_ATTRBUFREC
;
cnoOfAttrbufrec
=
ZNO_OF_ATTRBUFREC
;
...
@@ -152,21 +150,21 @@ BLOCK_FUNCTIONS(Dbtup)
...
@@ -152,21 +150,21 @@ BLOCK_FUNCTIONS(Dbtup)
void
Dbtup
::
execCONTINUEB
(
Signal
*
signal
)
void
Dbtup
::
execCONTINUEB
(
Signal
*
signal
)
{
{
l
jamEntry
();
jamEntry
();
Uint32
actionType
=
signal
->
theData
[
0
];
Uint32
actionType
=
signal
->
theData
[
0
];
Uint32
dataPtr
=
signal
->
theData
[
1
];
Uint32
dataPtr
=
signal
->
theData
[
1
];
switch
(
actionType
)
{
switch
(
actionType
)
{
case
ZINITIALISE_RECORDS
:
case
ZINITIALISE_RECORDS
:
l
jam
();
jam
();
initialiseRecordsLab
(
signal
,
dataPtr
,
initialiseRecordsLab
(
signal
,
dataPtr
,
signal
->
theData
[
2
],
signal
->
theData
[
3
]);
signal
->
theData
[
2
],
signal
->
theData
[
3
]);
break
;
break
;
case
ZREL_FRAG
:
case
ZREL_FRAG
:
l
jam
();
jam
();
releaseFragment
(
signal
,
dataPtr
,
signal
->
theData
[
2
]);
releaseFragment
(
signal
,
dataPtr
,
signal
->
theData
[
2
]);
break
;
break
;
case
ZREPORT_MEMORY_USAGE
:{
case
ZREPORT_MEMORY_USAGE
:{
l
jam
();
jam
();
static
int
c_currentMemUsed
=
0
;
static
int
c_currentMemUsed
=
0
;
Uint32
cnt
=
signal
->
theData
[
1
];
Uint32
cnt
=
signal
->
theData
[
1
];
Uint32
tmp
=
c_page_pool
.
getSize
();
Uint32
tmp
=
c_page_pool
.
getSize
();
...
@@ -201,11 +199,11 @@ void Dbtup::execCONTINUEB(Signal* signal)
...
@@ -201,11 +199,11 @@ void Dbtup::execCONTINUEB(Signal* signal)
return
;
return
;
}
}
case
ZBUILD_INDEX
:
case
ZBUILD_INDEX
:
l
jam
();
jam
();
buildIndex
(
signal
,
dataPtr
);
buildIndex
(
signal
,
dataPtr
);
break
;
break
;
case
ZTUP_SCAN
:
case
ZTUP_SCAN
:
l
jam
();
jam
();
{
{
ScanOpPtr
scanPtr
;
ScanOpPtr
scanPtr
;
c_scanOpPool
.
getPtr
(
scanPtr
,
dataPtr
);
c_scanOpPool
.
getPtr
(
scanPtr
,
dataPtr
);
...
@@ -214,7 +212,7 @@ void Dbtup::execCONTINUEB(Signal* signal)
...
@@ -214,7 +212,7 @@ void Dbtup::execCONTINUEB(Signal* signal)
return
;
return
;
case
ZFREE_EXTENT
:
case
ZFREE_EXTENT
:
{
{
l
jam
();
jam
();
TablerecPtr
tabPtr
;
TablerecPtr
tabPtr
;
tabPtr
.
i
=
dataPtr
;
tabPtr
.
i
=
dataPtr
;
...
@@ -227,7 +225,7 @@ void Dbtup::execCONTINUEB(Signal* signal)
...
@@ -227,7 +225,7 @@ void Dbtup::execCONTINUEB(Signal* signal)
}
}
case
ZUNMAP_PAGES
:
case
ZUNMAP_PAGES
:
{
{
l
jam
();
jam
();
TablerecPtr
tabPtr
;
TablerecPtr
tabPtr
;
tabPtr
.
i
=
dataPtr
;
tabPtr
.
i
=
dataPtr
;
...
@@ -240,7 +238,7 @@ void Dbtup::execCONTINUEB(Signal* signal)
...
@@ -240,7 +238,7 @@ void Dbtup::execCONTINUEB(Signal* signal)
}
}
case
ZFREE_VAR_PAGES
:
case
ZFREE_VAR_PAGES
:
{
{
l
jam
();
jam
();
drop_fragment_free_var_pages
(
signal
);
drop_fragment_free_var_pages
(
signal
);
return
;
return
;
}
}
...
@@ -257,12 +255,12 @@ void Dbtup::execCONTINUEB(Signal* signal)
...
@@ -257,12 +255,12 @@ void Dbtup::execCONTINUEB(Signal* signal)
/* **************************************************************** */
/* **************************************************************** */
void
Dbtup
::
execSTTOR
(
Signal
*
signal
)
void
Dbtup
::
execSTTOR
(
Signal
*
signal
)
{
{
l
jamEntry
();
jamEntry
();
Uint32
startPhase
=
signal
->
theData
[
1
];
Uint32
startPhase
=
signal
->
theData
[
1
];
Uint32
sigKey
=
signal
->
theData
[
6
];
Uint32
sigKey
=
signal
->
theData
[
6
];
switch
(
startPhase
)
{
switch
(
startPhase
)
{
case
ZSTARTPHASE1
:
case
ZSTARTPHASE1
:
l
jam
();
jam
();
CLEAR_ERROR_INSERT_VALUE
;
CLEAR_ERROR_INSERT_VALUE
;
ndbrequire
((
c_lqh
=
(
Dblqh
*
)
globalData
.
getBlock
(
DBLQH
))
!=
0
);
ndbrequire
((
c_lqh
=
(
Dblqh
*
)
globalData
.
getBlock
(
DBLQH
))
!=
0
);
ndbrequire
((
c_tsman
=
(
Tsman
*
)
globalData
.
getBlock
(
TSMAN
))
!=
0
);
ndbrequire
((
c_tsman
=
(
Tsman
*
)
globalData
.
getBlock
(
TSMAN
))
!=
0
);
...
@@ -270,7 +268,7 @@ void Dbtup::execSTTOR(Signal* signal)
...
@@ -270,7 +268,7 @@ void Dbtup::execSTTOR(Signal* signal)
cownref
=
calcTupBlockRef
(
0
);
cownref
=
calcTupBlockRef
(
0
);
break
;
break
;
default:
default:
l
jam
();
jam
();
break
;
break
;
}
//switch
}
//switch
signal
->
theData
[
0
]
=
sigKey
;
signal
->
theData
[
0
]
=
sigKey
;
...
@@ -293,7 +291,7 @@ void Dbtup::execREAD_CONFIG_REQ(Signal* signal)
...
@@ -293,7 +291,7 @@ void Dbtup::execREAD_CONFIG_REQ(Signal* signal)
Uint32
senderData
=
req
->
senderData
;
Uint32
senderData
=
req
->
senderData
;
ndbrequire
(
req
->
noOfParameters
==
0
);
ndbrequire
(
req
->
noOfParameters
==
0
);
l
jamEntry
();
jamEntry
();
const
ndb_mgm_configuration_iterator
*
p
=
const
ndb_mgm_configuration_iterator
*
p
=
m_ctx
.
m_config
.
getOwnConfigIterator
();
m_ctx
.
m_config
.
getOwnConfigIterator
();
...
@@ -413,58 +411,58 @@ void Dbtup::initialiseRecordsLab(Signal* signal, Uint32 switchData,
...
@@ -413,58 +411,58 @@ void Dbtup::initialiseRecordsLab(Signal* signal, Uint32 switchData,
{
{
switch
(
switchData
)
{
switch
(
switchData
)
{
case
0
:
case
0
:
l
jam
();
jam
();
initializeHostBuffer
();
initializeHostBuffer
();
break
;
break
;
case
1
:
case
1
:
l
jam
();
jam
();
initializeOperationrec
();
initializeOperationrec
();
break
;
break
;
case
2
:
case
2
:
l
jam
();
jam
();
initializePage
();
initializePage
();
break
;
break
;
case
3
:
case
3
:
l
jam
();
jam
();
break
;
break
;
case
4
:
case
4
:
l
jam
();
jam
();
initializeTablerec
();
initializeTablerec
();
break
;
break
;
case
5
:
case
5
:
l
jam
();
jam
();
break
;
break
;
case
6
:
case
6
:
l
jam
();
jam
();
initializeFragrecord
();
initializeFragrecord
();
break
;
break
;
case
7
:
case
7
:
l
jam
();
jam
();
initializeFragoperrec
();
initializeFragoperrec
();
break
;
break
;
case
8
:
case
8
:
l
jam
();
jam
();
initializePageRange
();
initializePageRange
();
break
;
break
;
case
9
:
case
9
:
l
jam
();
jam
();
initializeTabDescr
();
initializeTabDescr
();
break
;
break
;
case
10
:
case
10
:
l
jam
();
jam
();
break
;
break
;
case
11
:
case
11
:
l
jam
();
jam
();
break
;
break
;
case
12
:
case
12
:
l
jam
();
jam
();
initializeAttrbufrec
();
initializeAttrbufrec
();
break
;
break
;
case
13
:
case
13
:
l
jam
();
jam
();
break
;
break
;
case
14
:
case
14
:
l
jam
();
jam
();
{
{
ReadConfigConf
*
conf
=
(
ReadConfigConf
*
)
signal
->
getDataPtrSend
();
ReadConfigConf
*
conf
=
(
ReadConfigConf
*
)
signal
->
getDataPtrSend
();
...
@@ -488,28 +486,28 @@ void Dbtup::initialiseRecordsLab(Signal* signal, Uint32 switchData,
...
@@ -488,28 +486,28 @@ void Dbtup::initialiseRecordsLab(Signal* signal, Uint32 switchData,
void
Dbtup
::
execNDB_STTOR
(
Signal
*
signal
)
void
Dbtup
::
execNDB_STTOR
(
Signal
*
signal
)
{
{
l
jamEntry
();
jamEntry
();
cndbcntrRef
=
signal
->
theData
[
0
];
cndbcntrRef
=
signal
->
theData
[
0
];
Uint32
ownNodeId
=
signal
->
theData
[
1
];
Uint32
ownNodeId
=
signal
->
theData
[
1
];
Uint32
startPhase
=
signal
->
theData
[
2
];
Uint32
startPhase
=
signal
->
theData
[
2
];
switch
(
startPhase
)
{
switch
(
startPhase
)
{
case
ZSTARTPHASE1
:
case
ZSTARTPHASE1
:
l
jam
();
jam
();
cownNodeId
=
ownNodeId
;
cownNodeId
=
ownNodeId
;
cownref
=
calcTupBlockRef
(
ownNodeId
);
cownref
=
calcTupBlockRef
(
ownNodeId
);
break
;
break
;
case
ZSTARTPHASE2
:
case
ZSTARTPHASE2
:
l
jam
();
jam
();
break
;
break
;
case
ZSTARTPHASE3
:
case
ZSTARTPHASE3
:
l
jam
();
jam
();
startphase3Lab
(
signal
,
~
0
,
~
0
);
startphase3Lab
(
signal
,
~
0
,
~
0
);
break
;
break
;
case
ZSTARTPHASE4
:
case
ZSTARTPHASE4
:
l
jam
();
jam
();
break
;
break
;
case
ZSTARTPHASE6
:
case
ZSTARTPHASE6
:
l
jam
();
jam
();
/*****************************************/
/*****************************************/
/* NOW SET THE DISK WRITE SPEED TO */
/* NOW SET THE DISK WRITE SPEED TO */
/* PAGES PER TICK AFTER SYSTEM */
/* PAGES PER TICK AFTER SYSTEM */
...
@@ -520,7 +518,7 @@ void Dbtup::execNDB_STTOR(Signal* signal)
...
@@ -520,7 +518,7 @@ void Dbtup::execNDB_STTOR(Signal* signal)
sendSignalWithDelay
(
reference
(),
GSN_CONTINUEB
,
signal
,
1000
,
1
);
sendSignalWithDelay
(
reference
(),
GSN_CONTINUEB
,
signal
,
1000
,
1
);
break
;
break
;
default:
default:
l
jam
();
jam
();
break
;
break
;
}
//switch
}
//switch
signal
->
theData
[
0
]
=
cownref
;
signal
->
theData
[
0
]
=
cownref
;
...
@@ -597,7 +595,7 @@ void Dbtup::initializeTablerec()
...
@@ -597,7 +595,7 @@ void Dbtup::initializeTablerec()
{
{
TablerecPtr
regTabPtr
;
TablerecPtr
regTabPtr
;
for
(
regTabPtr
.
i
=
0
;
regTabPtr
.
i
<
cnoOfTablerec
;
regTabPtr
.
i
++
)
{
for
(
regTabPtr
.
i
=
0
;
regTabPtr
.
i
<
cnoOfTablerec
;
regTabPtr
.
i
++
)
{
l
jam
();
jam
();
refresh_watch_dog
();
refresh_watch_dog
();
ptrAss
(
regTabPtr
,
tablerec
);
ptrAss
(
regTabPtr
,
tablerec
);
initTab
(
regTabPtr
.
p
);
initTab
(
regTabPtr
.
p
);
...
@@ -668,12 +666,12 @@ void Dbtup::initializeTabDescr()
...
@@ -668,12 +666,12 @@ void Dbtup::initializeTabDescr()
void
Dbtup
::
execTUPSEIZEREQ
(
Signal
*
signal
)
void
Dbtup
::
execTUPSEIZEREQ
(
Signal
*
signal
)
{
{
OperationrecPtr
regOperPtr
;
OperationrecPtr
regOperPtr
;
l
jamEntry
();
jamEntry
();
Uint32
userPtr
=
signal
->
theData
[
0
];
Uint32
userPtr
=
signal
->
theData
[
0
];
BlockReference
userRef
=
signal
->
theData
[
1
];
BlockReference
userRef
=
signal
->
theData
[
1
];
if
(
!
c_operation_pool
.
seize
(
regOperPtr
))
if
(
!
c_operation_pool
.
seize
(
regOperPtr
))
{
{
l
jam
();
jam
();
signal
->
theData
[
0
]
=
userPtr
;
signal
->
theData
[
0
]
=
userPtr
;
signal
->
theData
[
1
]
=
ZGET_OPREC_ERROR
;
signal
->
theData
[
1
]
=
ZGET_OPREC_ERROR
;
sendSignal
(
userRef
,
GSN_TUPSEIZEREF
,
signal
,
2
,
JBB
);
sendSignal
(
userRef
,
GSN_TUPSEIZEREF
,
signal
,
2
,
JBB
);
...
@@ -707,7 +705,7 @@ void Dbtup::execTUPSEIZEREQ(Signal* signal)
...
@@ -707,7 +705,7 @@ void Dbtup::execTUPSEIZEREQ(Signal* signal)
void
Dbtup
::
execTUPRELEASEREQ
(
Signal
*
signal
)
void
Dbtup
::
execTUPRELEASEREQ
(
Signal
*
signal
)
{
{
OperationrecPtr
regOperPtr
;
OperationrecPtr
regOperPtr
;
l
jamEntry
();
jamEntry
();
regOperPtr
.
i
=
signal
->
theData
[
0
];
regOperPtr
.
i
=
signal
->
theData
[
0
];
c_operation_pool
.
getPtr
(
regOperPtr
);
c_operation_pool
.
getPtr
(
regOperPtr
);
set_trans_state
(
regOperPtr
.
p
,
TRANS_DISCONNECTED
);
set_trans_state
(
regOperPtr
.
p
,
TRANS_DISCONNECTED
);
...
...
storage/ndb/src/kernel/blocks/dbtup/DbtupIndex.cpp
View file @
9fb5e5d0
...
@@ -14,6 +14,7 @@
...
@@ -14,6 +14,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C
#define DBTUP_C
#define DBTUP_INDEX_CPP
#include "Dbtup.hpp"
#include "Dbtup.hpp"
#include <RefConvert.hpp>
#include <RefConvert.hpp>
#include <ndb_limits.h>
#include <ndb_limits.h>
...
@@ -23,9 +24,6 @@
...
@@ -23,9 +24,6 @@
#include <AttributeHeader.hpp>
#include <AttributeHeader.hpp>
#include <signaldata/TuxMaint.hpp>
#include <signaldata/TuxMaint.hpp>
#define ljam() { jamLine(28000 + __LINE__); }
#define ljamEntry() { jamEntryLine(28000 + __LINE__); }
// methods used by ordered index
// methods used by ordered index
void
void
...
@@ -34,7 +32,7 @@ Dbtup::tuxGetTupAddr(Uint32 fragPtrI,
...
@@ -34,7 +32,7 @@ Dbtup::tuxGetTupAddr(Uint32 fragPtrI,
Uint32
pageIndex
,
Uint32
pageIndex
,
Uint32
&
tupAddr
)
Uint32
&
tupAddr
)
{
{
l
jamEntry
();
jamEntry
();
PagePtr
pagePtr
;
PagePtr
pagePtr
;
c_page_pool
.
getPtr
(
pagePtr
,
pageId
);
c_page_pool
.
getPtr
(
pagePtr
,
pageId
);
Uint32
fragPageId
=
pagePtr
.
p
->
frag_page_id
;
Uint32
fragPageId
=
pagePtr
.
p
->
frag_page_id
;
...
@@ -48,7 +46,7 @@ Dbtup::tuxAllocNode(Signal* signal,
...
@@ -48,7 +46,7 @@ Dbtup::tuxAllocNode(Signal* signal,
Uint32
&
pageOffset
,
Uint32
&
pageOffset
,
Uint32
*&
node
)
Uint32
*&
node
)
{
{
l
jamEntry
();
jamEntry
();
FragrecordPtr
fragPtr
;
FragrecordPtr
fragPtr
;
fragPtr
.
i
=
fragPtrI
;
fragPtr
.
i
=
fragPtrI
;
ptrCheckGuard
(
fragPtr
,
cnoOfFragrec
,
fragrecord
);
ptrCheckGuard
(
fragPtr
,
cnoOfFragrec
,
fragrecord
);
...
@@ -61,7 +59,7 @@ Dbtup::tuxAllocNode(Signal* signal,
...
@@ -61,7 +59,7 @@ Dbtup::tuxAllocNode(Signal* signal,
Uint32
*
ptr
,
frag_page_id
;
Uint32
*
ptr
,
frag_page_id
;
if
((
ptr
=
alloc_fix_rec
(
fragPtr
.
p
,
tablePtr
.
p
,
&
key
,
&
frag_page_id
))
==
0
)
if
((
ptr
=
alloc_fix_rec
(
fragPtr
.
p
,
tablePtr
.
p
,
&
key
,
&
frag_page_id
))
==
0
)
{
{
l
jam
();
jam
();
terrorCode
=
ZMEM_NOMEM_ERROR
;
// caller sets error
terrorCode
=
ZMEM_NOMEM_ERROR
;
// caller sets error
return
terrorCode
;
return
terrorCode
;
}
}
...
@@ -82,7 +80,7 @@ Dbtup::tuxFreeNode(Signal* signal,
...
@@ -82,7 +80,7 @@ Dbtup::tuxFreeNode(Signal* signal,
Uint32 pageOffset,
Uint32 pageOffset,
Uint32* node)
Uint32* node)
{
{
l
jamEntry();
jamEntry();
FragrecordPtr fragPtr;
FragrecordPtr fragPtr;
fragPtr.i= fragPtrI;
fragPtr.i= fragPtrI;
ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord);
ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord);
...
@@ -105,7 +103,7 @@ Dbtup::tuxGetNode(Uint32 fragPtrI,
...
@@ -105,7 +103,7 @@ Dbtup::tuxGetNode(Uint32 fragPtrI,
Uint32
pageOffset
,
Uint32
pageOffset
,
Uint32
*&
node
)
Uint32
*&
node
)
{
{
l
jamEntry
();
jamEntry
();
FragrecordPtr
fragPtr
;
FragrecordPtr
fragPtr
;
fragPtr
.
i
=
fragPtrI
;
fragPtr
.
i
=
fragPtrI
;
ptrCheckGuard
(
fragPtr
,
cnoOfFragrec
,
fragrecord
);
ptrCheckGuard
(
fragPtr
,
cnoOfFragrec
,
fragrecord
);
...
@@ -130,7 +128,7 @@ Dbtup::tuxReadAttrs(Uint32 fragPtrI,
...
@@ -130,7 +128,7 @@ Dbtup::tuxReadAttrs(Uint32 fragPtrI,
Uint32
numAttrs
,
Uint32
numAttrs
,
Uint32
*
dataOut
)
Uint32
*
dataOut
)
{
{
l
jamEntry
();
jamEntry
();
// use own variables instead of globals
// use own variables instead of globals
FragrecordPtr
fragPtr
;
FragrecordPtr
fragPtr
;
fragPtr
.
i
=
fragPtrI
;
fragPtr
.
i
=
fragPtrI
;
...
@@ -150,21 +148,21 @@ Dbtup::tuxReadAttrs(Uint32 fragPtrI,
...
@@ -150,21 +148,21 @@ Dbtup::tuxReadAttrs(Uint32 fragPtrI,
Tuple_header
*
tuple_ptr
=
req_struct
.
m_tuple_ptr
;
Tuple_header
*
tuple_ptr
=
req_struct
.
m_tuple_ptr
;
if
(
tuple_ptr
->
get_tuple_version
()
!=
tupVersion
)
if
(
tuple_ptr
->
get_tuple_version
()
!=
tupVersion
)
{
{
l
jam
();
jam
();
OperationrecPtr
opPtr
;
OperationrecPtr
opPtr
;
opPtr
.
i
=
tuple_ptr
->
m_operation_ptr_i
;
opPtr
.
i
=
tuple_ptr
->
m_operation_ptr_i
;
Uint32
loopGuard
=
0
;
Uint32
loopGuard
=
0
;
while
(
opPtr
.
i
!=
RNIL
)
{
while
(
opPtr
.
i
!=
RNIL
)
{
c_operation_pool
.
getPtr
(
opPtr
);
c_operation_pool
.
getPtr
(
opPtr
);
if
(
opPtr
.
p
->
tupVersion
==
tupVersion
)
{
if
(
opPtr
.
p
->
tupVersion
==
tupVersion
)
{
l
jam
();
jam
();
if
(
!
opPtr
.
p
->
m_copy_tuple_location
.
isNull
())
{
if
(
!
opPtr
.
p
->
m_copy_tuple_location
.
isNull
())
{
req_struct
.
m_tuple_ptr
=
(
Tuple_header
*
)
req_struct
.
m_tuple_ptr
=
(
Tuple_header
*
)
c_undo_buffer
.
get_ptr
(
&
opPtr
.
p
->
m_copy_tuple_location
);
c_undo_buffer
.
get_ptr
(
&
opPtr
.
p
->
m_copy_tuple_location
);
}
}
break
;
break
;
}
}
l
jam
();
jam
();
opPtr
.
i
=
opPtr
.
p
->
prevActiveOp
;
opPtr
.
i
=
opPtr
.
p
->
prevActiveOp
;
ndbrequire
(
++
loopGuard
<
(
1
<<
ZTUP_VERSION_BITS
));
ndbrequire
(
++
loopGuard
<
(
1
<<
ZTUP_VERSION_BITS
));
}
}
...
@@ -202,7 +200,7 @@ Dbtup::tuxReadAttrs(Uint32 fragPtrI,
...
@@ -202,7 +200,7 @@ Dbtup::tuxReadAttrs(Uint32 fragPtrI,
int
int
Dbtup
::
tuxReadPk
(
Uint32
fragPtrI
,
Uint32
pageId
,
Uint32
pageIndex
,
Uint32
*
dataOut
,
bool
xfrmFlag
)
Dbtup
::
tuxReadPk
(
Uint32
fragPtrI
,
Uint32
pageId
,
Uint32
pageIndex
,
Uint32
*
dataOut
,
bool
xfrmFlag
)
{
{
l
jamEntry
();
jamEntry
();
// use own variables instead of globals
// use own variables instead of globals
FragrecordPtr
fragPtr
;
FragrecordPtr
fragPtr
;
fragPtr
.
i
=
fragPtrI
;
fragPtr
.
i
=
fragPtrI
;
...
@@ -305,7 +303,7 @@ Dbtup::tuxReadPk(Uint32 fragPtrI, Uint32 pageId, Uint32 pageIndex, Uint32* dataO
...
@@ -305,7 +303,7 @@ Dbtup::tuxReadPk(Uint32 fragPtrI, Uint32 pageId, Uint32 pageIndex, Uint32* dataO
int
int
Dbtup
::
accReadPk
(
Uint32
tableId
,
Uint32
fragId
,
Uint32
fragPageId
,
Uint32
pageIndex
,
Uint32
*
dataOut
,
bool
xfrmFlag
)
Dbtup
::
accReadPk
(
Uint32
tableId
,
Uint32
fragId
,
Uint32
fragPageId
,
Uint32
pageIndex
,
Uint32
*
dataOut
,
bool
xfrmFlag
)
{
{
l
jamEntry
();
jamEntry
();
// get table
// get table
TablerecPtr
tablePtr
;
TablerecPtr
tablePtr
;
tablePtr
.
i
=
tableId
;
tablePtr
.
i
=
tableId
;
...
@@ -329,7 +327,7 @@ Dbtup::tuxQueryTh(Uint32 fragPtrI,
...
@@ -329,7 +327,7 @@ Dbtup::tuxQueryTh(Uint32 fragPtrI,
Uint32
transId2
,
Uint32
transId2
,
Uint32
savePointId
)
Uint32
savePointId
)
{
{
l
jamEntry
();
jamEntry
();
FragrecordPtr
fragPtr
;
FragrecordPtr
fragPtr
;
fragPtr
.
i
=
fragPtrI
;
fragPtr
.
i
=
fragPtrI
;
ptrCheckGuard
(
fragPtr
,
cnoOfFragrec
,
fragrecord
);
ptrCheckGuard
(
fragPtr
,
cnoOfFragrec
,
fragrecord
);
...
@@ -358,9 +356,9 @@ Dbtup::tuxQueryTh(Uint32 fragPtrI,
...
@@ -358,9 +356,9 @@ Dbtup::tuxQueryTh(Uint32 fragPtrI,
* for this transaction and savepoint id. If its tuple version
* for this transaction and savepoint id. If its tuple version
* equals the requested then we have a visible tuple otherwise not.
* equals the requested then we have a visible tuple otherwise not.
*/
*/
l
jam
();
jam
();
if
(
req_struct
.
m_tuple_ptr
->
get_tuple_version
()
==
tupVersion
)
{
if
(
req_struct
.
m_tuple_ptr
->
get_tuple_version
()
==
tupVersion
)
{
l
jam
();
jam
();
return
true
;
return
true
;
}
}
}
}
...
@@ -378,7 +376,7 @@ Dbtup::tuxQueryTh(Uint32 fragPtrI,
...
@@ -378,7 +376,7 @@ Dbtup::tuxQueryTh(Uint32 fragPtrI,
void
void
Dbtup
::
execBUILDINDXREQ
(
Signal
*
signal
)
Dbtup
::
execBUILDINDXREQ
(
Signal
*
signal
)
{
{
l
jamEntry
();
jamEntry
();
#ifdef TIME_MEASUREMENT
#ifdef TIME_MEASUREMENT
time_events
=
0
;
time_events
=
0
;
tot_time_passed
=
0
;
tot_time_passed
=
0
;
...
@@ -387,7 +385,7 @@ Dbtup::execBUILDINDXREQ(Signal* signal)
...
@@ -387,7 +385,7 @@ Dbtup::execBUILDINDXREQ(Signal* signal)
// get new operation
// get new operation
BuildIndexPtr
buildPtr
;
BuildIndexPtr
buildPtr
;
if
(
!
c_buildIndexList
.
seize
(
buildPtr
))
{
if
(
!
c_buildIndexList
.
seize
(
buildPtr
))
{
l
jam
();
jam
();
BuildIndexRec
buildRec
;
BuildIndexRec
buildRec
;
memcpy
(
buildRec
.
m_request
,
signal
->
theData
,
sizeof
(
buildRec
.
m_request
));
memcpy
(
buildRec
.
m_request
,
signal
->
theData
,
sizeof
(
buildRec
.
m_request
));
buildRec
.
m_errorCode
=
BuildIndxRef
::
Busy
;
buildRec
.
m_errorCode
=
BuildIndxRef
::
Busy
;
...
@@ -402,7 +400,7 @@ Dbtup::execBUILDINDXREQ(Signal* signal)
...
@@ -402,7 +400,7 @@ Dbtup::execBUILDINDXREQ(Signal* signal)
do
{
do
{
const
BuildIndxReq
*
buildReq
=
(
const
BuildIndxReq
*
)
buildPtr
.
p
->
m_request
;
const
BuildIndxReq
*
buildReq
=
(
const
BuildIndxReq
*
)
buildPtr
.
p
->
m_request
;
if
(
buildReq
->
getTableId
()
>=
cnoOfTablerec
)
{
if
(
buildReq
->
getTableId
()
>=
cnoOfTablerec
)
{
l
jam
();
jam
();
buildPtr
.
p
->
m_errorCode
=
BuildIndxRef
::
InvalidPrimaryTable
;
buildPtr
.
p
->
m_errorCode
=
BuildIndxRef
::
InvalidPrimaryTable
;
break
;
break
;
}
}
...
@@ -410,7 +408,7 @@ Dbtup::execBUILDINDXREQ(Signal* signal)
...
@@ -410,7 +408,7 @@ Dbtup::execBUILDINDXREQ(Signal* signal)
tablePtr
.
i
=
buildReq
->
getTableId
();
tablePtr
.
i
=
buildReq
->
getTableId
();
ptrCheckGuard
(
tablePtr
,
cnoOfTablerec
,
tablerec
);
ptrCheckGuard
(
tablePtr
,
cnoOfTablerec
,
tablerec
);
if
(
tablePtr
.
p
->
tableStatus
!=
DEFINED
)
{
if
(
tablePtr
.
p
->
tableStatus
!=
DEFINED
)
{
l
jam
();
jam
();
buildPtr
.
p
->
m_errorCode
=
BuildIndxRef
::
InvalidPrimaryTable
;
buildPtr
.
p
->
m_errorCode
=
BuildIndxRef
::
InvalidPrimaryTable
;
break
;
break
;
}
}
...
@@ -418,7 +416,7 @@ Dbtup::execBUILDINDXREQ(Signal* signal)
...
@@ -418,7 +416,7 @@ Dbtup::execBUILDINDXREQ(Signal* signal)
buildPtr
.
p
->
m_build_vs
=
buildPtr
.
p
->
m_build_vs
=
tablePtr
.
p
->
m_attributes
[
MM
].
m_no_of_varsize
>
0
;
tablePtr
.
p
->
m_attributes
[
MM
].
m_no_of_varsize
>
0
;
if
(
DictTabInfo
::
isOrderedIndex
(
buildReq
->
getIndexType
()))
{
if
(
DictTabInfo
::
isOrderedIndex
(
buildReq
->
getIndexType
()))
{
l
jam
();
jam
();
const
DLList
<
TupTriggerData
>&
triggerList
=
const
DLList
<
TupTriggerData
>&
triggerList
=
tablePtr
.
p
->
tuxCustomTriggers
;
tablePtr
.
p
->
tuxCustomTriggers
;
...
@@ -426,13 +424,13 @@ Dbtup::execBUILDINDXREQ(Signal* signal)
...
@@ -426,13 +424,13 @@ Dbtup::execBUILDINDXREQ(Signal* signal)
triggerList
.
first
(
triggerPtr
);
triggerList
.
first
(
triggerPtr
);
while
(
triggerPtr
.
i
!=
RNIL
)
{
while
(
triggerPtr
.
i
!=
RNIL
)
{
if
(
triggerPtr
.
p
->
indexId
==
buildReq
->
getIndexId
())
{
if
(
triggerPtr
.
p
->
indexId
==
buildReq
->
getIndexId
())
{
l
jam
();
jam
();
break
;
break
;
}
}
triggerList
.
next
(
triggerPtr
);
triggerList
.
next
(
triggerPtr
);
}
}
if
(
triggerPtr
.
i
==
RNIL
)
{
if
(
triggerPtr
.
i
==
RNIL
)
{
l
jam
();
jam
();
// trigger was not created
// trigger was not created
buildPtr
.
p
->
m_errorCode
=
BuildIndxRef
::
InternalError
;
buildPtr
.
p
->
m_errorCode
=
BuildIndxRef
::
InternalError
;
break
;
break
;
...
@@ -440,12 +438,12 @@ Dbtup::execBUILDINDXREQ(Signal* signal)
...
@@ -440,12 +438,12 @@ Dbtup::execBUILDINDXREQ(Signal* signal)
buildPtr
.
p
->
m_indexId
=
buildReq
->
getIndexId
();
buildPtr
.
p
->
m_indexId
=
buildReq
->
getIndexId
();
buildPtr
.
p
->
m_buildRef
=
DBTUX
;
buildPtr
.
p
->
m_buildRef
=
DBTUX
;
}
else
if
(
buildReq
->
getIndexId
()
==
RNIL
)
{
}
else
if
(
buildReq
->
getIndexId
()
==
RNIL
)
{
l
jam
();
jam
();
// REBUILD of acc
// REBUILD of acc
buildPtr
.
p
->
m_indexId
=
RNIL
;
buildPtr
.
p
->
m_indexId
=
RNIL
;
buildPtr
.
p
->
m_buildRef
=
DBACC
;
buildPtr
.
p
->
m_buildRef
=
DBACC
;
}
else
{
}
else
{
l
jam
();
jam
();
buildPtr
.
p
->
m_errorCode
=
BuildIndxRef
::
InvalidIndexType
;
buildPtr
.
p
->
m_errorCode
=
BuildIndxRef
::
InvalidIndexType
;
break
;
break
;
}
}
...
@@ -490,7 +488,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
...
@@ -490,7 +488,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
// get fragment
// get fragment
FragrecordPtr
fragPtr
;
FragrecordPtr
fragPtr
;
if
(
buildPtr
.
p
->
m_fragNo
==
MAX_FRAG_PER_NODE
)
{
if
(
buildPtr
.
p
->
m_fragNo
==
MAX_FRAG_PER_NODE
)
{
l
jam
();
jam
();
// build ready
// build ready
buildIndexReply
(
signal
,
buildPtr
.
p
);
buildIndexReply
(
signal
,
buildPtr
.
p
);
c_buildIndexList
.
release
(
buildPtr
);
c_buildIndexList
.
release
(
buildPtr
);
...
@@ -499,7 +497,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
...
@@ -499,7 +497,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
ndbrequire
(
buildPtr
.
p
->
m_fragNo
<
MAX_FRAG_PER_NODE
);
ndbrequire
(
buildPtr
.
p
->
m_fragNo
<
MAX_FRAG_PER_NODE
);
fragPtr
.
i
=
tablePtr
.
p
->
fragrec
[
buildPtr
.
p
->
m_fragNo
];
fragPtr
.
i
=
tablePtr
.
p
->
fragrec
[
buildPtr
.
p
->
m_fragNo
];
if
(
fragPtr
.
i
==
RNIL
)
{
if
(
fragPtr
.
i
==
RNIL
)
{
l
jam
();
jam
();
buildPtr
.
p
->
m_fragNo
++
;
buildPtr
.
p
->
m_fragNo
++
;
buildPtr
.
p
->
m_pageId
=
0
;
buildPtr
.
p
->
m_pageId
=
0
;
buildPtr
.
p
->
m_tupleNo
=
firstTupleNo
;
buildPtr
.
p
->
m_tupleNo
=
firstTupleNo
;
...
@@ -509,7 +507,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
...
@@ -509,7 +507,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
// get page
// get page
PagePtr
pagePtr
;
PagePtr
pagePtr
;
if
(
buildPtr
.
p
->
m_pageId
>=
fragPtr
.
p
->
noOfPages
)
{
if
(
buildPtr
.
p
->
m_pageId
>=
fragPtr
.
p
->
noOfPages
)
{
l
jam
();
jam
();
buildPtr
.
p
->
m_fragNo
++
;
buildPtr
.
p
->
m_fragNo
++
;
buildPtr
.
p
->
m_pageId
=
0
;
buildPtr
.
p
->
m_pageId
=
0
;
buildPtr
.
p
->
m_tupleNo
=
firstTupleNo
;
buildPtr
.
p
->
m_tupleNo
=
firstTupleNo
;
...
@@ -520,7 +518,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
...
@@ -520,7 +518,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
Uint32
pageState
=
pagePtr
.
p
->
page_state
;
Uint32
pageState
=
pagePtr
.
p
->
page_state
;
// skip empty page
// skip empty page
if
(
pageState
==
ZEMPTY_MM
)
{
if
(
pageState
==
ZEMPTY_MM
)
{
l
jam
();
jam
();
buildPtr
.
p
->
m_pageId
++
;
buildPtr
.
p
->
m_pageId
++
;
buildPtr
.
p
->
m_tupleNo
=
firstTupleNo
;
buildPtr
.
p
->
m_tupleNo
=
firstTupleNo
;
break
;
break
;
...
@@ -530,7 +528,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
...
@@ -530,7 +528,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
const
Tuple_header
*
tuple_ptr
=
0
;
const
Tuple_header
*
tuple_ptr
=
0
;
pageIndex
=
buildPtr
.
p
->
m_tupleNo
*
tupheadsize
;
pageIndex
=
buildPtr
.
p
->
m_tupleNo
*
tupheadsize
;
if
(
pageIndex
+
tupheadsize
>
Fix_page
::
DATA_WORDS
)
{
if
(
pageIndex
+
tupheadsize
>
Fix_page
::
DATA_WORDS
)
{
l
jam
();
jam
();
buildPtr
.
p
->
m_pageId
++
;
buildPtr
.
p
->
m_pageId
++
;
buildPtr
.
p
->
m_tupleNo
=
firstTupleNo
;
buildPtr
.
p
->
m_tupleNo
=
firstTupleNo
;
break
;
break
;
...
@@ -538,7 +536,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
...
@@ -538,7 +536,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
tuple_ptr
=
(
Tuple_header
*
)
&
pagePtr
.
p
->
m_data
[
pageIndex
];
tuple_ptr
=
(
Tuple_header
*
)
&
pagePtr
.
p
->
m_data
[
pageIndex
];
// skip over free tuple
// skip over free tuple
if
(
tuple_ptr
->
m_header_bits
&
Tuple_header
::
FREE
)
{
if
(
tuple_ptr
->
m_header_bits
&
Tuple_header
::
FREE
)
{
l
jam
();
jam
();
buildPtr
.
p
->
m_tupleNo
++
;
buildPtr
.
p
->
m_tupleNo
++
;
break
;
break
;
}
}
...
@@ -581,7 +579,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
...
@@ -581,7 +579,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
tuple as a copy tuple. The original tuple is stable and is thus
tuple as a copy tuple. The original tuple is stable and is thus
preferrable to store in TUX.
preferrable to store in TUX.
*/
*/
l
jam
();
jam
();
/**
/**
* Since copy tuples now can't be found on real pages.
* Since copy tuples now can't be found on real pages.
...
@@ -610,11 +608,11 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
...
@@ -610,11 +608,11 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
}
while
(
req
->
errorCode
==
0
&&
pageOperPtr
.
i
!=
RNIL
);
}
while
(
req
->
errorCode
==
0
&&
pageOperPtr
.
i
!=
RNIL
);
}
}
l
jamEntry
();
jamEntry
();
if
(
req
->
errorCode
!=
0
)
{
if
(
req
->
errorCode
!=
0
)
{
switch
(
req
->
errorCode
)
{
switch
(
req
->
errorCode
)
{
case
TuxMaintReq
:
:
NoMemError
:
case
TuxMaintReq
:
:
NoMemError
:
l
jam
();
jam
();
buildPtr
.
p
->
m_errorCode
=
BuildIndxRef
::
AllocationFailure
;
buildPtr
.
p
->
m_errorCode
=
BuildIndxRef
::
AllocationFailure
;
break
;
break
;
default:
default:
...
@@ -666,7 +664,7 @@ Dbtup::buildIndexReply(Signal* signal, const BuildIndexRec* buildPtrP)
...
@@ -666,7 +664,7 @@ Dbtup::buildIndexReply(Signal* signal, const BuildIndexRec* buildPtrP)
rep
->
setIndexId
(
buildReq
->
getIndexId
());
rep
->
setIndexId
(
buildReq
->
getIndexId
());
// conf
// conf
if
(
buildPtrP
->
m_errorCode
==
BuildIndxRef
::
NoError
)
{
if
(
buildPtrP
->
m_errorCode
==
BuildIndxRef
::
NoError
)
{
l
jam
();
jam
();
sendSignal
(
rep
->
getUserRef
(),
GSN_BUILDINDXCONF
,
sendSignal
(
rep
->
getUserRef
(),
GSN_BUILDINDXCONF
,
signal
,
BuildIndxConf
::
SignalLength
,
JBB
);
signal
,
BuildIndxConf
::
SignalLength
,
JBB
);
return
;
return
;
...
...
storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp
View file @
9fb5e5d0
...
@@ -15,6 +15,7 @@
...
@@ -15,6 +15,7 @@
#define DBTUP_C
#define DBTUP_C
#define DBTUP_META_CPP
#include "Dbtup.hpp"
#include "Dbtup.hpp"
#include <RefConvert.hpp>
#include <RefConvert.hpp>
#include <ndb_limits.h>
#include <ndb_limits.h>
...
@@ -29,16 +30,13 @@
...
@@ -29,16 +30,13 @@
#include "AttributeOffset.hpp"
#include "AttributeOffset.hpp"
#include <my_sys.h>
#include <my_sys.h>
#define ljam() { jamLine(20000 + __LINE__); }
#define ljamEntry() { jamEntryLine(20000 + __LINE__); }
void
Dbtup
::
execTUPFRAGREQ
(
Signal
*
signal
)
void
Dbtup
::
execTUPFRAGREQ
(
Signal
*
signal
)
{
{
l
jamEntry
();
jamEntry
();
TupFragReq
*
tupFragReq
=
(
TupFragReq
*
)
signal
->
getDataPtr
();
TupFragReq
*
tupFragReq
=
(
TupFragReq
*
)
signal
->
getDataPtr
();
if
(
tupFragReq
->
userPtr
==
(
Uint32
)
-
1
)
{
if
(
tupFragReq
->
userPtr
==
(
Uint32
)
-
1
)
{
l
jam
();
jam
();
abortAddFragOp
(
signal
);
abortAddFragOp
(
signal
);
return
;
return
;
}
}
...
@@ -70,7 +68,7 @@ void Dbtup::execTUPFRAGREQ(Signal* signal)
...
@@ -70,7 +68,7 @@ void Dbtup::execTUPFRAGREQ(Signal* signal)
#ifndef VM_TRACE
#ifndef VM_TRACE
// config mismatch - do not crash if release compiled
// config mismatch - do not crash if release compiled
if
(
regTabPtr
.
i
>=
cnoOfTablerec
)
{
if
(
regTabPtr
.
i
>=
cnoOfTablerec
)
{
l
jam
();
jam
();
tupFragReq
->
userPtr
=
userptr
;
tupFragReq
->
userPtr
=
userptr
;
tupFragReq
->
userRef
=
800
;
tupFragReq
->
userRef
=
800
;
sendSignal
(
userblockref
,
GSN_TUPFRAGREF
,
signal
,
2
,
JBB
);
sendSignal
(
userblockref
,
GSN_TUPFRAGREF
,
signal
,
2
,
JBB
);
...
@@ -80,7 +78,7 @@ void Dbtup::execTUPFRAGREQ(Signal* signal)
...
@@ -80,7 +78,7 @@ void Dbtup::execTUPFRAGREQ(Signal* signal)
ptrCheckGuard
(
regTabPtr
,
cnoOfTablerec
,
tablerec
);
ptrCheckGuard
(
regTabPtr
,
cnoOfTablerec
,
tablerec
);
if
(
cfirstfreeFragopr
==
RNIL
)
{
if
(
cfirstfreeFragopr
==
RNIL
)
{
l
jam
();
jam
();
tupFragReq
->
userPtr
=
userptr
;
tupFragReq
->
userPtr
=
userptr
;
tupFragReq
->
userRef
=
ZNOFREE_FRAGOP_ERROR
;
tupFragReq
->
userRef
=
ZNOFREE_FRAGOP_ERROR
;
sendSignal
(
userblockref
,
GSN_TUPFRAGREF
,
signal
,
2
,
JBB
);
sendSignal
(
userblockref
,
GSN_TUPFRAGREF
,
signal
,
2
,
JBB
);
...
@@ -109,29 +107,29 @@ void Dbtup::execTUPFRAGREQ(Signal* signal)
...
@@ -109,29 +107,29 @@ void Dbtup::execTUPFRAGREQ(Signal* signal)
getFragmentrec
(
regFragPtr
,
fragId
,
regTabPtr
.
p
);
getFragmentrec
(
regFragPtr
,
fragId
,
regTabPtr
.
p
);
if
(
regFragPtr
.
i
!=
RNIL
)
{
if
(
regFragPtr
.
i
!=
RNIL
)
{
l
jam
();
jam
();
terrorCode
=
ZEXIST_FRAG_ERROR
;
terrorCode
=
ZEXIST_FRAG_ERROR
;
fragrefuse1Lab
(
signal
,
fragOperPtr
);
fragrefuse1Lab
(
signal
,
fragOperPtr
);
return
;
return
;
}
}
if
(
cfirstfreefrag
!=
RNIL
)
{
if
(
cfirstfreefrag
!=
RNIL
)
{
l
jam
();
jam
();
seizeFragrecord
(
regFragPtr
);
seizeFragrecord
(
regFragPtr
);
}
else
{
}
else
{
l
jam
();
jam
();
terrorCode
=
ZFULL_FRAGRECORD_ERROR
;
terrorCode
=
ZFULL_FRAGRECORD_ERROR
;
fragrefuse1Lab
(
signal
,
fragOperPtr
);
fragrefuse1Lab
(
signal
,
fragOperPtr
);
return
;
return
;
}
}
initFragRange
(
regFragPtr
.
p
);
initFragRange
(
regFragPtr
.
p
);
if
(
!
addfragtotab
(
regTabPtr
.
p
,
fragId
,
regFragPtr
.
i
))
{
if
(
!
addfragtotab
(
regTabPtr
.
p
,
fragId
,
regFragPtr
.
i
))
{
l
jam
();
jam
();
terrorCode
=
ZNO_FREE_TAB_ENTRY_ERROR
;
terrorCode
=
ZNO_FREE_TAB_ENTRY_ERROR
;
fragrefuse2Lab
(
signal
,
fragOperPtr
,
regFragPtr
);
fragrefuse2Lab
(
signal
,
fragOperPtr
,
regFragPtr
);
return
;
return
;
}
}
if
(
cfirstfreerange
==
RNIL
)
{
if
(
cfirstfreerange
==
RNIL
)
{
l
jam
();
jam
();
terrorCode
=
ZNO_FREE_PAGE_RANGE_ERROR
;
terrorCode
=
ZNO_FREE_PAGE_RANGE_ERROR
;
fragrefuse3Lab
(
signal
,
fragOperPtr
,
regFragPtr
,
regTabPtr
.
p
,
fragId
);
fragrefuse3Lab
(
signal
,
fragOperPtr
,
regFragPtr
,
regTabPtr
.
p
,
fragId
);
return
;
return
;
...
@@ -147,7 +145,7 @@ void Dbtup::execTUPFRAGREQ(Signal* signal)
...
@@ -147,7 +145,7 @@ void Dbtup::execTUPFRAGREQ(Signal* signal)
if
(
ERROR_INSERTED
(
4007
)
&&
regTabPtr
.
p
->
fragid
[
0
]
==
fragId
||
if
(
ERROR_INSERTED
(
4007
)
&&
regTabPtr
.
p
->
fragid
[
0
]
==
fragId
||
ERROR_INSERTED
(
4008
)
&&
regTabPtr
.
p
->
fragid
[
1
]
==
fragId
)
{
ERROR_INSERTED
(
4008
)
&&
regTabPtr
.
p
->
fragid
[
1
]
==
fragId
)
{
l
jam
();
jam
();
terrorCode
=
1
;
terrorCode
=
1
;
fragrefuse4Lab
(
signal
,
fragOperPtr
,
regFragPtr
,
regTabPtr
.
p
,
fragId
);
fragrefuse4Lab
(
signal
,
fragOperPtr
,
regFragPtr
,
regTabPtr
.
p
,
fragId
);
CLEAR_ERROR_INSERT_VALUE
;
CLEAR_ERROR_INSERT_VALUE
;
...
@@ -155,7 +153,7 @@ void Dbtup::execTUPFRAGREQ(Signal* signal)
...
@@ -155,7 +153,7 @@ void Dbtup::execTUPFRAGREQ(Signal* signal)
}
}
if
(
regTabPtr
.
p
->
tableStatus
==
NOT_DEFINED
)
{
if
(
regTabPtr
.
p
->
tableStatus
==
NOT_DEFINED
)
{
l
jam
();
jam
();
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// We are setting up references to the header of the tuple.
// We are setting up references to the header of the tuple.
// Active operation This word contains a reference to the operation active
// Active operation This word contains a reference to the operation active
...
@@ -201,13 +199,13 @@ void Dbtup::execTUPFRAGREQ(Signal* signal)
...
@@ -201,13 +199,13 @@ void Dbtup::execTUPFRAGREQ(Signal* signal)
Uint32
offset
[
10
];
Uint32
offset
[
10
];
Uint32
tableDescriptorRef
=
allocTabDescr
(
regTabPtr
.
p
,
offset
);
Uint32
tableDescriptorRef
=
allocTabDescr
(
regTabPtr
.
p
,
offset
);
if
(
tableDescriptorRef
==
RNIL
)
{
if
(
tableDescriptorRef
==
RNIL
)
{
l
jam
();
jam
();
fragrefuse4Lab
(
signal
,
fragOperPtr
,
regFragPtr
,
regTabPtr
.
p
,
fragId
);
fragrefuse4Lab
(
signal
,
fragOperPtr
,
regFragPtr
,
regTabPtr
.
p
,
fragId
);
return
;
return
;
}
}
setUpDescriptorReferences
(
tableDescriptorRef
,
regTabPtr
.
p
,
offset
);
setUpDescriptorReferences
(
tableDescriptorRef
,
regTabPtr
.
p
,
offset
);
}
else
{
}
else
{
l
jam
();
jam
();
fragOperPtr
.
p
->
definingFragment
=
false
;
fragOperPtr
.
p
->
definingFragment
=
false
;
}
}
signal
->
theData
[
0
]
=
fragOperPtr
.
p
->
lqhPtrFrag
;
signal
->
theData
[
0
]
=
fragOperPtr
.
p
->
lqhPtrFrag
;
...
@@ -223,9 +221,9 @@ bool Dbtup::addfragtotab(Tablerec* const regTabPtr,
...
@@ -223,9 +221,9 @@ bool Dbtup::addfragtotab(Tablerec* const regTabPtr,
Uint32
fragIndex
)
Uint32
fragIndex
)
{
{
for
(
Uint32
i
=
0
;
i
<
MAX_FRAG_PER_NODE
;
i
++
)
{
for
(
Uint32
i
=
0
;
i
<
MAX_FRAG_PER_NODE
;
i
++
)
{
l
jam
();
jam
();
if
(
regTabPtr
->
fragid
[
i
]
==
RNIL
)
{
if
(
regTabPtr
->
fragid
[
i
]
==
RNIL
)
{
l
jam
();
jam
();
regTabPtr
->
fragid
[
i
]
=
fragId
;
regTabPtr
->
fragid
[
i
]
=
fragId
;
regTabPtr
->
fragrec
[
i
]
=
fragIndex
;
regTabPtr
->
fragrec
[
i
]
=
fragIndex
;
return
true
;
return
true
;
...
@@ -239,9 +237,9 @@ void Dbtup::getFragmentrec(FragrecordPtr& regFragPtr,
...
@@ -239,9 +237,9 @@ void Dbtup::getFragmentrec(FragrecordPtr& regFragPtr,
Tablerec
*
const
regTabPtr
)
Tablerec
*
const
regTabPtr
)
{
{
for
(
Uint32
i
=
0
;
i
<
MAX_FRAG_PER_NODE
;
i
++
)
{
for
(
Uint32
i
=
0
;
i
<
MAX_FRAG_PER_NODE
;
i
++
)
{
l
jam
();
jam
();
if
(
regTabPtr
->
fragid
[
i
]
==
fragId
)
{
if
(
regTabPtr
->
fragid
[
i
]
==
fragId
)
{
l
jam
();
jam
();
regFragPtr
.
i
=
regTabPtr
->
fragrec
[
i
];
regFragPtr
.
i
=
regTabPtr
->
fragrec
[
i
];
ptrCheckGuard
(
regFragPtr
,
cnoOfFragrec
,
fragrecord
);
ptrCheckGuard
(
regFragPtr
,
cnoOfFragrec
,
fragrecord
);
return
;
return
;
...
@@ -277,7 +275,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
...
@@ -277,7 +275,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
FragoperrecPtr
fragOperPtr
;
FragoperrecPtr
fragOperPtr
;
TablerecPtr
regTabPtr
;
TablerecPtr
regTabPtr
;
l
jamEntry
();
jamEntry
();
fragOperPtr
.
i
=
signal
->
theData
[
0
];
fragOperPtr
.
i
=
signal
->
theData
[
0
];
ptrCheckGuard
(
fragOperPtr
,
cnoOfFragoprec
,
fragoperrec
);
ptrCheckGuard
(
fragOperPtr
,
cnoOfFragoprec
,
fragoperrec
);
Uint32
attrId
=
signal
->
theData
[
2
];
Uint32
attrId
=
signal
->
theData
[
2
];
...
@@ -338,7 +336,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
...
@@ -338,7 +336,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
Uint32
attrDes2
=
0
;
Uint32
attrDes2
=
0
;
if
(
!
AttributeDescriptor
::
getDynamic
(
attrDescriptor
))
{
if
(
!
AttributeDescriptor
::
getDynamic
(
attrDescriptor
))
{
l
jam
();
jam
();
Uint32
pos
=
0
,
null_pos
;
Uint32
pos
=
0
,
null_pos
;
Uint32
bytes
=
AttributeDescriptor
::
getSizeInBytes
(
attrDescriptor
);
Uint32
bytes
=
AttributeDescriptor
::
getSizeInBytes
(
attrDescriptor
);
Uint32
words
=
(
bytes
+
3
)
/
4
;
Uint32
words
=
(
bytes
+
3
)
/
4
;
...
@@ -348,7 +346,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
...
@@ -348,7 +346,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
if
(
AttributeDescriptor
::
getNullable
(
attrDescriptor
))
if
(
AttributeDescriptor
::
getNullable
(
attrDescriptor
))
{
{
l
jam
();
jam
();
fragOperPtr
.
p
->
m_null_bits
[
ind
]
++
;
fragOperPtr
.
p
->
m_null_bits
[
ind
]
++
;
}
}
else
else
...
@@ -363,17 +361,17 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
...
@@ -363,17 +361,17 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
switch
(
AttributeDescriptor
::
getArrayType
(
attrDescriptor
))
{
switch
(
AttributeDescriptor
::
getArrayType
(
attrDescriptor
))
{
case
NDB_ARRAYTYPE_FIXED
:
case
NDB_ARRAYTYPE_FIXED
:
{
{
l
jam
();
jam
();
regTabPtr
.
p
->
m_attributes
[
ind
].
m_no_of_fixsize
++
;
regTabPtr
.
p
->
m_attributes
[
ind
].
m_no_of_fixsize
++
;
if
(
attrLen
!=
0
)
if
(
attrLen
!=
0
)
{
{
l
jam
();
jam
();
pos
=
fragOperPtr
.
p
->
m_fix_attributes_size
[
ind
];
pos
=
fragOperPtr
.
p
->
m_fix_attributes_size
[
ind
];
fragOperPtr
.
p
->
m_fix_attributes_size
[
ind
]
+=
words
;
fragOperPtr
.
p
->
m_fix_attributes_size
[
ind
]
+=
words
;
}
}
else
else
{
{
l
jam
();
jam
();
Uint32
bitCount
=
AttributeDescriptor
::
getArraySize
(
attrDescriptor
);
Uint32
bitCount
=
AttributeDescriptor
::
getArraySize
(
attrDescriptor
);
fragOperPtr
.
p
->
m_null_bits
[
ind
]
+=
bitCount
;
fragOperPtr
.
p
->
m_null_bits
[
ind
]
+=
bitCount
;
}
}
...
@@ -381,7 +379,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
...
@@ -381,7 +379,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
}
}
default:
default:
{
{
l
jam
();
jam
();
fragOperPtr
.
p
->
m_var_attributes_size
[
ind
]
+=
bytes
;
fragOperPtr
.
p
->
m_var_attributes_size
[
ind
]
+=
bytes
;
pos
=
regTabPtr
.
p
->
m_attributes
[
ind
].
m_no_of_varsize
++
;
pos
=
regTabPtr
.
p
->
m_attributes
[
ind
].
m_no_of_varsize
++
;
break
;
break
;
...
@@ -398,13 +396,13 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
...
@@ -398,13 +396,13 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
ndbrequire
(
cs
!=
NULL
);
ndbrequire
(
cs
!=
NULL
);
Uint32
i
=
0
;
Uint32
i
=
0
;
while
(
i
<
fragOperPtr
.
p
->
charsetIndex
)
{
while
(
i
<
fragOperPtr
.
p
->
charsetIndex
)
{
l
jam
();
jam
();
if
(
regTabPtr
.
p
->
charsetArray
[
i
]
==
cs
)
if
(
regTabPtr
.
p
->
charsetArray
[
i
]
==
cs
)
break
;
break
;
i
++
;
i
++
;
}
}
if
(
i
==
fragOperPtr
.
p
->
charsetIndex
)
{
if
(
i
==
fragOperPtr
.
p
->
charsetIndex
)
{
l
jam
();
jam
();
fragOperPtr
.
p
->
charsetIndex
++
;
fragOperPtr
.
p
->
charsetIndex
++
;
}
}
ndbrequire
(
i
<
regTabPtr
.
p
->
noOfCharsets
);
ndbrequire
(
i
<
regTabPtr
.
p
->
noOfCharsets
);
...
@@ -417,7 +415,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
...
@@ -417,7 +415,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
ERROR_INSERTED
(
4010
)
&&
regTabPtr
.
p
->
fragid
[
0
]
==
fragId
&&
lastAttr
||
ERROR_INSERTED
(
4010
)
&&
regTabPtr
.
p
->
fragid
[
0
]
==
fragId
&&
lastAttr
||
ERROR_INSERTED
(
4011
)
&&
regTabPtr
.
p
->
fragid
[
1
]
==
fragId
&&
attrId
==
0
||
ERROR_INSERTED
(
4011
)
&&
regTabPtr
.
p
->
fragid
[
1
]
==
fragId
&&
attrId
==
0
||
ERROR_INSERTED
(
4012
)
&&
regTabPtr
.
p
->
fragid
[
1
]
==
fragId
&&
lastAttr
)
{
ERROR_INSERTED
(
4012
)
&&
regTabPtr
.
p
->
fragid
[
1
]
==
fragId
&&
lastAttr
)
{
l
jam
();
jam
();
terrorCode
=
1
;
terrorCode
=
1
;
addattrrefuseLab
(
signal
,
regFragPtr
,
fragOperPtr
,
regTabPtr
.
p
,
fragId
);
addattrrefuseLab
(
signal
,
regFragPtr
,
fragOperPtr
,
regTabPtr
.
p
,
fragId
);
CLEAR_ERROR_INSERT_VALUE
;
CLEAR_ERROR_INSERT_VALUE
;
...
@@ -428,7 +426,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
...
@@ -428,7 +426,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
/* ************** TUP_ADD_ATTCONF ****************** */
/* ************** TUP_ADD_ATTCONF ****************** */
/* **************************************************************** */
/* **************************************************************** */
if
(
!
lastAttr
)
{
if
(
!
lastAttr
)
{
l
jam
();
jam
();
signal
->
theData
[
0
]
=
fragOperPtr
.
p
->
lqhPtrFrag
;
signal
->
theData
[
0
]
=
fragOperPtr
.
p
->
lqhPtrFrag
;
signal
->
theData
[
1
]
=
lastAttr
;
signal
->
theData
[
1
]
=
lastAttr
;
sendSignal
(
fragOperPtr
.
p
->
lqhBlockrefFrag
,
GSN_TUP_ADD_ATTCONF
,
sendSignal
(
fragOperPtr
.
p
->
lqhBlockrefFrag
,
GSN_TUP_ADD_ATTCONF
,
...
@@ -554,7 +552,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
...
@@ -554,7 +552,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
noAllocatedPages
=
allocFragPages
(
regFragPtr
.
p
,
noAllocatedPages
);
noAllocatedPages
=
allocFragPages
(
regFragPtr
.
p
,
noAllocatedPages
);
if
(
noAllocatedPages
==
0
)
{
if
(
noAllocatedPages
==
0
)
{
l
jam
();
jam
();
terrorCode
=
ZNO_PAGES_ALLOCATED_ERROR
;
terrorCode
=
ZNO_PAGES_ALLOCATED_ERROR
;
addattrrefuseLab
(
signal
,
regFragPtr
,
fragOperPtr
,
regTabPtr
.
p
,
fragId
);
addattrrefuseLab
(
signal
,
regFragPtr
,
fragOperPtr
,
regTabPtr
.
p
,
fragId
);
return
;
return
;
...
@@ -564,7 +562,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
...
@@ -564,7 +562,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
CreateFilegroupImplReq
rep
;
CreateFilegroupImplReq
rep
;
if
(
regTabPtr
.
p
->
m_no_of_disk_attributes
)
if
(
regTabPtr
.
p
->
m_no_of_disk_attributes
)
{
{
l
jam
();
jam
();
Tablespace_client
tsman
(
0
,
c_tsman
,
0
,
0
,
Tablespace_client
tsman
(
0
,
c_tsman
,
0
,
0
,
regFragPtr
.
p
->
m_tablespace_id
);
regFragPtr
.
p
->
m_tablespace_id
);
ndbrequire
(
tsman
.
get_tablespace_info
(
&
rep
)
==
0
);
ndbrequire
(
tsman
.
get_tablespace_info
(
&
rep
)
==
0
);
...
@@ -581,12 +579,12 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
...
@@ -581,12 +579,12 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
if
(
regTabPtr
.
p
->
m_no_of_disk_attributes
)
if
(
regTabPtr
.
p
->
m_no_of_disk_attributes
)
{
{
l
jam
();
jam
();
if
(
!
(
getNodeState
().
startLevel
==
NodeState
::
SL_STARTING
&&
if
(
!
(
getNodeState
().
startLevel
==
NodeState
::
SL_STARTING
&&
getNodeState
().
starting
.
startPhase
<=
4
))
getNodeState
().
starting
.
startPhase
<=
4
))
{
{
Callback
cb
;
Callback
cb
;
l
jam
();
jam
();
cb
.
m_callbackData
=
fragOperPtr
.
i
;
cb
.
m_callbackData
=
fragOperPtr
.
i
;
cb
.
m_callbackFunction
=
cb
.
m_callbackFunction
=
...
@@ -600,7 +598,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
...
@@ -600,7 +598,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
int
res
=
lgman
.
get_log_buffer
(
signal
,
sz
,
&
cb
);
int
res
=
lgman
.
get_log_buffer
(
signal
,
sz
,
&
cb
);
switch
(
res
){
switch
(
res
){
case
0
:
case
0
:
l
jam
();
jam
();
signal
->
theData
[
0
]
=
1
;
signal
->
theData
[
0
]
=
1
;
return
;
return
;
case
-
1
:
case
-
1
:
...
@@ -719,11 +717,11 @@ void Dbtup::setUpKeyArray(Tablerec* const regTabPtr)
...
@@ -719,11 +717,11 @@ void Dbtup::setUpKeyArray(Tablerec* const regTabPtr)
Uint32
*
keyArray
=
&
tableDescriptor
[
regTabPtr
->
readKeyArray
].
tabDescr
;
Uint32
*
keyArray
=
&
tableDescriptor
[
regTabPtr
->
readKeyArray
].
tabDescr
;
Uint32
countKeyAttr
=
0
;
Uint32
countKeyAttr
=
0
;
for
(
Uint32
i
=
0
;
i
<
regTabPtr
->
m_no_of_attributes
;
i
++
)
{
for
(
Uint32
i
=
0
;
i
<
regTabPtr
->
m_no_of_attributes
;
i
++
)
{
l
jam
();
jam
();
Uint32
refAttr
=
regTabPtr
->
tabDescriptor
+
(
i
*
ZAD_SIZE
);
Uint32
refAttr
=
regTabPtr
->
tabDescriptor
+
(
i
*
ZAD_SIZE
);
Uint32
attrDescriptor
=
getTabDescrWord
(
refAttr
);
Uint32
attrDescriptor
=
getTabDescrWord
(
refAttr
);
if
(
AttributeDescriptor
::
getPrimaryKey
(
attrDescriptor
))
{
if
(
AttributeDescriptor
::
getPrimaryKey
(
attrDescriptor
))
{
l
jam
();
jam
();
AttributeHeader
::
init
(
&
keyArray
[
countKeyAttr
],
i
,
0
);
AttributeHeader
::
init
(
&
keyArray
[
countKeyAttr
],
i
,
0
);
countKeyAttr
++
;
countKeyAttr
++
;
}
}
...
@@ -743,7 +741,7 @@ void Dbtup::setUpKeyArray(Tablerec* const regTabPtr)
...
@@ -743,7 +741,7 @@ void Dbtup::setUpKeyArray(Tablerec* const regTabPtr)
{
{
for
(
Uint32
i
=
0
;
i
<
regTabPtr
->
m_no_of_attributes
;
i
++
)
for
(
Uint32
i
=
0
;
i
<
regTabPtr
->
m_no_of_attributes
;
i
++
)
{
{
l
jam
();
jam
();
Uint32
refAttr
=
regTabPtr
->
tabDescriptor
+
(
i
*
ZAD_SIZE
);
Uint32
refAttr
=
regTabPtr
->
tabDescriptor
+
(
i
*
ZAD_SIZE
);
Uint32
desc
=
getTabDescrWord
(
refAttr
);
Uint32
desc
=
getTabDescrWord
(
refAttr
);
Uint32
t
=
0
;
Uint32
t
=
0
;
...
@@ -838,9 +836,9 @@ void Dbtup::releaseFragoperrec(FragoperrecPtr fragOperPtr)
...
@@ -838,9 +836,9 @@ void Dbtup::releaseFragoperrec(FragoperrecPtr fragOperPtr)
void
Dbtup
::
deleteFragTab
(
Tablerec
*
const
regTabPtr
,
Uint32
fragId
)
void
Dbtup
::
deleteFragTab
(
Tablerec
*
const
regTabPtr
,
Uint32
fragId
)
{
{
for
(
Uint32
i
=
0
;
i
<
MAX_FRAG_PER_NODE
;
i
++
)
{
for
(
Uint32
i
=
0
;
i
<
MAX_FRAG_PER_NODE
;
i
++
)
{
l
jam
();
jam
();
if
(
regTabPtr
->
fragid
[
i
]
==
fragId
)
{
if
(
regTabPtr
->
fragid
[
i
]
==
fragId
)
{
l
jam
();
jam
();
regTabPtr
->
fragid
[
i
]
=
RNIL
;
regTabPtr
->
fragid
[
i
]
=
RNIL
;
regTabPtr
->
fragrec
[
i
]
=
RNIL
;
regTabPtr
->
fragrec
[
i
]
=
RNIL
;
return
;
return
;
...
@@ -866,7 +864,7 @@ void Dbtup::abortAddFragOp(Signal* signal)
...
@@ -866,7 +864,7 @@ void Dbtup::abortAddFragOp(Signal* signal)
void
void
Dbtup
::
execDROP_TAB_REQ
(
Signal
*
signal
)
Dbtup
::
execDROP_TAB_REQ
(
Signal
*
signal
)
{
{
l
jamEntry
();
jamEntry
();
if
(
ERROR_INSERTED
(
4013
))
{
if
(
ERROR_INSERTED
(
4013
))
{
#ifdef VM_TRACE
#ifdef VM_TRACE
verifytabdes
();
verifytabdes
();
...
@@ -892,7 +890,7 @@ void Dbtup::releaseTabDescr(Tablerec* const regTabPtr)
...
@@ -892,7 +890,7 @@ void Dbtup::releaseTabDescr(Tablerec* const regTabPtr)
{
{
Uint32
descriptor
=
regTabPtr
->
readKeyArray
;
Uint32
descriptor
=
regTabPtr
->
readKeyArray
;
if
(
descriptor
!=
RNIL
)
{
if
(
descriptor
!=
RNIL
)
{
l
jam
();
jam
();
Uint32
offset
[
10
];
Uint32
offset
[
10
];
getTabDescrOffsets
(
regTabPtr
,
offset
);
getTabDescrOffsets
(
regTabPtr
,
offset
);
...
@@ -923,16 +921,16 @@ void Dbtup::releaseFragment(Signal* signal, Uint32 tableId,
...
@@ -923,16 +921,16 @@ void Dbtup::releaseFragment(Signal* signal, Uint32 tableId,
Uint32
fragId
=
RNIL
;
Uint32
fragId
=
RNIL
;
Uint32
i
=
0
;
Uint32
i
=
0
;
for
(
i
=
0
;
i
<
MAX_FRAG_PER_NODE
;
i
++
)
{
for
(
i
=
0
;
i
<
MAX_FRAG_PER_NODE
;
i
++
)
{
l
jam
();
jam
();
if
(
tabPtr
.
p
->
fragid
[
i
]
!=
RNIL
)
{
if
(
tabPtr
.
p
->
fragid
[
i
]
!=
RNIL
)
{
l
jam
();
jam
();
fragIndex
=
tabPtr
.
p
->
fragrec
[
i
];
fragIndex
=
tabPtr
.
p
->
fragrec
[
i
];
fragId
=
tabPtr
.
p
->
fragid
[
i
];
fragId
=
tabPtr
.
p
->
fragid
[
i
];
break
;
break
;
}
}
}
}
if
(
fragIndex
!=
RNIL
)
{
if
(
fragIndex
!=
RNIL
)
{
l
jam
();
jam
();
signal
->
theData
[
0
]
=
ZUNMAP_PAGES
;
signal
->
theData
[
0
]
=
ZUNMAP_PAGES
;
signal
->
theData
[
1
]
=
tabPtr
.
i
;
signal
->
theData
[
1
]
=
tabPtr
.
i
;
...
@@ -957,7 +955,7 @@ void Dbtup::releaseFragment(Signal* signal, Uint32 tableId,
...
@@ -957,7 +955,7 @@ void Dbtup::releaseFragment(Signal* signal, Uint32 tableId,
int
res
=
lgman
.
get_log_buffer
(
signal
,
sz
,
&
cb
);
int
res
=
lgman
.
get_log_buffer
(
signal
,
sz
,
&
cb
);
switch
(
res
){
switch
(
res
){
case
0
:
case
0
:
l
jam
();
jam
();
return
;
return
;
case
-
1
:
case
-
1
:
ndbrequire
(
"NOT YET IMPLEMENTED"
==
0
);
ndbrequire
(
"NOT YET IMPLEMENTED"
==
0
);
...
@@ -1088,7 +1086,7 @@ Dbtup::drop_fragment_free_extent(Signal *signal,
...
@@ -1088,7 +1086,7 @@ Dbtup::drop_fragment_free_extent(Signal *signal,
int
res
=
lgman
.
get_log_buffer
(
signal
,
sz
,
&
cb
);
int
res
=
lgman
.
get_log_buffer
(
signal
,
sz
,
&
cb
);
switch
(
res
){
switch
(
res
){
case
0
:
case
0
:
l
jam
();
jam
();
return
;
return
;
case
-
1
:
case
-
1
:
ndbrequire
(
"NOT YET IMPLEMENTED"
==
0
);
ndbrequire
(
"NOT YET IMPLEMENTED"
==
0
);
...
@@ -1239,7 +1237,7 @@ Dbtup::drop_fragment_free_extent_log_buffer_callback(Signal* signal,
...
@@ -1239,7 +1237,7 @@ Dbtup::drop_fragment_free_extent_log_buffer_callback(Signal* signal,
void
void
Dbtup
::
drop_fragment_free_var_pages
(
Signal
*
signal
)
Dbtup
::
drop_fragment_free_var_pages
(
Signal
*
signal
)
{
{
l
jam
();
jam
();
Uint32
tableId
=
signal
->
theData
[
1
];
Uint32
tableId
=
signal
->
theData
[
1
];
Uint32
fragPtrI
=
signal
->
theData
[
2
];
Uint32
fragPtrI
=
signal
->
theData
[
2
];
...
...
storage/ndb/src/kernel/blocks/dbtup/DbtupPagMan.cpp
View file @
9fb5e5d0
...
@@ -14,14 +14,12 @@
...
@@ -14,14 +14,12 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C
#define DBTUP_C
#define DBTUP_PAG_MAN_CPP
#include "Dbtup.hpp"
#include "Dbtup.hpp"
#include <RefConvert.hpp>
#include <RefConvert.hpp>
#include <ndb_limits.h>
#include <ndb_limits.h>
#include <pc.hpp>
#include <pc.hpp>
#define ljam() { jamLine(16000 + __LINE__); }
#define ljamEntry() { jamEntryLine(16000 + __LINE__); }
/* ---------------------------------------------------------------- */
/* ---------------------------------------------------------------- */
// 4) Page Memory Manager (buddy algorithm)
// 4) Page Memory Manager (buddy algorithm)
//
//
...
@@ -121,7 +119,7 @@ void Dbtup::initializePage()
...
@@ -121,7 +119,7 @@ void Dbtup::initializePage()
}
//for
}
//for
PagePtr
pagePtr
;
PagePtr
pagePtr
;
for
(
pagePtr
.
i
=
0
;
pagePtr
.
i
<
c_page_pool
.
getSize
();
pagePtr
.
i
++
)
{
for
(
pagePtr
.
i
=
0
;
pagePtr
.
i
<
c_page_pool
.
getSize
();
pagePtr
.
i
++
)
{
l
jam
();
jam
();
refresh_watch_dog
();
refresh_watch_dog
();
c_page_pool
.
getPtr
(
pagePtr
);
c_page_pool
.
getPtr
(
pagePtr
);
pagePtr
.
p
->
physical_page_id
=
RNIL
;
pagePtr
.
p
->
physical_page_id
=
RNIL
;
...
@@ -153,16 +151,16 @@ void Dbtup::allocConsPages(Uint32 noOfPagesToAllocate,
...
@@ -153,16 +151,16 @@ void Dbtup::allocConsPages(Uint32 noOfPagesToAllocate,
Uint32
&
allocPageRef
)
Uint32
&
allocPageRef
)
{
{
if
(
noOfPagesToAllocate
==
0
){
if
(
noOfPagesToAllocate
==
0
){
l
jam
();
jam
();
noOfPagesAllocated
=
0
;
noOfPagesAllocated
=
0
;
return
;
return
;
}
//if
}
//if
Uint32
firstListToCheck
=
nextHigherTwoLog
(
noOfPagesToAllocate
-
1
);
Uint32
firstListToCheck
=
nextHigherTwoLog
(
noOfPagesToAllocate
-
1
);
for
(
Uint32
i
=
firstListToCheck
;
i
<
16
;
i
++
)
{
for
(
Uint32
i
=
firstListToCheck
;
i
<
16
;
i
++
)
{
l
jam
();
jam
();
if
(
cfreepageList
[
i
]
!=
RNIL
)
{
if
(
cfreepageList
[
i
]
!=
RNIL
)
{
l
jam
();
jam
();
/* ---------------------------------------------------------------- */
/* ---------------------------------------------------------------- */
/* PROPER AMOUNT OF PAGES WERE FOUND. NOW SPLIT THE FOUND */
/* PROPER AMOUNT OF PAGES WERE FOUND. NOW SPLIT THE FOUND */
/* AREA AND RETURN THE PART NOT NEEDED. */
/* AREA AND RETURN THE PART NOT NEEDED. */
...
@@ -182,11 +180,11 @@ void Dbtup::allocConsPages(Uint32 noOfPagesToAllocate,
...
@@ -182,11 +180,11 @@ void Dbtup::allocConsPages(Uint32 noOfPagesToAllocate,
/* ---------------------------------------------------------------- */
/* ---------------------------------------------------------------- */
if
(
firstListToCheck
)
if
(
firstListToCheck
)
{
{
l
jam
();
jam
();
for
(
Uint32
j
=
firstListToCheck
-
1
;
(
Uint32
)
~
j
;
j
--
)
{
for
(
Uint32
j
=
firstListToCheck
-
1
;
(
Uint32
)
~
j
;
j
--
)
{
l
jam
();
jam
();
if
(
cfreepageList
[
j
]
!=
RNIL
)
{
if
(
cfreepageList
[
j
]
!=
RNIL
)
{
l
jam
();
jam
();
/* ---------------------------------------------------------------- */
/* ---------------------------------------------------------------- */
/* SOME AREA WAS FOUND, ALLOCATE ALL OF IT. */
/* SOME AREA WAS FOUND, ALLOCATE ALL OF IT. */
/* ---------------------------------------------------------------- */
/* ---------------------------------------------------------------- */
...
@@ -212,9 +210,9 @@ void Dbtup::allocConsPages(Uint32 noOfPagesToAllocate,
...
@@ -212,9 +210,9 @@ void Dbtup::allocConsPages(Uint32 noOfPagesToAllocate,
void
Dbtup
::
returnCommonArea
(
Uint32
retPageRef
,
Uint32
retNo
)
void
Dbtup
::
returnCommonArea
(
Uint32
retPageRef
,
Uint32
retNo
)
{
{
do
{
do
{
l
jam
();
jam
();
if
(
retNo
==
0
)
{
if
(
retNo
==
0
)
{
l
jam
();
jam
();
return
;
return
;
}
//if
}
//if
Uint32
list
=
nextHigherTwoLog
(
retNo
)
-
1
;
Uint32
list
=
nextHigherTwoLog
(
retNo
)
-
1
;
...
@@ -231,28 +229,28 @@ void Dbtup::findFreeLeftNeighbours(Uint32& allocPageRef,
...
@@ -231,28 +229,28 @@ void Dbtup::findFreeLeftNeighbours(Uint32& allocPageRef,
PagePtr
pageFirstPtr
,
pageLastPtr
;
PagePtr
pageFirstPtr
,
pageLastPtr
;
Uint32
remainAllocate
=
noOfPagesToAllocate
-
noPagesAllocated
;
Uint32
remainAllocate
=
noOfPagesToAllocate
-
noPagesAllocated
;
while
(
allocPageRef
>
0
)
{
while
(
allocPageRef
>
0
)
{
l
jam
();
jam
();
pageLastPtr
.
i
=
allocPageRef
-
1
;
pageLastPtr
.
i
=
allocPageRef
-
1
;
c_page_pool
.
getPtr
(
pageLastPtr
);
c_page_pool
.
getPtr
(
pageLastPtr
);
if
(
pageLastPtr
.
p
->
page_state
!=
ZFREE_COMMON
)
{
if
(
pageLastPtr
.
p
->
page_state
!=
ZFREE_COMMON
)
{
l
jam
();
jam
();
return
;
return
;
}
else
{
}
else
{
l
jam
();
jam
();
pageFirstPtr
.
i
=
pageLastPtr
.
p
->
first_cluster_page
;
pageFirstPtr
.
i
=
pageLastPtr
.
p
->
first_cluster_page
;
ndbrequire
(
pageFirstPtr
.
i
!=
RNIL
);
ndbrequire
(
pageFirstPtr
.
i
!=
RNIL
);
Uint32
list
=
nextHigherTwoLog
(
pageLastPtr
.
i
-
pageFirstPtr
.
i
);
Uint32
list
=
nextHigherTwoLog
(
pageLastPtr
.
i
-
pageFirstPtr
.
i
);
removeCommonArea
(
pageFirstPtr
.
i
,
list
);
removeCommonArea
(
pageFirstPtr
.
i
,
list
);
Uint32
listSize
=
1
<<
list
;
Uint32
listSize
=
1
<<
list
;
if
(
listSize
>
remainAllocate
)
{
if
(
listSize
>
remainAllocate
)
{
l
jam
();
jam
();
Uint32
retNo
=
listSize
-
remainAllocate
;
Uint32
retNo
=
listSize
-
remainAllocate
;
returnCommonArea
(
pageFirstPtr
.
i
,
retNo
);
returnCommonArea
(
pageFirstPtr
.
i
,
retNo
);
allocPageRef
=
pageFirstPtr
.
i
+
retNo
;
allocPageRef
=
pageFirstPtr
.
i
+
retNo
;
noPagesAllocated
=
noOfPagesToAllocate
;
noPagesAllocated
=
noOfPagesToAllocate
;
return
;
return
;
}
else
{
}
else
{
l
jam
();
jam
();
allocPageRef
=
pageFirstPtr
.
i
;
allocPageRef
=
pageFirstPtr
.
i
;
noPagesAllocated
+=
listSize
;
noPagesAllocated
+=
listSize
;
remainAllocate
-=
listSize
;
remainAllocate
-=
listSize
;
...
@@ -268,32 +266,32 @@ void Dbtup::findFreeRightNeighbours(Uint32& allocPageRef,
...
@@ -268,32 +266,32 @@ void Dbtup::findFreeRightNeighbours(Uint32& allocPageRef,
PagePtr
pageFirstPtr
,
pageLastPtr
;
PagePtr
pageFirstPtr
,
pageLastPtr
;
Uint32
remainAllocate
=
noOfPagesToAllocate
-
noPagesAllocated
;
Uint32
remainAllocate
=
noOfPagesToAllocate
-
noPagesAllocated
;
if
(
remainAllocate
==
0
)
{
if
(
remainAllocate
==
0
)
{
l
jam
();
jam
();
return
;
return
;
}
//if
}
//if
while
((
allocPageRef
+
noPagesAllocated
)
<
c_page_pool
.
getSize
())
{
while
((
allocPageRef
+
noPagesAllocated
)
<
c_page_pool
.
getSize
())
{
l
jam
();
jam
();
pageFirstPtr
.
i
=
allocPageRef
+
noPagesAllocated
;
pageFirstPtr
.
i
=
allocPageRef
+
noPagesAllocated
;
c_page_pool
.
getPtr
(
pageFirstPtr
);
c_page_pool
.
getPtr
(
pageFirstPtr
);
if
(
pageFirstPtr
.
p
->
page_state
!=
ZFREE_COMMON
)
{
if
(
pageFirstPtr
.
p
->
page_state
!=
ZFREE_COMMON
)
{
l
jam
();
jam
();
return
;
return
;
}
else
{
}
else
{
l
jam
();
jam
();
pageLastPtr
.
i
=
pageFirstPtr
.
p
->
last_cluster_page
;
pageLastPtr
.
i
=
pageFirstPtr
.
p
->
last_cluster_page
;
ndbrequire
(
pageLastPtr
.
i
!=
RNIL
);
ndbrequire
(
pageLastPtr
.
i
!=
RNIL
);
Uint32
list
=
nextHigherTwoLog
(
pageLastPtr
.
i
-
pageFirstPtr
.
i
);
Uint32
list
=
nextHigherTwoLog
(
pageLastPtr
.
i
-
pageFirstPtr
.
i
);
removeCommonArea
(
pageFirstPtr
.
i
,
list
);
removeCommonArea
(
pageFirstPtr
.
i
,
list
);
Uint32
listSize
=
1
<<
list
;
Uint32
listSize
=
1
<<
list
;
if
(
listSize
>
remainAllocate
)
{
if
(
listSize
>
remainAllocate
)
{
l
jam
();
jam
();
Uint32
retPageRef
=
pageFirstPtr
.
i
+
remainAllocate
;
Uint32
retPageRef
=
pageFirstPtr
.
i
+
remainAllocate
;
Uint32
retNo
=
listSize
-
remainAllocate
;
Uint32
retNo
=
listSize
-
remainAllocate
;
returnCommonArea
(
retPageRef
,
retNo
);
returnCommonArea
(
retPageRef
,
retNo
);
noPagesAllocated
+=
remainAllocate
;
noPagesAllocated
+=
remainAllocate
;
return
;
return
;
}
else
{
}
else
{
l
jam
();
jam
();
noPagesAllocated
+=
listSize
;
noPagesAllocated
+=
listSize
;
remainAllocate
-=
listSize
;
remainAllocate
-=
listSize
;
}
//if
}
//if
...
@@ -328,30 +326,30 @@ void Dbtup::removeCommonArea(Uint32 remPageRef, Uint32 list)
...
@@ -328,30 +326,30 @@ void Dbtup::removeCommonArea(Uint32 remPageRef, Uint32 list)
c_page_pool
.
getPtr
(
remPagePtr
,
remPageRef
);
c_page_pool
.
getPtr
(
remPagePtr
,
remPageRef
);
ndbrequire
(
list
<
16
);
ndbrequire
(
list
<
16
);
if
(
cfreepageList
[
list
]
==
remPagePtr
.
i
)
{
if
(
cfreepageList
[
list
]
==
remPagePtr
.
i
)
{
l
jam
();
jam
();
cfreepageList
[
list
]
=
remPagePtr
.
p
->
next_cluster_page
;
cfreepageList
[
list
]
=
remPagePtr
.
p
->
next_cluster_page
;
pageNextPtr
.
i
=
cfreepageList
[
list
];
pageNextPtr
.
i
=
cfreepageList
[
list
];
if
(
pageNextPtr
.
i
!=
RNIL
)
{
if
(
pageNextPtr
.
i
!=
RNIL
)
{
l
jam
();
jam
();
c_page_pool
.
getPtr
(
pageNextPtr
);
c_page_pool
.
getPtr
(
pageNextPtr
);
pageNextPtr
.
p
->
prev_cluster_page
=
RNIL
;
pageNextPtr
.
p
->
prev_cluster_page
=
RNIL
;
}
//if
}
//if
}
else
{
}
else
{
pageSearchPtr
.
i
=
cfreepageList
[
list
];
pageSearchPtr
.
i
=
cfreepageList
[
list
];
while
(
true
)
{
while
(
true
)
{
l
jam
();
jam
();
c_page_pool
.
getPtr
(
pageSearchPtr
);
c_page_pool
.
getPtr
(
pageSearchPtr
);
pagePrevPtr
=
pageSearchPtr
;
pagePrevPtr
=
pageSearchPtr
;
pageSearchPtr
.
i
=
pageSearchPtr
.
p
->
next_cluster_page
;
pageSearchPtr
.
i
=
pageSearchPtr
.
p
->
next_cluster_page
;
if
(
pageSearchPtr
.
i
==
remPagePtr
.
i
)
{
if
(
pageSearchPtr
.
i
==
remPagePtr
.
i
)
{
l
jam
();
jam
();
break
;
break
;
}
//if
}
//if
}
//while
}
//while
pageNextPtr
.
i
=
remPagePtr
.
p
->
next_cluster_page
;
pageNextPtr
.
i
=
remPagePtr
.
p
->
next_cluster_page
;
pagePrevPtr
.
p
->
next_cluster_page
=
pageNextPtr
.
i
;
pagePrevPtr
.
p
->
next_cluster_page
=
pageNextPtr
.
i
;
if
(
pageNextPtr
.
i
!=
RNIL
)
{
if
(
pageNextPtr
.
i
!=
RNIL
)
{
l
jam
();
jam
();
c_page_pool
.
getPtr
(
pageNextPtr
);
c_page_pool
.
getPtr
(
pageNextPtr
);
pageNextPtr
.
p
->
prev_cluster_page
=
pagePrevPtr
.
i
;
pageNextPtr
.
p
->
prev_cluster_page
=
pagePrevPtr
.
i
;
}
//if
}
//if
...
...
storage/ndb/src/kernel/blocks/dbtup/DbtupPageMap.cpp
View file @
9fb5e5d0
...
@@ -15,14 +15,12 @@
...
@@ -15,14 +15,12 @@
#define DBTUP_C
#define DBTUP_C
#define DBTUP_PAGE_MAP_CPP
#include "Dbtup.hpp"
#include "Dbtup.hpp"
#include <RefConvert.hpp>
#include <RefConvert.hpp>
#include <ndb_limits.h>
#include <ndb_limits.h>
#include <pc.hpp>
#include <pc.hpp>
#define ljam() { jamLine(14000 + __LINE__); }
#define ljamEntry() { jamEntryLine(14000 + __LINE__); }
//
//
// PageMap is a service used by Dbtup to map logical page id's to physical
// PageMap is a service used by Dbtup to map logical page id's to physical
// page id's. The mapping is needs the fragment and the logical page id to
// page id's. The mapping is needs the fragment and the logical page id to
...
@@ -92,11 +90,11 @@ Uint32 Dbtup::getEmptyPage(Fragrecord* regFragPtr)
...
@@ -92,11 +90,11 @@ Uint32 Dbtup::getEmptyPage(Fragrecord* regFragPtr)
{
{
Uint32
pageId
=
regFragPtr
->
emptyPrimPage
.
firstItem
;
Uint32
pageId
=
regFragPtr
->
emptyPrimPage
.
firstItem
;
if
(
pageId
==
RNIL
)
{
if
(
pageId
==
RNIL
)
{
l
jam
();
jam
();
allocMoreFragPages
(
regFragPtr
);
allocMoreFragPages
(
regFragPtr
);
pageId
=
regFragPtr
->
emptyPrimPage
.
firstItem
;
pageId
=
regFragPtr
->
emptyPrimPage
.
firstItem
;
if
(
pageId
==
RNIL
)
{
if
(
pageId
==
RNIL
)
{
l
jam
();
jam
();
return
RNIL
;
return
RNIL
;
}
//if
}
//if
}
//if
}
//if
...
@@ -122,11 +120,11 @@ Uint32 Dbtup::getRealpid(Fragrecord* regFragPtr, Uint32 logicalPageId)
...
@@ -122,11 +120,11 @@ Uint32 Dbtup::getRealpid(Fragrecord* regFragPtr, Uint32 logicalPageId)
loopLimit
=
grpPageRangePtr
.
p
->
currentIndexPos
;
loopLimit
=
grpPageRangePtr
.
p
->
currentIndexPos
;
ndbrequire
(
loopLimit
<=
3
);
ndbrequire
(
loopLimit
<=
3
);
for
(
Uint32
i
=
0
;
i
<=
loopLimit
;
i
++
)
{
for
(
Uint32
i
=
0
;
i
<=
loopLimit
;
i
++
)
{
l
jam
();
jam
();
if
(
grpPageRangePtr
.
p
->
startRange
[
i
]
<=
logicalPageId
)
{
if
(
grpPageRangePtr
.
p
->
startRange
[
i
]
<=
logicalPageId
)
{
if
(
grpPageRangePtr
.
p
->
endRange
[
i
]
>=
logicalPageId
)
{
if
(
grpPageRangePtr
.
p
->
endRange
[
i
]
>=
logicalPageId
)
{
if
(
grpPageRangePtr
.
p
->
type
[
i
]
==
ZLEAF
)
{
if
(
grpPageRangePtr
.
p
->
type
[
i
]
==
ZLEAF
)
{
l
jam
();
jam
();
Uint32
realPageId
=
(
logicalPageId
-
grpPageRangePtr
.
p
->
startRange
[
i
])
+
Uint32
realPageId
=
(
logicalPageId
-
grpPageRangePtr
.
p
->
startRange
[
i
])
+
grpPageRangePtr
.
p
->
basePageId
[
i
];
grpPageRangePtr
.
p
->
basePageId
[
i
];
return
realPageId
;
return
realPageId
;
...
@@ -167,12 +165,12 @@ bool Dbtup::insertPageRangeTab(Fragrecord* const regFragPtr,
...
@@ -167,12 +165,12 @@ bool Dbtup::insertPageRangeTab(Fragrecord* const regFragPtr,
{
{
PageRangePtr
currPageRangePtr
;
PageRangePtr
currPageRangePtr
;
if
(
cfirstfreerange
==
RNIL
)
{
if
(
cfirstfreerange
==
RNIL
)
{
l
jam
();
jam
();
return
false
;
return
false
;
}
//if
}
//if
currPageRangePtr
.
i
=
regFragPtr
->
currentPageRange
;
currPageRangePtr
.
i
=
regFragPtr
->
currentPageRange
;
if
(
currPageRangePtr
.
i
==
RNIL
)
{
if
(
currPageRangePtr
.
i
==
RNIL
)
{
l
jam
();
jam
();
/* ---------------------------------------------------------------- */
/* ---------------------------------------------------------------- */
/* THE FIRST PAGE RANGE IS HANDLED WITH SPECIAL CODE */
/* THE FIRST PAGE RANGE IS HANDLED WITH SPECIAL CODE */
/* ---------------------------------------------------------------- */
/* ---------------------------------------------------------------- */
...
@@ -181,10 +179,10 @@ bool Dbtup::insertPageRangeTab(Fragrecord* const regFragPtr,
...
@@ -181,10 +179,10 @@ bool Dbtup::insertPageRangeTab(Fragrecord* const regFragPtr,
currPageRangePtr
.
p
->
currentIndexPos
=
0
;
currPageRangePtr
.
p
->
currentIndexPos
=
0
;
currPageRangePtr
.
p
->
parentPtr
=
RNIL
;
currPageRangePtr
.
p
->
parentPtr
=
RNIL
;
}
else
{
}
else
{
l
jam
();
jam
();
ptrCheckGuard
(
currPageRangePtr
,
cnoOfPageRangeRec
,
pageRange
);
ptrCheckGuard
(
currPageRangePtr
,
cnoOfPageRangeRec
,
pageRange
);
if
(
currPageRangePtr
.
p
->
currentIndexPos
<
3
)
{
if
(
currPageRangePtr
.
p
->
currentIndexPos
<
3
)
{
l
jam
();
jam
();
/* ---------------------------------------------------------------- */
/* ---------------------------------------------------------------- */
/* THE SIMPLE CASE WHEN IT IS ONLY NECESSARY TO FILL IN THE */
/* THE SIMPLE CASE WHEN IT IS ONLY NECESSARY TO FILL IN THE */
/* NEXT EMPTY POSITION IN THE PAGE RANGE RECORD IS TREATED */
/* NEXT EMPTY POSITION IN THE PAGE RANGE RECORD IS TREATED */
...
@@ -192,7 +190,7 @@ bool Dbtup::insertPageRangeTab(Fragrecord* const regFragPtr,
...
@@ -192,7 +190,7 @@ bool Dbtup::insertPageRangeTab(Fragrecord* const regFragPtr,
/* ---------------------------------------------------------------- */
/* ---------------------------------------------------------------- */
currPageRangePtr
.
p
->
currentIndexPos
++
;
currPageRangePtr
.
p
->
currentIndexPos
++
;
}
else
{
}
else
{
l
jam
();
jam
();
ndbrequire
(
currPageRangePtr
.
p
->
currentIndexPos
==
3
);
ndbrequire
(
currPageRangePtr
.
p
->
currentIndexPos
==
3
);
currPageRangePtr
.
i
=
leafPageRangeFull
(
regFragPtr
,
currPageRangePtr
);
currPageRangePtr
.
i
=
leafPageRangeFull
(
regFragPtr
,
currPageRangePtr
);
if
(
currPageRangePtr
.
i
==
RNIL
)
{
if
(
currPageRangePtr
.
i
==
RNIL
)
{
...
@@ -223,15 +221,15 @@ bool Dbtup::insertPageRangeTab(Fragrecord* const regFragPtr,
...
@@ -223,15 +221,15 @@ bool Dbtup::insertPageRangeTab(Fragrecord* const regFragPtr,
PageRangePtr
loopPageRangePtr
;
PageRangePtr
loopPageRangePtr
;
loopPageRangePtr
=
currPageRangePtr
;
loopPageRangePtr
=
currPageRangePtr
;
while
(
true
)
{
while
(
true
)
{
l
jam
();
jam
();
loopPageRangePtr
.
i
=
loopPageRangePtr
.
p
->
parentPtr
;
loopPageRangePtr
.
i
=
loopPageRangePtr
.
p
->
parentPtr
;
if
(
loopPageRangePtr
.
i
!=
RNIL
)
{
if
(
loopPageRangePtr
.
i
!=
RNIL
)
{
l
jam
();
jam
();
ptrCheckGuard
(
loopPageRangePtr
,
cnoOfPageRangeRec
,
pageRange
);
ptrCheckGuard
(
loopPageRangePtr
,
cnoOfPageRangeRec
,
pageRange
);
ndbrequire
(
loopPageRangePtr
.
p
->
currentIndexPos
<
4
);
ndbrequire
(
loopPageRangePtr
.
p
->
currentIndexPos
<
4
);
loopPageRangePtr
.
p
->
endRange
[
loopPageRangePtr
.
p
->
currentIndexPos
]
+=
noPages
;
loopPageRangePtr
.
p
->
endRange
[
loopPageRangePtr
.
p
->
currentIndexPos
]
+=
noPages
;
}
else
{
}
else
{
l
jam
();
jam
();
break
;
break
;
}
//if
}
//if
}
//while
}
//while
...
@@ -243,26 +241,26 @@ bool Dbtup::insertPageRangeTab(Fragrecord* const regFragPtr,
...
@@ -243,26 +241,26 @@ bool Dbtup::insertPageRangeTab(Fragrecord* const regFragPtr,
void
Dbtup
::
releaseFragPages
(
Fragrecord
*
regFragPtr
)
void
Dbtup
::
releaseFragPages
(
Fragrecord
*
regFragPtr
)
{
{
if
(
regFragPtr
->
rootPageRange
==
RNIL
)
{
if
(
regFragPtr
->
rootPageRange
==
RNIL
)
{
l
jam
();
jam
();
return
;
return
;
}
//if
}
//if
PageRangePtr
regPRPtr
;
PageRangePtr
regPRPtr
;
regPRPtr
.
i
=
regFragPtr
->
rootPageRange
;
regPRPtr
.
i
=
regFragPtr
->
rootPageRange
;
ptrCheckGuard
(
regPRPtr
,
cnoOfPageRangeRec
,
pageRange
);
ptrCheckGuard
(
regPRPtr
,
cnoOfPageRangeRec
,
pageRange
);
while
(
true
)
{
while
(
true
)
{
l
jam
();
jam
();
const
Uint32
indexPos
=
regPRPtr
.
p
->
currentIndexPos
;
const
Uint32
indexPos
=
regPRPtr
.
p
->
currentIndexPos
;
ndbrequire
(
indexPos
<
4
);
ndbrequire
(
indexPos
<
4
);
const
Uint32
basePageId
=
regPRPtr
.
p
->
basePageId
[
indexPos
];
const
Uint32
basePageId
=
regPRPtr
.
p
->
basePageId
[
indexPos
];
regPRPtr
.
p
->
basePageId
[
indexPos
]
=
RNIL
;
regPRPtr
.
p
->
basePageId
[
indexPos
]
=
RNIL
;
if
(
basePageId
==
RNIL
)
{
if
(
basePageId
==
RNIL
)
{
l
jam
();
jam
();
/**
/**
* Finished with indexPos continue with next
* Finished with indexPos continue with next
*/
*/
if
(
indexPos
>
0
)
{
if
(
indexPos
>
0
)
{
l
jam
();
jam
();
regPRPtr
.
p
->
currentIndexPos
--
;
regPRPtr
.
p
->
currentIndexPos
--
;
continue
;
continue
;
}
//if
}
//if
...
@@ -274,13 +272,13 @@ void Dbtup::releaseFragPages(Fragrecord* regFragPtr)
...
@@ -274,13 +272,13 @@ void Dbtup::releaseFragPages(Fragrecord* regFragPtr)
releasePagerange
(
regPRPtr
);
releasePagerange
(
regPRPtr
);
if
(
parentPtr
!=
RNIL
)
{
if
(
parentPtr
!=
RNIL
)
{
l
jam
();
jam
();
regPRPtr
.
i
=
parentPtr
;
regPRPtr
.
i
=
parentPtr
;
ptrCheckGuard
(
regPRPtr
,
cnoOfPageRangeRec
,
pageRange
);
ptrCheckGuard
(
regPRPtr
,
cnoOfPageRangeRec
,
pageRange
);
continue
;
continue
;
}
//if
}
//if
l
jam
();
jam
();
ndbrequire
(
regPRPtr
.
i
==
regFragPtr
->
rootPageRange
);
ndbrequire
(
regPRPtr
.
i
==
regFragPtr
->
rootPageRange
);
initFragRange
(
regFragPtr
);
initFragRange
(
regFragPtr
);
for
(
Uint32
i
=
0
;
i
<
MAX_FREE_LIST
;
i
++
)
for
(
Uint32
i
=
0
;
i
<
MAX_FREE_LIST
;
i
++
)
...
@@ -364,7 +362,7 @@ Uint32 Dbtup::allocFragPages(Fragrecord* regFragPtr, Uint32 tafpNoAllocRequested
...
@@ -364,7 +362,7 @@ Uint32 Dbtup::allocFragPages(Fragrecord* regFragPtr, Uint32 tafpNoAllocRequested
Uint32
retPageRef
=
RNIL
;
Uint32
retPageRef
=
RNIL
;
allocConsPages
(
noPagesToAllocate
,
noOfPagesAllocated
,
retPageRef
);
allocConsPages
(
noPagesToAllocate
,
noOfPagesAllocated
,
retPageRef
);
if
(
noOfPagesAllocated
==
0
)
{
if
(
noOfPagesAllocated
==
0
)
{
l
jam
();
jam
();
return
tafpPagesAllocated
;
return
tafpPagesAllocated
;
}
//if
}
//if
/* ---------------------------------------------------------------- */
/* ---------------------------------------------------------------- */
...
@@ -373,7 +371,7 @@ Uint32 Dbtup::allocFragPages(Fragrecord* regFragPtr, Uint32 tafpNoAllocRequested
...
@@ -373,7 +371,7 @@ Uint32 Dbtup::allocFragPages(Fragrecord* regFragPtr, Uint32 tafpNoAllocRequested
/* ---------------------------------------------------------------- */
/* ---------------------------------------------------------------- */
Uint32
startRange
=
regFragPtr
->
nextStartRange
;
Uint32
startRange
=
regFragPtr
->
nextStartRange
;
if
(
!
insertPageRangeTab
(
regFragPtr
,
retPageRef
,
noOfPagesAllocated
))
{
if
(
!
insertPageRangeTab
(
regFragPtr
,
retPageRef
,
noOfPagesAllocated
))
{
l
jam
();
jam
();
returnCommonArea
(
retPageRef
,
noOfPagesAllocated
);
returnCommonArea
(
retPageRef
,
noOfPagesAllocated
);
return
tafpPagesAllocated
;
return
tafpPagesAllocated
;
}
//if
}
//if
...
@@ -388,7 +386,7 @@ Uint32 Dbtup::allocFragPages(Fragrecord* regFragPtr, Uint32 tafpNoAllocRequested
...
@@ -388,7 +386,7 @@ Uint32 Dbtup::allocFragPages(Fragrecord* regFragPtr, Uint32 tafpNoAllocRequested
/* ---------------------------------------------------------------- */
/* ---------------------------------------------------------------- */
Uint32
prev
=
RNIL
;
Uint32
prev
=
RNIL
;
for
(
loopPagePtr
.
i
=
retPageRef
;
loopPagePtr
.
i
<
loopLimit
;
loopPagePtr
.
i
++
)
{
for
(
loopPagePtr
.
i
=
retPageRef
;
loopPagePtr
.
i
<
loopLimit
;
loopPagePtr
.
i
++
)
{
l
jam
();
jam
();
c_page_pool
.
getPtr
(
loopPagePtr
);
c_page_pool
.
getPtr
(
loopPagePtr
);
loopPagePtr
.
p
->
page_state
=
ZEMPTY_MM
;
loopPagePtr
.
p
->
page_state
=
ZEMPTY_MM
;
loopPagePtr
.
p
->
frag_page_id
=
startRange
+
loopPagePtr
.
p
->
frag_page_id
=
startRange
+
...
@@ -416,10 +414,10 @@ Uint32 Dbtup::allocFragPages(Fragrecord* regFragPtr, Uint32 tafpNoAllocRequested
...
@@ -416,10 +414,10 @@ Uint32 Dbtup::allocFragPages(Fragrecord* regFragPtr, Uint32 tafpNoAllocRequested
/* WAS ENOUGH PAGES ALLOCATED OR ARE MORE NEEDED. */
/* WAS ENOUGH PAGES ALLOCATED OR ARE MORE NEEDED. */
/* ---------------------------------------------------------------- */
/* ---------------------------------------------------------------- */
if
(
tafpPagesAllocated
<
tafpNoAllocRequested
)
{
if
(
tafpPagesAllocated
<
tafpNoAllocRequested
)
{
l
jam
();
jam
();
}
else
{
}
else
{
ndbrequire
(
tafpPagesAllocated
==
tafpNoAllocRequested
);
ndbrequire
(
tafpPagesAllocated
==
tafpNoAllocRequested
);
l
jam
();
jam
();
return
tafpNoAllocRequested
;
return
tafpNoAllocRequested
;
}
//if
}
//if
}
//while
}
//while
...
@@ -451,15 +449,15 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr
...
@@ -451,15 +449,15 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr
parentPageRangePtr
=
currPageRangePtr
;
parentPageRangePtr
=
currPageRangePtr
;
Uint32
tiprNoLevels
=
1
;
Uint32
tiprNoLevels
=
1
;
while
(
true
)
{
while
(
true
)
{
l
jam
();
jam
();
parentPageRangePtr
.
i
=
parentPageRangePtr
.
p
->
parentPtr
;
parentPageRangePtr
.
i
=
parentPageRangePtr
.
p
->
parentPtr
;
if
(
parentPageRangePtr
.
i
==
RNIL
)
{
if
(
parentPageRangePtr
.
i
==
RNIL
)
{
l
jam
();
jam
();
/* ---------------------------------------------------------------- */
/* ---------------------------------------------------------------- */
/* WE HAVE REACHED THE ROOT. A NEW ROOT MUST BE ALLOCATED. */
/* WE HAVE REACHED THE ROOT. A NEW ROOT MUST BE ALLOCATED. */
/* ---------------------------------------------------------------- */
/* ---------------------------------------------------------------- */
if
(
c_noOfFreePageRanges
<
tiprNoLevels
)
{
if
(
c_noOfFreePageRanges
<
tiprNoLevels
)
{
l
jam
();
jam
();
return
RNIL
;
return
RNIL
;
}
//if
}
//if
PageRangePtr
oldRootPRPtr
;
PageRangePtr
oldRootPRPtr
;
...
@@ -482,10 +480,10 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr
...
@@ -482,10 +480,10 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr
foundPageRangePtr
=
newRootPRPtr
;
foundPageRangePtr
=
newRootPRPtr
;
break
;
break
;
}
else
{
}
else
{
l
jam
();
jam
();
ptrCheckGuard
(
parentPageRangePtr
,
cnoOfPageRangeRec
,
pageRange
);
ptrCheckGuard
(
parentPageRangePtr
,
cnoOfPageRangeRec
,
pageRange
);
if
(
parentPageRangePtr
.
p
->
currentIndexPos
<
3
)
{
if
(
parentPageRangePtr
.
p
->
currentIndexPos
<
3
)
{
l
jam
();
jam
();
/* ---------------------------------------------------------------- */
/* ---------------------------------------------------------------- */
/* WE HAVE FOUND AN EMPTY ENTRY IN A PAGE RANGE RECORD. */
/* WE HAVE FOUND AN EMPTY ENTRY IN A PAGE RANGE RECORD. */
/* ALLOCATE A NEW PAGE RANGE RECORD, FILL IN THE START RANGE, */
/* ALLOCATE A NEW PAGE RANGE RECORD, FILL IN THE START RANGE, */
...
@@ -498,7 +496,7 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr
...
@@ -498,7 +496,7 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr
foundPageRangePtr
=
parentPageRangePtr
;
foundPageRangePtr
=
parentPageRangePtr
;
break
;
break
;
}
else
{
}
else
{
l
jam
();
jam
();
ndbrequire
(
parentPageRangePtr
.
p
->
currentIndexPos
==
3
);
ndbrequire
(
parentPageRangePtr
.
p
->
currentIndexPos
==
3
);
/* ---------------------------------------------------------------- */
/* ---------------------------------------------------------------- */
/* THE PAGE RANGE RECORD WAS FULL. FIND THE PARENT RECORD */
/* THE PAGE RANGE RECORD WAS FULL. FIND THE PARENT RECORD */
...
@@ -516,7 +514,7 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr
...
@@ -516,7 +514,7 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr
PageRangePtr
prevPageRangePtr
;
PageRangePtr
prevPageRangePtr
;
prevPageRangePtr
=
foundPageRangePtr
;
prevPageRangePtr
=
foundPageRangePtr
;
if
(
c_noOfFreePageRanges
<
tiprNoLevels
)
{
if
(
c_noOfFreePageRanges
<
tiprNoLevels
)
{
l
jam
();
jam
();
return
RNIL
;
return
RNIL
;
}
//if
}
//if
/* ---------------------------------------------------------------- */
/* ---------------------------------------------------------------- */
...
@@ -527,7 +525,7 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr
...
@@ -527,7 +525,7 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr
/* ARE ALSO PROPERLY UPDATED ON THE PATH TO THE LEAF LEVEL. */
/* ARE ALSO PROPERLY UPDATED ON THE PATH TO THE LEAF LEVEL. */
/* ---------------------------------------------------------------- */
/* ---------------------------------------------------------------- */
while
(
true
)
{
while
(
true
)
{
l
jam
();
jam
();
seizePagerange
(
newPageRangePtr
);
seizePagerange
(
newPageRangePtr
);
tiprNoLevels
--
;
tiprNoLevels
--
;
ndbrequire
(
prevPageRangePtr
.
p
->
currentIndexPos
<
4
);
ndbrequire
(
prevPageRangePtr
.
p
->
currentIndexPos
<
4
);
...
@@ -535,13 +533,13 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr
...
@@ -535,13 +533,13 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr
newPageRangePtr
.
p
->
parentPtr
=
prevPageRangePtr
.
i
;
newPageRangePtr
.
p
->
parentPtr
=
prevPageRangePtr
.
i
;
newPageRangePtr
.
p
->
currentIndexPos
=
0
;
newPageRangePtr
.
p
->
currentIndexPos
=
0
;
if
(
tiprNoLevels
>
0
)
{
if
(
tiprNoLevels
>
0
)
{
l
jam
();
jam
();
newPageRangePtr
.
p
->
startRange
[
0
]
=
regFragPtr
->
nextStartRange
;
newPageRangePtr
.
p
->
startRange
[
0
]
=
regFragPtr
->
nextStartRange
;
newPageRangePtr
.
p
->
endRange
[
0
]
=
regFragPtr
->
nextStartRange
-
1
;
newPageRangePtr
.
p
->
endRange
[
0
]
=
regFragPtr
->
nextStartRange
-
1
;
newPageRangePtr
.
p
->
type
[
0
]
=
ZNON_LEAF
;
newPageRangePtr
.
p
->
type
[
0
]
=
ZNON_LEAF
;
prevPageRangePtr
=
newPageRangePtr
;
prevPageRangePtr
=
newPageRangePtr
;
}
else
{
}
else
{
l
jam
();
jam
();
break
;
break
;
}
//if
}
//if
}
//while
}
//while
...
@@ -576,16 +574,16 @@ void Dbtup::errorHandler(Uint32 errorCode)
...
@@ -576,16 +574,16 @@ void Dbtup::errorHandler(Uint32 errorCode)
{
{
switch
(
errorCode
)
{
switch
(
errorCode
)
{
case
0
:
case
0
:
l
jam
();
jam
();
break
;
break
;
case
1
:
case
1
:
l
jam
();
jam
();
break
;
break
;
case
2
:
case
2
:
l
jam
();
jam
();
break
;
break
;
default:
default:
l
jam
();
jam
();
}
}
ndbrequire
(
false
);
ndbrequire
(
false
);
}
//Dbtup::errorHandler()
}
//Dbtup::errorHandler()
storage/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp
View file @
9fb5e5d0
...
@@ -15,6 +15,7 @@
...
@@ -15,6 +15,7 @@
#define DBTUP_C
#define DBTUP_C
#define DBTUP_ROUTINES_CPP
#include "Dbtup.hpp"
#include "Dbtup.hpp"
#include <RefConvert.hpp>
#include <RefConvert.hpp>
#include <ndb_limits.h>
#include <ndb_limits.h>
...
@@ -23,9 +24,6 @@
...
@@ -23,9 +24,6 @@
#include "AttributeOffset.hpp"
#include "AttributeOffset.hpp"
#include <AttributeHeader.hpp>
#include <AttributeHeader.hpp>
#define ljam() { jamLine(3000 + __LINE__); }
#define ljamEntry() { jamEntryLine(3000 + __LINE__); }
void
void
Dbtup
::
setUpQueryRoutines
(
Tablerec
*
regTabPtr
)
Dbtup
::
setUpQueryRoutines
(
Tablerec
*
regTabPtr
)
{
{
...
@@ -40,23 +38,23 @@ Dbtup::setUpQueryRoutines(Tablerec *regTabPtr)
...
@@ -40,23 +38,23 @@ Dbtup::setUpQueryRoutines(Tablerec *regTabPtr)
if
(
AttributeDescriptor
::
getArrayType
(
attrDescr
)
==
NDB_ARRAYTYPE_FIXED
){
if
(
AttributeDescriptor
::
getArrayType
(
attrDescr
)
==
NDB_ARRAYTYPE_FIXED
){
if
(
!
AttributeDescriptor
::
getNullable
(
attrDescr
))
{
if
(
!
AttributeDescriptor
::
getNullable
(
attrDescr
))
{
if
(
AttributeDescriptor
::
getSize
(
attrDescr
)
==
0
){
if
(
AttributeDescriptor
::
getSize
(
attrDescr
)
==
0
){
l
jam
();
jam
();
regTabPtr
->
readFunctionArray
[
i
]
=
&
Dbtup
::
readBitsNotNULL
;
regTabPtr
->
readFunctionArray
[
i
]
=
&
Dbtup
::
readBitsNotNULL
;
regTabPtr
->
updateFunctionArray
[
i
]
=
&
Dbtup
::
updateBitsNotNULL
;
regTabPtr
->
updateFunctionArray
[
i
]
=
&
Dbtup
::
updateBitsNotNULL
;
}
else
if
(
AttributeDescriptor
::
getSizeInBytes
(
attrDescr
)
==
4
)
{
}
else
if
(
AttributeDescriptor
::
getSizeInBytes
(
attrDescr
)
==
4
)
{
l
jam
();
jam
();
regTabPtr
->
readFunctionArray
[
i
]
=
regTabPtr
->
readFunctionArray
[
i
]
=
&
Dbtup
::
readFixedSizeTHOneWordNotNULL
;
&
Dbtup
::
readFixedSizeTHOneWordNotNULL
;
regTabPtr
->
updateFunctionArray
[
i
]
=
regTabPtr
->
updateFunctionArray
[
i
]
=
&
Dbtup
::
updateFixedSizeTHOneWordNotNULL
;
&
Dbtup
::
updateFixedSizeTHOneWordNotNULL
;
}
else
if
(
AttributeDescriptor
::
getSizeInBytes
(
attrDescr
)
==
8
)
{
}
else
if
(
AttributeDescriptor
::
getSizeInBytes
(
attrDescr
)
==
8
)
{
l
jam
();
jam
();
regTabPtr
->
readFunctionArray
[
i
]
=
regTabPtr
->
readFunctionArray
[
i
]
=
&
Dbtup
::
readFixedSizeTHTwoWordNotNULL
;
&
Dbtup
::
readFixedSizeTHTwoWordNotNULL
;
regTabPtr
->
updateFunctionArray
[
i
]
=
regTabPtr
->
updateFunctionArray
[
i
]
=
&
Dbtup
::
updateFixedSizeTHTwoWordNotNULL
;
&
Dbtup
::
updateFixedSizeTHTwoWordNotNULL
;
}
else
{
}
else
{
l
jam
();
jam
();
regTabPtr
->
readFunctionArray
[
i
]
=
regTabPtr
->
readFunctionArray
[
i
]
=
&
Dbtup
::
readFixedSizeTHManyWordNotNULL
;
&
Dbtup
::
readFixedSizeTHManyWordNotNULL
;
regTabPtr
->
updateFunctionArray
[
i
]
=
regTabPtr
->
updateFunctionArray
[
i
]
=
...
@@ -64,27 +62,27 @@ Dbtup::setUpQueryRoutines(Tablerec *regTabPtr)
...
@@ -64,27 +62,27 @@ Dbtup::setUpQueryRoutines(Tablerec *regTabPtr)
}
}
// replace functions for char attribute
// replace functions for char attribute
if
(
AttributeOffset
::
getCharsetFlag
(
attrOffset
))
{
if
(
AttributeOffset
::
getCharsetFlag
(
attrOffset
))
{
l
jam
();
jam
();
regTabPtr
->
readFunctionArray
[
i
]
=
&
Dbtup
::
readFixedSizeTHManyWordNotNULL
;
regTabPtr
->
readFunctionArray
[
i
]
=
&
Dbtup
::
readFixedSizeTHManyWordNotNULL
;
regTabPtr
->
updateFunctionArray
[
i
]
=
&
Dbtup
::
updateFixedSizeTHManyWordNotNULL
;
regTabPtr
->
updateFunctionArray
[
i
]
=
&
Dbtup
::
updateFixedSizeTHManyWordNotNULL
;
}
}
}
else
{
}
else
{
if
(
AttributeDescriptor
::
getSize
(
attrDescr
)
==
0
){
if
(
AttributeDescriptor
::
getSize
(
attrDescr
)
==
0
){
l
jam
();
jam
();
regTabPtr
->
readFunctionArray
[
i
]
=
&
Dbtup
::
readBitsNULLable
;
regTabPtr
->
readFunctionArray
[
i
]
=
&
Dbtup
::
readBitsNULLable
;
regTabPtr
->
updateFunctionArray
[
i
]
=
&
Dbtup
::
updateBitsNULLable
;
regTabPtr
->
updateFunctionArray
[
i
]
=
&
Dbtup
::
updateBitsNULLable
;
}
else
if
(
AttributeDescriptor
::
getSizeInBytes
(
attrDescr
)
==
4
){
}
else
if
(
AttributeDescriptor
::
getSizeInBytes
(
attrDescr
)
==
4
){
l
jam
();
jam
();
regTabPtr
->
readFunctionArray
[
i
]
=
&
Dbtup
::
readFixedSizeTHOneWordNULLable
;
regTabPtr
->
readFunctionArray
[
i
]
=
&
Dbtup
::
readFixedSizeTHOneWordNULLable
;
regTabPtr
->
updateFunctionArray
[
i
]
=
&
Dbtup
::
updateFixedSizeTHManyWordNULLable
;
regTabPtr
->
updateFunctionArray
[
i
]
=
&
Dbtup
::
updateFixedSizeTHManyWordNULLable
;
}
else
if
(
AttributeDescriptor
::
getSizeInBytes
(
attrDescr
)
==
8
)
{
}
else
if
(
AttributeDescriptor
::
getSizeInBytes
(
attrDescr
)
==
8
)
{
l
jam
();
jam
();
regTabPtr
->
readFunctionArray
[
i
]
=
regTabPtr
->
readFunctionArray
[
i
]
=
&
Dbtup
::
readFixedSizeTHTwoWordNULLable
;
&
Dbtup
::
readFixedSizeTHTwoWordNULLable
;
regTabPtr
->
updateFunctionArray
[
i
]
=
regTabPtr
->
updateFunctionArray
[
i
]
=
&
Dbtup
::
updateFixedSizeTHManyWordNULLable
;
&
Dbtup
::
updateFixedSizeTHManyWordNULLable
;
}
else
{
}
else
{
l
jam
();
jam
();
regTabPtr
->
readFunctionArray
[
i
]
=
regTabPtr
->
readFunctionArray
[
i
]
=
&
Dbtup
::
readFixedSizeTHManyWordNULLable
;
&
Dbtup
::
readFixedSizeTHManyWordNULLable
;
regTabPtr
->
updateFunctionArray
[
i
]
=
regTabPtr
->
updateFunctionArray
[
i
]
=
...
@@ -92,7 +90,7 @@ Dbtup::setUpQueryRoutines(Tablerec *regTabPtr)
...
@@ -92,7 +90,7 @@ Dbtup::setUpQueryRoutines(Tablerec *regTabPtr)
}
}
// replace functions for char attribute
// replace functions for char attribute
if
(
AttributeOffset
::
getCharsetFlag
(
attrOffset
))
{
if
(
AttributeOffset
::
getCharsetFlag
(
attrOffset
))
{
l
jam
();
jam
();
regTabPtr
->
readFunctionArray
[
i
]
=
&
Dbtup
::
readFixedSizeTHManyWordNULLable
;
regTabPtr
->
readFunctionArray
[
i
]
=
&
Dbtup
::
readFixedSizeTHManyWordNULLable
;
regTabPtr
->
updateFunctionArray
[
i
]
=
&
Dbtup
::
updateFixedSizeTHManyWordNULLable
;
regTabPtr
->
updateFunctionArray
[
i
]
=
&
Dbtup
::
updateFixedSizeTHManyWordNULLable
;
}
}
...
@@ -144,7 +142,7 @@ Dbtup::setUpQueryRoutines(Tablerec *regTabPtr)
...
@@ -144,7 +142,7 @@ Dbtup::setUpQueryRoutines(Tablerec *regTabPtr)
}
}
}
else
{
}
else
{
if
(
AttributeDescriptor
::
getArrayType
(
attrDescr
)
==
NDB_ARRAYTYPE_FIXED
){
if
(
AttributeDescriptor
::
getArrayType
(
attrDescr
)
==
NDB_ARRAYTYPE_FIXED
){
l
jam
();
jam
();
regTabPtr
->
readFunctionArray
[
i
]
=
&
Dbtup
::
readDynFixedSize
;
regTabPtr
->
readFunctionArray
[
i
]
=
&
Dbtup
::
readDynFixedSize
;
regTabPtr
->
updateFunctionArray
[
i
]
=
&
Dbtup
::
updateDynFixedSize
;
regTabPtr
->
updateFunctionArray
[
i
]
=
&
Dbtup
::
updateDynFixedSize
;
}
else
{
}
else
{
...
@@ -204,7 +202,7 @@ int Dbtup::readAttributes(KeyReqStruct *req_struct,
...
@@ -204,7 +202,7 @@ int Dbtup::readAttributes(KeyReqStruct *req_struct,
inBufIndex
++
;
inBufIndex
++
;
attributeId
=
ahIn
.
getAttributeId
();
attributeId
=
ahIn
.
getAttributeId
();
descr_index
=
attributeId
<<
ZAD_LOG_SIZE
;
descr_index
=
attributeId
<<
ZAD_LOG_SIZE
;
l
jam
();
jam
();
AttributeHeader
::
init
(
&
outBuffer
[
tmpAttrBufIndex
],
attributeId
,
0
);
AttributeHeader
::
init
(
&
outBuffer
[
tmpAttrBufIndex
],
attributeId
,
0
);
ahOut
=
(
AttributeHeader
*
)
&
outBuffer
[
tmpAttrBufIndex
];
ahOut
=
(
AttributeHeader
*
)
&
outBuffer
[
tmpAttrBufIndex
];
...
@@ -223,7 +221,7 @@ int Dbtup::readAttributes(KeyReqStruct *req_struct,
...
@@ -223,7 +221,7 @@ int Dbtup::readAttributes(KeyReqStruct *req_struct,
return
-
1
;
return
-
1
;
}
}
}
else
if
(
attributeId
&
AttributeHeader
::
PSEUDO
)
{
}
else
if
(
attributeId
&
AttributeHeader
::
PSEUDO
)
{
l
jam
();
jam
();
Uint32
sz
=
read_pseudo
(
attributeId
,
Uint32
sz
=
read_pseudo
(
attributeId
,
req_struct
,
req_struct
,
outBuffer
+
tmpAttrBufIndex
+
1
);
outBuffer
+
tmpAttrBufIndex
+
1
);
...
@@ -252,13 +250,13 @@ Dbtup::readFixedSizeTHOneWordNotNULL(Uint32* outBuffer,
...
@@ -252,13 +250,13 @@ Dbtup::readFixedSizeTHOneWordNotNULL(Uint32* outBuffer,
ndbrequire
(
readOffset
<
req_struct
->
check_offset
[
MM
]);
ndbrequire
(
readOffset
<
req_struct
->
check_offset
[
MM
]);
if
(
newIndexBuf
<=
maxRead
)
{
if
(
newIndexBuf
<=
maxRead
)
{
l
jam
();
jam
();
outBuffer
[
indexBuf
]
=
wordRead
;
outBuffer
[
indexBuf
]
=
wordRead
;
ahOut
->
setDataSize
(
1
);
ahOut
->
setDataSize
(
1
);
req_struct
->
out_buf_index
=
newIndexBuf
;
req_struct
->
out_buf_index
=
newIndexBuf
;
return
true
;
return
true
;
}
else
{
}
else
{
l
jam
();
jam
();
terrorCode
=
ZTRY_TO_READ_TOO_MUCH_ERROR
;
terrorCode
=
ZTRY_TO_READ_TOO_MUCH_ERROR
;
return
false
;
return
false
;
}
}
...
@@ -280,14 +278,14 @@ Dbtup::readFixedSizeTHTwoWordNotNULL(Uint32* outBuffer,
...
@@ -280,14 +278,14 @@ Dbtup::readFixedSizeTHTwoWordNotNULL(Uint32* outBuffer,
ndbrequire
(
readOffset
+
1
<
req_struct
->
check_offset
[
MM
]);
ndbrequire
(
readOffset
+
1
<
req_struct
->
check_offset
[
MM
]);
if
(
newIndexBuf
<=
maxRead
)
{
if
(
newIndexBuf
<=
maxRead
)
{
l
jam
();
jam
();
ahOut
->
setDataSize
(
2
);
ahOut
->
setDataSize
(
2
);
outBuffer
[
indexBuf
]
=
wordReadFirst
;
outBuffer
[
indexBuf
]
=
wordReadFirst
;
outBuffer
[
indexBuf
+
1
]
=
wordReadSecond
;
outBuffer
[
indexBuf
+
1
]
=
wordReadSecond
;
req_struct
->
out_buf_index
=
newIndexBuf
;
req_struct
->
out_buf_index
=
newIndexBuf
;
return
true
;
return
true
;
}
else
{
}
else
{
l
jam
();
jam
();
terrorCode
=
ZTRY_TO_READ_TOO_MUCH_ERROR
;
terrorCode
=
ZTRY_TO_READ_TOO_MUCH_ERROR
;
return
false
;
return
false
;
}
}
...
@@ -311,7 +309,7 @@ Dbtup::readFixedSizeTHManyWordNotNULL(Uint32* outBuffer,
...
@@ -311,7 +309,7 @@ Dbtup::readFixedSizeTHManyWordNotNULL(Uint32* outBuffer,
if
(
!
charsetFlag
||
!
req_struct
->
xfrm_flag
)
{
if
(
!
charsetFlag
||
!
req_struct
->
xfrm_flag
)
{
Uint32
newIndexBuf
=
indexBuf
+
attrNoOfWords
;
Uint32
newIndexBuf
=
indexBuf
+
attrNoOfWords
;
if
(
newIndexBuf
<=
maxRead
)
{
if
(
newIndexBuf
<=
maxRead
)
{
l
jam
();
jam
();
ahOut
->
setByteSize
(
AttributeDescriptor
::
getSizeInBytes
(
attrDescriptor
));
ahOut
->
setByteSize
(
AttributeDescriptor
::
getSizeInBytes
(
attrDescriptor
));
MEMCOPY_NO_WORDS
(
&
outBuffer
[
indexBuf
],
MEMCOPY_NO_WORDS
(
&
outBuffer
[
indexBuf
],
&
tuple_header
[
readOffset
],
&
tuple_header
[
readOffset
],
...
@@ -319,11 +317,11 @@ Dbtup::readFixedSizeTHManyWordNotNULL(Uint32* outBuffer,
...
@@ -319,11 +317,11 @@ Dbtup::readFixedSizeTHManyWordNotNULL(Uint32* outBuffer,
req_struct
->
out_buf_index
=
newIndexBuf
;
req_struct
->
out_buf_index
=
newIndexBuf
;
return
true
;
return
true
;
}
else
{
}
else
{
l
jam
();
jam
();
terrorCode
=
ZTRY_TO_READ_TOO_MUCH_ERROR
;
terrorCode
=
ZTRY_TO_READ_TOO_MUCH_ERROR
;
}
//if
}
//if
}
else
{
}
else
{
l
jam
();
jam
();
Tablerec
*
regTabPtr
=
tabptr
.
p
;
Tablerec
*
regTabPtr
=
tabptr
.
p
;
Uint32
srcBytes
=
AttributeDescriptor
::
getSizeInBytes
(
attrDescriptor
);
Uint32
srcBytes
=
AttributeDescriptor
::
getSizeInBytes
(
attrDescriptor
);
uchar
*
dstPtr
=
(
uchar
*
)
&
outBuffer
[
indexBuf
];
uchar
*
dstPtr
=
(
uchar
*
)
&
outBuffer
[
indexBuf
];
...
@@ -340,7 +338,7 @@ Dbtup::readFixedSizeTHManyWordNotNULL(Uint32* outBuffer,
...
@@ -340,7 +338,7 @@ Dbtup::readFixedSizeTHManyWordNotNULL(Uint32* outBuffer,
Uint32
dstLen
=
xmul
*
(
srcBytes
-
lb
);
Uint32
dstLen
=
xmul
*
(
srcBytes
-
lb
);
Uint32
maxIndexBuf
=
indexBuf
+
(
dstLen
>>
2
);
Uint32
maxIndexBuf
=
indexBuf
+
(
dstLen
>>
2
);
if
(
maxIndexBuf
<=
maxRead
&&
ok
)
{
if
(
maxIndexBuf
<=
maxRead
&&
ok
)
{
l
jam
();
jam
();
const
char
*
ssrcPtr
=
(
const
char
*
)
srcPtr
;
const
char
*
ssrcPtr
=
(
const
char
*
)
srcPtr
;
int
n
=
NdbSqlUtil
::
strnxfrm_bug7284
(
cs
,
dstPtr
,
dstLen
,
srcPtr
+
lb
,
len
);
int
n
=
NdbSqlUtil
::
strnxfrm_bug7284
(
cs
,
dstPtr
,
dstLen
,
srcPtr
+
lb
,
len
);
ndbrequire
(
n
!=
-
1
);
ndbrequire
(
n
!=
-
1
);
...
@@ -354,7 +352,7 @@ Dbtup::readFixedSizeTHManyWordNotNULL(Uint32* outBuffer,
...
@@ -354,7 +352,7 @@ Dbtup::readFixedSizeTHManyWordNotNULL(Uint32* outBuffer,
req_struct
->
out_buf_index
=
newIndexBuf
;
req_struct
->
out_buf_index
=
newIndexBuf
;
return
true
;
return
true
;
}
else
{
}
else
{
l
jam
();
jam
();
terrorCode
=
ZTRY_TO_READ_TOO_MUCH_ERROR
;
terrorCode
=
ZTRY_TO_READ_TOO_MUCH_ERROR
;
}
}
}
}
...
@@ -368,13 +366,13 @@ Dbtup::readFixedSizeTHOneWordNULLable(Uint32* outBuffer,
...
@@ -368,13 +366,13 @@ Dbtup::readFixedSizeTHOneWordNULLable(Uint32* outBuffer,
Uint32
attrDes2
)
Uint32
attrDes2
)
{
{
if
(
!
nullFlagCheck
(
req_struct
,
attrDes2
))
{
if
(
!
nullFlagCheck
(
req_struct
,
attrDes2
))
{
l
jam
();
jam
();
return
readFixedSizeTHOneWordNotNULL
(
outBuffer
,
return
readFixedSizeTHOneWordNotNULL
(
outBuffer
,
req_struct
,
req_struct
,
ahOut
,
ahOut
,
attrDes2
);
attrDes2
);
}
else
{
}
else
{
l
jam
();
jam
();
ahOut
->
setNULL
();
ahOut
->
setNULL
();
return
true
;
return
true
;
}
}
...
@@ -387,13 +385,13 @@ Dbtup::readFixedSizeTHTwoWordNULLable(Uint32* outBuffer,
...
@@ -387,13 +385,13 @@ Dbtup::readFixedSizeTHTwoWordNULLable(Uint32* outBuffer,
Uint32
attrDes2
)
Uint32
attrDes2
)
{
{
if
(
!
nullFlagCheck
(
req_struct
,
attrDes2
))
{
if
(
!
nullFlagCheck
(
req_struct
,
attrDes2
))
{
l
jam
();
jam
();
return
readFixedSizeTHTwoWordNotNULL
(
outBuffer
,
return
readFixedSizeTHTwoWordNotNULL
(
outBuffer
,
req_struct
,
req_struct
,
ahOut
,
ahOut
,
attrDes2
);
attrDes2
);
}
else
{
}
else
{
l
jam
();
jam
();
ahOut
->
setNULL
();
ahOut
->
setNULL
();
return
true
;
return
true
;
}
}
...
@@ -406,13 +404,13 @@ Dbtup::readFixedSizeTHManyWordNULLable(Uint32* outBuffer,
...
@@ -406,13 +404,13 @@ Dbtup::readFixedSizeTHManyWordNULLable(Uint32* outBuffer,
Uint32
attrDes2
)
Uint32
attrDes2
)
{
{
if
(
!
nullFlagCheck
(
req_struct
,
attrDes2
))
{
if
(
!
nullFlagCheck
(
req_struct
,
attrDes2
))
{
l
jam
();
jam
();
return
readFixedSizeTHManyWordNotNULL
(
outBuffer
,
return
readFixedSizeTHManyWordNotNULL
(
outBuffer
,
req_struct
,
req_struct
,
ahOut
,
ahOut
,
attrDes2
);
attrDes2
);
}
else
{
}
else
{
l
jam
();
jam
();
ahOut
->
setNULL
();
ahOut
->
setNULL
();
return
true
;
return
true
;
}
}
...
@@ -424,9 +422,9 @@ Dbtup::readFixedSizeTHZeroWordNULLable(Uint32* outBuffer,
...
@@ -424,9 +422,9 @@ Dbtup::readFixedSizeTHZeroWordNULLable(Uint32* outBuffer,
AttributeHeader
*
ahOut
,
AttributeHeader
*
ahOut
,
Uint32
attrDes2
)
Uint32
attrDes2
)
{
{
l
jam
();
jam
();
if
(
nullFlagCheck
(
req_struct
,
attrDes2
))
{
if
(
nullFlagCheck
(
req_struct
,
attrDes2
))
{
l
jam
();
jam
();
ahOut
->
setNULL
();
ahOut
->
setNULL
();
}
}
return
true
;
return
true
;
...
@@ -478,7 +476,7 @@ Dbtup::readVarSizeNotNULL(Uint32* out_buffer,
...
@@ -478,7 +476,7 @@ Dbtup::readVarSizeNotNULL(Uint32* out_buffer,
if
(
!
charsetFlag
||
!
req_struct
->
xfrm_flag
)
if
(
!
charsetFlag
||
!
req_struct
->
xfrm_flag
)
{
{
if
(
new_index
<=
max_read
)
{
if
(
new_index
<=
max_read
)
{
l
jam
();
jam
();
ah_out
->
setByteSize
(
vsize_in_bytes
);
ah_out
->
setByteSize
(
vsize_in_bytes
);
out_buffer
[
index_buf
+
(
vsize_in_bytes
>>
2
)]
=
0
;
out_buffer
[
index_buf
+
(
vsize_in_bytes
>>
2
)]
=
0
;
memcpy
(
out_buffer
+
index_buf
,
memcpy
(
out_buffer
+
index_buf
,
...
@@ -490,7 +488,7 @@ Dbtup::readVarSizeNotNULL(Uint32* out_buffer,
...
@@ -490,7 +488,7 @@ Dbtup::readVarSizeNotNULL(Uint32* out_buffer,
}
}
else
else
{
{
l
jam
();
jam
();
Tablerec
*
regTabPtr
=
tabptr
.
p
;
Tablerec
*
regTabPtr
=
tabptr
.
p
;
Uint32
maxBytes
=
AttributeDescriptor
::
getSizeInBytes
(
attr_descriptor
);
Uint32
maxBytes
=
AttributeDescriptor
::
getSizeInBytes
(
attr_descriptor
);
Uint32
srcBytes
=
vsize_in_bytes
;
Uint32
srcBytes
=
vsize_in_bytes
;
...
@@ -509,7 +507,7 @@ Dbtup::readVarSizeNotNULL(Uint32* out_buffer,
...
@@ -509,7 +507,7 @@ Dbtup::readVarSizeNotNULL(Uint32* out_buffer,
Uint32
dstLen
=
xmul
*
(
maxBytes
-
lb
);
Uint32
dstLen
=
xmul
*
(
maxBytes
-
lb
);
Uint32
maxIndexBuf
=
index_buf
+
(
dstLen
>>
2
);
Uint32
maxIndexBuf
=
index_buf
+
(
dstLen
>>
2
);
if
(
maxIndexBuf
<=
max_read
&&
ok
)
{
if
(
maxIndexBuf
<=
max_read
&&
ok
)
{
l
jam
();
jam
();
const
char
*
ssrcPtr
=
(
const
char
*
)
srcPtr
;
const
char
*
ssrcPtr
=
(
const
char
*
)
srcPtr
;
int
n
=
NdbSqlUtil
::
strnxfrm_bug7284
(
cs
,
dstPtr
,
dstLen
,
srcPtr
+
lb
,
len
);
int
n
=
NdbSqlUtil
::
strnxfrm_bug7284
(
cs
,
dstPtr
,
dstLen
,
srcPtr
+
lb
,
len
);
ndbrequire
(
n
!=
-
1
);
ndbrequire
(
n
!=
-
1
);
...
@@ -524,7 +522,7 @@ Dbtup::readVarSizeNotNULL(Uint32* out_buffer,
...
@@ -524,7 +522,7 @@ Dbtup::readVarSizeNotNULL(Uint32* out_buffer,
return
true
;
return
true
;
}
}
}
}
l
jam
();
jam
();
terrorCode
=
ZTRY_TO_READ_TOO_MUCH_ERROR
;
terrorCode
=
ZTRY_TO_READ_TOO_MUCH_ERROR
;
return
false
;
return
false
;
}
}
...
@@ -536,13 +534,13 @@ Dbtup::readVarSizeNULLable(Uint32* outBuffer,
...
@@ -536,13 +534,13 @@ Dbtup::readVarSizeNULLable(Uint32* outBuffer,
Uint32
attrDes2
)
Uint32
attrDes2
)
{
{
if
(
!
nullFlagCheck
(
req_struct
,
attrDes2
))
{
if
(
!
nullFlagCheck
(
req_struct
,
attrDes2
))
{
l
jam
();
jam
();
return
readVarSizeNotNULL
(
outBuffer
,
return
readVarSizeNotNULL
(
outBuffer
,
req_struct
,
req_struct
,
ahOut
,
ahOut
,
attrDes2
);
attrDes2
);
}
else
{
}
else
{
l
jam
();
jam
();
ahOut
->
setNULL
();
ahOut
->
setNULL
();
return
true
;
return
true
;
}
}
...
@@ -554,7 +552,7 @@ Dbtup::readDynFixedSize(Uint32* outBuffer,
...
@@ -554,7 +552,7 @@ Dbtup::readDynFixedSize(Uint32* outBuffer,
AttributeHeader
*
ahOut
,
AttributeHeader
*
ahOut
,
Uint32
attrDes2
)
Uint32
attrDes2
)
{
{
l
jam
();
jam
();
terrorCode
=
ZVAR_SIZED_NOT_SUPPORTED
;
terrorCode
=
ZVAR_SIZED_NOT_SUPPORTED
;
return
false
;
return
false
;
}
}
...
@@ -565,7 +563,7 @@ Dbtup::readDynVarSize(Uint32* outBuffer,
...
@@ -565,7 +563,7 @@ Dbtup::readDynVarSize(Uint32* outBuffer,
AttributeHeader
*
ahOut
,
AttributeHeader
*
ahOut
,
Uint32
attrDes2
)
Uint32
attrDes2
)
{
{
l
jam
();
jam
();
terrorCode
=
ZVAR_SIZED_NOT_SUPPORTED
;
terrorCode
=
ZVAR_SIZED_NOT_SUPPORTED
;
return
false
;
return
false
;
}
//Dbtup::readDynBigVarSize()
}
//Dbtup::readDynBigVarSize()
...
@@ -588,7 +586,7 @@ Dbtup::readDiskFixedSizeNotNULL(Uint32* outBuffer,
...
@@ -588,7 +586,7 @@ Dbtup::readDiskFixedSizeNotNULL(Uint32* outBuffer,
if
(
!
charsetFlag
||
!
req_struct
->
xfrm_flag
)
{
if
(
!
charsetFlag
||
!
req_struct
->
xfrm_flag
)
{
Uint32
newIndexBuf
=
indexBuf
+
attrNoOfWords
;
Uint32
newIndexBuf
=
indexBuf
+
attrNoOfWords
;
if
(
newIndexBuf
<=
maxRead
)
{
if
(
newIndexBuf
<=
maxRead
)
{
l
jam
();
jam
();
ahOut
->
setByteSize
(
AttributeDescriptor
::
getSizeInBytes
(
attrDescriptor
));
ahOut
->
setByteSize
(
AttributeDescriptor
::
getSizeInBytes
(
attrDescriptor
));
MEMCOPY_NO_WORDS
(
&
outBuffer
[
indexBuf
],
MEMCOPY_NO_WORDS
(
&
outBuffer
[
indexBuf
],
&
tuple_header
[
readOffset
],
&
tuple_header
[
readOffset
],
...
@@ -596,11 +594,11 @@ Dbtup::readDiskFixedSizeNotNULL(Uint32* outBuffer,
...
@@ -596,11 +594,11 @@ Dbtup::readDiskFixedSizeNotNULL(Uint32* outBuffer,
req_struct
->
out_buf_index
=
newIndexBuf
;
req_struct
->
out_buf_index
=
newIndexBuf
;
return
true
;
return
true
;
}
else
{
}
else
{
l
jam
();
jam
();
terrorCode
=
ZTRY_TO_READ_TOO_MUCH_ERROR
;
terrorCode
=
ZTRY_TO_READ_TOO_MUCH_ERROR
;
}
//if
}
//if
}
else
{
}
else
{
l
jam
();
jam
();
Tablerec
*
regTabPtr
=
tabptr
.
p
;
Tablerec
*
regTabPtr
=
tabptr
.
p
;
Uint32
srcBytes
=
AttributeDescriptor
::
getSizeInBytes
(
attrDescriptor
);
Uint32
srcBytes
=
AttributeDescriptor
::
getSizeInBytes
(
attrDescriptor
);
uchar
*
dstPtr
=
(
uchar
*
)
&
outBuffer
[
indexBuf
];
uchar
*
dstPtr
=
(
uchar
*
)
&
outBuffer
[
indexBuf
];
...
@@ -617,7 +615,7 @@ Dbtup::readDiskFixedSizeNotNULL(Uint32* outBuffer,
...
@@ -617,7 +615,7 @@ Dbtup::readDiskFixedSizeNotNULL(Uint32* outBuffer,
Uint32
dstLen
=
xmul
*
(
srcBytes
-
lb
);
Uint32
dstLen
=
xmul
*
(
srcBytes
-
lb
);
Uint32
maxIndexBuf
=
indexBuf
+
(
dstLen
>>
2
);
Uint32
maxIndexBuf
=
indexBuf
+
(
dstLen
>>
2
);
if
(
maxIndexBuf
<=
maxRead
&&
ok
)
{
if
(
maxIndexBuf
<=
maxRead
&&
ok
)
{
l
jam
();
jam
();
const
char
*
ssrcPtr
=
(
const
char
*
)
srcPtr
;
const
char
*
ssrcPtr
=
(
const
char
*
)
srcPtr
;
int
n
=
NdbSqlUtil
::
strnxfrm_bug7284
(
cs
,
dstPtr
,
dstLen
,
srcPtr
+
lb
,
len
);
int
n
=
NdbSqlUtil
::
strnxfrm_bug7284
(
cs
,
dstPtr
,
dstLen
,
srcPtr
+
lb
,
len
);
ndbrequire
(
n
!=
-
1
);
ndbrequire
(
n
!=
-
1
);
...
@@ -631,7 +629,7 @@ Dbtup::readDiskFixedSizeNotNULL(Uint32* outBuffer,
...
@@ -631,7 +629,7 @@ Dbtup::readDiskFixedSizeNotNULL(Uint32* outBuffer,
req_struct
->
out_buf_index
=
newIndexBuf
;
req_struct
->
out_buf_index
=
newIndexBuf
;
return
true
;
return
true
;
}
else
{
}
else
{
l
jam
();
jam
();
terrorCode
=
ZTRY_TO_READ_TOO_MUCH_ERROR
;
terrorCode
=
ZTRY_TO_READ_TOO_MUCH_ERROR
;
}
}
}
}
...
@@ -645,13 +643,13 @@ Dbtup::readDiskFixedSizeNULLable(Uint32* outBuffer,
...
@@ -645,13 +643,13 @@ Dbtup::readDiskFixedSizeNULLable(Uint32* outBuffer,
Uint32
attrDes2
)
Uint32
attrDes2
)
{
{
if
(
!
disk_nullFlagCheck
(
req_struct
,
attrDes2
))
{
if
(
!
disk_nullFlagCheck
(
req_struct
,
attrDes2
))
{
l
jam
();
jam
();
return
readDiskFixedSizeNotNULL
(
outBuffer
,
return
readDiskFixedSizeNotNULL
(
outBuffer
,
req_struct
,
req_struct
,
ahOut
,
ahOut
,
attrDes2
);
attrDes2
);
}
else
{
}
else
{
l
jam
();
jam
();
ahOut
->
setNULL
();
ahOut
->
setNULL
();
return
true
;
return
true
;
}
}
...
@@ -680,7 +678,7 @@ Dbtup::readDiskVarSizeNotNULL(Uint32* out_buffer,
...
@@ -680,7 +678,7 @@ Dbtup::readDiskVarSizeNotNULL(Uint32* out_buffer,
ndbrequire
(
vsize_in_words
<=
max_var_size
);
ndbrequire
(
vsize_in_words
<=
max_var_size
);
if
(
new_index
<=
max_read
)
{
if
(
new_index
<=
max_read
)
{
l
jam
();
jam
();
ah_out
->
setByteSize
(
vsize_in_bytes
);
ah_out
->
setByteSize
(
vsize_in_bytes
);
memcpy
(
out_buffer
+
index_buf
,
memcpy
(
out_buffer
+
index_buf
,
req_struct
->
m_var_data
[
DD
].
m_data_ptr
+
var_attr_pos
,
req_struct
->
m_var_data
[
DD
].
m_data_ptr
+
var_attr_pos
,
...
@@ -688,7 +686,7 @@ Dbtup::readDiskVarSizeNotNULL(Uint32* out_buffer,
...
@@ -688,7 +686,7 @@ Dbtup::readDiskVarSizeNotNULL(Uint32* out_buffer,
req_struct
->
out_buf_index
=
new_index
;
req_struct
->
out_buf_index
=
new_index
;
return
true
;
return
true
;
}
else
{
}
else
{
l
jam
();
jam
();
terrorCode
=
ZTRY_TO_READ_TOO_MUCH_ERROR
;
terrorCode
=
ZTRY_TO_READ_TOO_MUCH_ERROR
;
return
false
;
return
false
;
}
}
...
@@ -701,13 +699,13 @@ Dbtup::readDiskVarSizeNULLable(Uint32* outBuffer,
...
@@ -701,13 +699,13 @@ Dbtup::readDiskVarSizeNULLable(Uint32* outBuffer,
Uint32
attrDes2
)
Uint32
attrDes2
)
{
{
if
(
!
disk_nullFlagCheck
(
req_struct
,
attrDes2
))
{
if
(
!
disk_nullFlagCheck
(
req_struct
,
attrDes2
))
{
l
jam
();
jam
();
return
readDiskVarSizeNotNULL
(
outBuffer
,
return
readDiskVarSizeNotNULL
(
outBuffer
,
req_struct
,
req_struct
,
ahOut
,
ahOut
,
attrDes2
);
attrDes2
);
}
else
{
}
else
{
l
jam
();
jam
();
ahOut
->
setNULL
();
ahOut
->
setNULL
();
return
true
;
return
true
;
}
}
...
@@ -749,13 +747,13 @@ int Dbtup::updateAttributes(KeyReqStruct *req_struct,
...
@@ -749,13 +747,13 @@ int Dbtup::updateAttributes(KeyReqStruct *req_struct,
if
(
checkUpdateOfPrimaryKey
(
req_struct
,
if
(
checkUpdateOfPrimaryKey
(
req_struct
,
&
inBuffer
[
inBufIndex
],
&
inBuffer
[
inBufIndex
],
regTabPtr
))
{
regTabPtr
))
{
l
jam
();
jam
();
terrorCode
=
ZTRY_UPDATE_PRIMARY_KEY
;
terrorCode
=
ZTRY_UPDATE_PRIMARY_KEY
;
return
-
1
;
return
-
1
;
}
}
}
}
UpdateFunction
f
=
regTabPtr
->
updateFunctionArray
[
attributeId
];
UpdateFunction
f
=
regTabPtr
->
updateFunctionArray
[
attributeId
];
l
jam
();
jam
();
req_struct
->
attr_descriptor
=
attrDescriptor
;
req_struct
->
attr_descriptor
=
attrDescriptor
;
req_struct
->
changeMask
.
set
(
attributeId
);
req_struct
->
changeMask
.
set
(
attributeId
);
if
(
attributeId
>=
64
)
{
if
(
attributeId
>=
64
)
{
...
@@ -771,13 +769,13 @@ int Dbtup::updateAttributes(KeyReqStruct *req_struct,
...
@@ -771,13 +769,13 @@ int Dbtup::updateAttributes(KeyReqStruct *req_struct,
inBufIndex
=
req_struct
->
in_buf_index
;
inBufIndex
=
req_struct
->
in_buf_index
;
continue
;
continue
;
}
else
{
}
else
{
l
jam
();
jam
();
return
-
1
;
return
-
1
;
}
}
}
}
else
if
(
attributeId
==
AttributeHeader
::
DISK_REF
)
else
if
(
attributeId
==
AttributeHeader
::
DISK_REF
)
{
{
l
jam
();
jam
();
Uint32
sz
=
ahIn
.
getDataSize
();
Uint32
sz
=
ahIn
.
getDataSize
();
ndbrequire
(
sz
==
2
);
ndbrequire
(
sz
==
2
);
req_struct
->
m_tuple_ptr
->
m_header_bits
|=
Tuple_header
::
DISK_PART
;
req_struct
->
m_tuple_ptr
->
m_header_bits
|=
Tuple_header
::
DISK_PART
;
...
@@ -788,7 +786,7 @@ int Dbtup::updateAttributes(KeyReqStruct *req_struct,
...
@@ -788,7 +786,7 @@ int Dbtup::updateAttributes(KeyReqStruct *req_struct,
}
}
else
else
{
{
l
jam
();
jam
();
terrorCode
=
ZATTRIBUTE_ID_ERROR
;
terrorCode
=
ZATTRIBUTE_ID_ERROR
;
return
-
1
;
return
-
1
;
}
}
...
@@ -842,13 +840,13 @@ Dbtup::checkUpdateOfPrimaryKey(KeyReqStruct* req_struct,
...
@@ -842,13 +840,13 @@ Dbtup::checkUpdateOfPrimaryKey(KeyReqStruct* req_struct,
ndbrequire
(
req_struct
->
out_buf_index
==
ahOut
->
getDataSize
());
ndbrequire
(
req_struct
->
out_buf_index
==
ahOut
->
getDataSize
());
if
(
ahIn
.
getDataSize
()
!=
ahOut
->
getDataSize
())
{
if
(
ahIn
.
getDataSize
()
!=
ahOut
->
getDataSize
())
{
l
jam
();
jam
();
return
true
;
return
true
;
}
}
if
(
memcmp
(
&
keyReadBuffer
[
0
],
if
(
memcmp
(
&
keyReadBuffer
[
0
],
&
updateBuffer
[
1
],
&
updateBuffer
[
1
],
req_struct
->
out_buf_index
<<
2
)
!=
0
)
{
req_struct
->
out_buf_index
<<
2
)
!=
0
)
{
l
jam
();
jam
();
return
true
;
return
true
;
}
}
return
false
;
return
false
;
...
@@ -871,17 +869,17 @@ Dbtup::updateFixedSizeTHOneWordNotNULL(Uint32* inBuffer,
...
@@ -871,17 +869,17 @@ Dbtup::updateFixedSizeTHOneWordNotNULL(Uint32* inBuffer,
if
(
newIndex
<=
inBufLen
)
{
if
(
newIndex
<=
inBufLen
)
{
Uint32
updateWord
=
inBuffer
[
indexBuf
+
1
];
Uint32
updateWord
=
inBuffer
[
indexBuf
+
1
];
if
(
!
nullIndicator
)
{
if
(
!
nullIndicator
)
{
l
jam
();
jam
();
req_struct
->
in_buf_index
=
newIndex
;
req_struct
->
in_buf_index
=
newIndex
;
tuple_header
[
updateOffset
]
=
updateWord
;
tuple_header
[
updateOffset
]
=
updateWord
;
return
true
;
return
true
;
}
else
{
}
else
{
l
jam
();
jam
();
terrorCode
=
ZNOT_NULL_ATTR
;
terrorCode
=
ZNOT_NULL_ATTR
;
return
false
;
return
false
;
}
}
}
else
{
}
else
{
l
jam
();
jam
();
terrorCode
=
ZAI_INCONSISTENCY_ERROR
;
terrorCode
=
ZAI_INCONSISTENCY_ERROR
;
return
false
;
return
false
;
}
}
...
@@ -906,18 +904,18 @@ Dbtup::updateFixedSizeTHTwoWordNotNULL(Uint32* inBuffer,
...
@@ -906,18 +904,18 @@ Dbtup::updateFixedSizeTHTwoWordNotNULL(Uint32* inBuffer,
Uint32
updateWord1
=
inBuffer
[
indexBuf
+
1
];
Uint32
updateWord1
=
inBuffer
[
indexBuf
+
1
];
Uint32
updateWord2
=
inBuffer
[
indexBuf
+
2
];
Uint32
updateWord2
=
inBuffer
[
indexBuf
+
2
];
if
(
!
nullIndicator
)
{
if
(
!
nullIndicator
)
{
l
jam
();
jam
();
req_struct
->
in_buf_index
=
newIndex
;
req_struct
->
in_buf_index
=
newIndex
;
tuple_header
[
updateOffset
]
=
updateWord1
;
tuple_header
[
updateOffset
]
=
updateWord1
;
tuple_header
[
updateOffset
+
1
]
=
updateWord2
;
tuple_header
[
updateOffset
+
1
]
=
updateWord2
;
return
true
;
return
true
;
}
else
{
}
else
{
l
jam
();
jam
();
terrorCode
=
ZNOT_NULL_ATTR
;
terrorCode
=
ZNOT_NULL_ATTR
;
return
false
;
return
false
;
}
}
}
else
{
}
else
{
l
jam
();
jam
();
terrorCode
=
ZAI_INCONSISTENCY_ERROR
;
terrorCode
=
ZAI_INCONSISTENCY_ERROR
;
return
false
;
return
false
;
}
}
...
@@ -943,9 +941,9 @@ Dbtup::updateFixedSizeTHManyWordNotNULL(Uint32* inBuffer,
...
@@ -943,9 +941,9 @@ Dbtup::updateFixedSizeTHManyWordNotNULL(Uint32* inBuffer,
if
(
newIndex
<=
inBufLen
)
{
if
(
newIndex
<=
inBufLen
)
{
if
(
!
nullIndicator
)
{
if
(
!
nullIndicator
)
{
l
jam
();
jam
();
if
(
charsetFlag
)
{
if
(
charsetFlag
)
{
l
jam
();
jam
();
Tablerec
*
regTabPtr
=
tabptr
.
p
;
Tablerec
*
regTabPtr
=
tabptr
.
p
;
Uint32
typeId
=
AttributeDescriptor
::
getType
(
attrDescriptor
);
Uint32
typeId
=
AttributeDescriptor
::
getType
(
attrDescriptor
);
Uint32
bytes
=
AttributeDescriptor
::
getSizeInBytes
(
attrDescriptor
);
Uint32
bytes
=
AttributeDescriptor
::
getSizeInBytes
(
attrDescriptor
);
...
@@ -957,14 +955,14 @@ Dbtup::updateFixedSizeTHManyWordNotNULL(Uint32* inBuffer,
...
@@ -957,14 +955,14 @@ Dbtup::updateFixedSizeTHManyWordNotNULL(Uint32* inBuffer,
const
char
*
ssrc
=
(
const
char
*
)
&
inBuffer
[
indexBuf
+
1
];
const
char
*
ssrc
=
(
const
char
*
)
&
inBuffer
[
indexBuf
+
1
];
Uint32
lb
,
len
;
Uint32
lb
,
len
;
if
(
!
NdbSqlUtil
::
get_var_length
(
typeId
,
ssrc
,
bytes
,
lb
,
len
))
{
if
(
!
NdbSqlUtil
::
get_var_length
(
typeId
,
ssrc
,
bytes
,
lb
,
len
))
{
l
jam
();
jam
();
terrorCode
=
ZINVALID_CHAR_FORMAT
;
terrorCode
=
ZINVALID_CHAR_FORMAT
;
return
false
;
return
false
;
}
}
// fast fix bug#7340
// fast fix bug#7340
if
(
typeId
!=
NDB_TYPE_TEXT
&&
if
(
typeId
!=
NDB_TYPE_TEXT
&&
(
*
cs
->
cset
->
well_formed_len
)(
cs
,
ssrc
+
lb
,
ssrc
+
lb
+
len
,
ZNIL
,
&
not_used
)
!=
len
)
{
(
*
cs
->
cset
->
well_formed_len
)(
cs
,
ssrc
+
lb
,
ssrc
+
lb
+
len
,
ZNIL
,
&
not_used
)
!=
len
)
{
l
jam
();
jam
();
terrorCode
=
ZINVALID_CHAR_FORMAT
;
terrorCode
=
ZINVALID_CHAR_FORMAT
;
return
false
;
return
false
;
}
}
...
@@ -976,12 +974,12 @@ Dbtup::updateFixedSizeTHManyWordNotNULL(Uint32* inBuffer,
...
@@ -976,12 +974,12 @@ Dbtup::updateFixedSizeTHManyWordNotNULL(Uint32* inBuffer,
return
true
;
return
true
;
}
else
{
}
else
{
l
jam
();
jam
();
terrorCode
=
ZNOT_NULL_ATTR
;
terrorCode
=
ZNOT_NULL_ATTR
;
return
false
;
return
false
;
}
}
}
else
{
}
else
{
l
jam
();
jam
();
terrorCode
=
ZAI_INCONSISTENCY_ERROR
;
terrorCode
=
ZAI_INCONSISTENCY_ERROR
;
return
false
;
return
false
;
}
}
...
@@ -999,7 +997,7 @@ Dbtup::updateFixedSizeTHManyWordNULLable(Uint32* inBuffer,
...
@@ -999,7 +997,7 @@ Dbtup::updateFixedSizeTHManyWordNULLable(Uint32* inBuffer,
Uint32
*
bits
=
req_struct
->
m_tuple_ptr
->
get_null_bits
(
regTabPtr
);
Uint32
*
bits
=
req_struct
->
m_tuple_ptr
->
get_null_bits
(
regTabPtr
);
if
(
!
nullIndicator
)
{
if
(
!
nullIndicator
)
{
l
jam
();
jam
();
BitmaskImpl
::
clear
(
regTabPtr
->
m_offsets
[
MM
].
m_null_words
,
bits
,
pos
);
BitmaskImpl
::
clear
(
regTabPtr
->
m_offsets
[
MM
].
m_null_words
,
bits
,
pos
);
return
updateFixedSizeTHManyWordNotNULL
(
inBuffer
,
return
updateFixedSizeTHManyWordNotNULL
(
inBuffer
,
req_struct
,
req_struct
,
...
@@ -1008,11 +1006,11 @@ Dbtup::updateFixedSizeTHManyWordNULLable(Uint32* inBuffer,
...
@@ -1008,11 +1006,11 @@ Dbtup::updateFixedSizeTHManyWordNULLable(Uint32* inBuffer,
Uint32
newIndex
=
req_struct
->
in_buf_index
+
1
;
Uint32
newIndex
=
req_struct
->
in_buf_index
+
1
;
if
(
newIndex
<=
req_struct
->
in_buf_len
)
{
if
(
newIndex
<=
req_struct
->
in_buf_len
)
{
BitmaskImpl
::
set
(
regTabPtr
->
m_offsets
[
MM
].
m_null_words
,
bits
,
pos
);
BitmaskImpl
::
set
(
regTabPtr
->
m_offsets
[
MM
].
m_null_words
,
bits
,
pos
);
l
jam
();
jam
();
req_struct
->
in_buf_index
=
newIndex
;
req_struct
->
in_buf_index
=
newIndex
;
return
true
;
return
true
;
}
else
{
}
else
{
l
jam
();
jam
();
terrorCode
=
ZAI_INCONSISTENCY_ERROR
;
terrorCode
=
ZAI_INCONSISTENCY_ERROR
;
return
false
;
return
false
;
}
}
...
@@ -1046,7 +1044,7 @@ Dbtup::updateVarSizeNotNULL(Uint32* in_buffer,
...
@@ -1046,7 +1044,7 @@ Dbtup::updateVarSizeNotNULL(Uint32* in_buffer,
if
(
new_index
<=
in_buf_len
&&
vsize_in_words
<=
max_var_size
)
{
if
(
new_index
<=
in_buf_len
&&
vsize_in_words
<=
max_var_size
)
{
if
(
!
null_ind
)
{
if
(
!
null_ind
)
{
l
jam
();
jam
();
var_attr_pos
=
vpos_array
[
var_index
];
var_attr_pos
=
vpos_array
[
var_index
];
var_data_start
=
req_struct
->
m_var_data
[
MM
].
m_data_ptr
;
var_data_start
=
req_struct
->
m_var_data
[
MM
].
m_data_ptr
;
vpos_array
[
var_index
+
idx
]
=
var_attr_pos
+
size_in_bytes
;
vpos_array
[
var_index
+
idx
]
=
var_attr_pos
+
size_in_bytes
;
...
@@ -1057,12 +1055,12 @@ Dbtup::updateVarSizeNotNULL(Uint32* in_buffer,
...
@@ -1057,12 +1055,12 @@ Dbtup::updateVarSizeNotNULL(Uint32* in_buffer,
size_in_bytes
);
size_in_bytes
);
return
true
;
return
true
;
}
else
{
}
else
{
l
jam
();
jam
();
terrorCode
=
ZNOT_NULL_ATTR
;
terrorCode
=
ZNOT_NULL_ATTR
;
return
false
;
return
false
;
}
}
}
else
{
}
else
{
l
jam
();
jam
();
terrorCode
=
ZAI_INCONSISTENCY_ERROR
;
terrorCode
=
ZAI_INCONSISTENCY_ERROR
;
return
false
;
return
false
;
}
}
...
@@ -1082,7 +1080,7 @@ Dbtup::updateVarSizeNULLable(Uint32* inBuffer,
...
@@ -1082,7 +1080,7 @@ Dbtup::updateVarSizeNULLable(Uint32* inBuffer,
Uint32
idx
=
req_struct
->
m_var_data
[
MM
].
m_var_len_offset
;
Uint32
idx
=
req_struct
->
m_var_data
[
MM
].
m_var_len_offset
;
if
(
!
nullIndicator
)
{
if
(
!
nullIndicator
)
{
l
jam
();
jam
();
BitmaskImpl
::
clear
(
regTabPtr
->
m_offsets
[
MM
].
m_null_words
,
bits
,
pos
);
BitmaskImpl
::
clear
(
regTabPtr
->
m_offsets
[
MM
].
m_null_words
,
bits
,
pos
);
return
updateVarSizeNotNULL
(
inBuffer
,
return
updateVarSizeNotNULL
(
inBuffer
,
req_struct
,
req_struct
,
...
@@ -1092,13 +1090,13 @@ Dbtup::updateVarSizeNULLable(Uint32* inBuffer,
...
@@ -1092,13 +1090,13 @@ Dbtup::updateVarSizeNULLable(Uint32* inBuffer,
Uint32
var_index
=
AttributeOffset
::
getOffset
(
attrDes2
);
Uint32
var_index
=
AttributeOffset
::
getOffset
(
attrDes2
);
Uint32
var_pos
=
req_struct
->
var_pos_array
[
var_index
];
Uint32
var_pos
=
req_struct
->
var_pos_array
[
var_index
];
if
(
newIndex
<=
req_struct
->
in_buf_len
)
{
if
(
newIndex
<=
req_struct
->
in_buf_len
)
{
l
jam
();
jam
();
BitmaskImpl
::
set
(
regTabPtr
->
m_offsets
[
MM
].
m_null_words
,
bits
,
pos
);
BitmaskImpl
::
set
(
regTabPtr
->
m_offsets
[
MM
].
m_null_words
,
bits
,
pos
);
req_struct
->
var_pos_array
[
var_index
+
idx
]
=
var_pos
;
req_struct
->
var_pos_array
[
var_index
+
idx
]
=
var_pos
;
req_struct
->
in_buf_index
=
newIndex
;
req_struct
->
in_buf_index
=
newIndex
;
return
true
;
return
true
;
}
else
{
}
else
{
l
jam
();
jam
();
terrorCode
=
ZAI_INCONSISTENCY_ERROR
;
terrorCode
=
ZAI_INCONSISTENCY_ERROR
;
return
false
;
return
false
;
}
}
...
@@ -1110,7 +1108,7 @@ Dbtup::updateDynFixedSize(Uint32* inBuffer,
...
@@ -1110,7 +1108,7 @@ Dbtup::updateDynFixedSize(Uint32* inBuffer,
KeyReqStruct
*
req_struct
,
KeyReqStruct
*
req_struct
,
Uint32
attrDes2
)
Uint32
attrDes2
)
{
{
l
jam
();
jam
();
terrorCode
=
ZVAR_SIZED_NOT_SUPPORTED
;
terrorCode
=
ZVAR_SIZED_NOT_SUPPORTED
;
return
false
;
return
false
;
}
}
...
@@ -1120,7 +1118,7 @@ Dbtup::updateDynVarSize(Uint32* inBuffer,
...
@@ -1120,7 +1118,7 @@ Dbtup::updateDynVarSize(Uint32* inBuffer,
KeyReqStruct
*
req_struct
,
KeyReqStruct
*
req_struct
,
Uint32
attrDes2
)
Uint32
attrDes2
)
{
{
l
jam
();
jam
();
terrorCode
=
ZVAR_SIZED_NOT_SUPPORTED
;
terrorCode
=
ZVAR_SIZED_NOT_SUPPORTED
;
return
false
;
return
false
;
}
}
...
@@ -1218,7 +1216,7 @@ Dbtup::readBitsNotNULL(Uint32* outBuffer,
...
@@ -1218,7 +1216,7 @@ Dbtup::readBitsNotNULL(Uint32* outBuffer,
Uint32
maxRead
=
req_struct
->
max_read
;
Uint32
maxRead
=
req_struct
->
max_read
;
Uint32
*
bits
=
req_struct
->
m_tuple_ptr
->
get_null_bits
(
regTabPtr
);
Uint32
*
bits
=
req_struct
->
m_tuple_ptr
->
get_null_bits
(
regTabPtr
);
if
(
newIndexBuf
<=
maxRead
)
{
if
(
newIndexBuf
<=
maxRead
)
{
l
jam
();
jam
();
ahOut
->
setDataSize
((
bitCount
+
31
)
>>
5
);
ahOut
->
setDataSize
((
bitCount
+
31
)
>>
5
);
req_struct
->
out_buf_index
=
newIndexBuf
;
req_struct
->
out_buf_index
=
newIndexBuf
;
...
@@ -1227,7 +1225,7 @@ Dbtup::readBitsNotNULL(Uint32* outBuffer,
...
@@ -1227,7 +1225,7 @@ Dbtup::readBitsNotNULL(Uint32* outBuffer,
return
true
;
return
true
;
}
else
{
}
else
{
l
jam
();
jam
();
terrorCode
=
ZTRY_TO_READ_TOO_MUCH_ERROR
;
terrorCode
=
ZTRY_TO_READ_TOO_MUCH_ERROR
;
return
false
;
return
false
;
}
//if
}
//if
...
@@ -1251,20 +1249,20 @@ Dbtup::readBitsNULLable(Uint32* outBuffer,
...
@@ -1251,20 +1249,20 @@ Dbtup::readBitsNULLable(Uint32* outBuffer,
if
(
BitmaskImpl
::
get
(
regTabPtr
->
m_offsets
[
MM
].
m_null_words
,
bits
,
pos
))
if
(
BitmaskImpl
::
get
(
regTabPtr
->
m_offsets
[
MM
].
m_null_words
,
bits
,
pos
))
{
{
l
jam
();
jam
();
ahOut
->
setNULL
();
ahOut
->
setNULL
();
return
true
;
return
true
;
}
}
if
(
newIndexBuf
<=
maxRead
)
{
if
(
newIndexBuf
<=
maxRead
)
{
l
jam
();
jam
();
ahOut
->
setDataSize
((
bitCount
+
31
)
>>
5
);
ahOut
->
setDataSize
((
bitCount
+
31
)
>>
5
);
req_struct
->
out_buf_index
=
newIndexBuf
;
req_struct
->
out_buf_index
=
newIndexBuf
;
BitmaskImpl
::
getField
(
regTabPtr
->
m_offsets
[
MM
].
m_null_words
,
bits
,
pos
+
1
,
BitmaskImpl
::
getField
(
regTabPtr
->
m_offsets
[
MM
].
m_null_words
,
bits
,
pos
+
1
,
bitCount
,
outBuffer
+
indexBuf
);
bitCount
,
outBuffer
+
indexBuf
);
return
true
;
return
true
;
}
else
{
}
else
{
l
jam
();
jam
();
terrorCode
=
ZTRY_TO_READ_TOO_MUCH_ERROR
;
terrorCode
=
ZTRY_TO_READ_TOO_MUCH_ERROR
;
return
false
;
return
false
;
}
//if
}
//if
...
@@ -1293,12 +1291,12 @@ Dbtup::updateBitsNotNULL(Uint32* inBuffer,
...
@@ -1293,12 +1291,12 @@ Dbtup::updateBitsNotNULL(Uint32* inBuffer,
req_struct
->
in_buf_index
=
newIndex
;
req_struct
->
in_buf_index
=
newIndex
;
return
true
;
return
true
;
}
else
{
}
else
{
l
jam
();
jam
();
terrorCode
=
ZNOT_NULL_ATTR
;
terrorCode
=
ZNOT_NULL_ATTR
;
return
false
;
return
false
;
}
//if
}
//if
}
else
{
}
else
{
l
jam
();
jam
();
terrorCode
=
ZAI_INCONSISTENCY_ERROR
;
terrorCode
=
ZAI_INCONSISTENCY_ERROR
;
return
false
;
return
false
;
}
//if
}
//if
...
@@ -1331,13 +1329,13 @@ Dbtup::updateBitsNULLable(Uint32* inBuffer,
...
@@ -1331,13 +1329,13 @@ Dbtup::updateBitsNULLable(Uint32* inBuffer,
Uint32
newIndex
=
indexBuf
+
1
;
Uint32
newIndex
=
indexBuf
+
1
;
if
(
newIndex
<=
req_struct
->
in_buf_len
)
if
(
newIndex
<=
req_struct
->
in_buf_len
)
{
{
l
jam
();
jam
();
BitmaskImpl
::
set
(
regTabPtr
->
m_offsets
[
MM
].
m_null_words
,
bits
,
pos
);
BitmaskImpl
::
set
(
regTabPtr
->
m_offsets
[
MM
].
m_null_words
,
bits
,
pos
);
req_struct
->
in_buf_index
=
newIndex
;
req_struct
->
in_buf_index
=
newIndex
;
return
true
;
return
true
;
}
else
{
}
else
{
l
jam
();
jam
();
terrorCode
=
ZAI_INCONSISTENCY_ERROR
;
terrorCode
=
ZAI_INCONSISTENCY_ERROR
;
return
false
;
return
false
;
}
//if
}
//if
...
@@ -1364,9 +1362,9 @@ Dbtup::updateDiskFixedSizeNotNULL(Uint32* inBuffer,
...
@@ -1364,9 +1362,9 @@ Dbtup::updateDiskFixedSizeNotNULL(Uint32* inBuffer,
if
(
newIndex
<=
inBufLen
)
{
if
(
newIndex
<=
inBufLen
)
{
if
(
!
nullIndicator
)
{
if
(
!
nullIndicator
)
{
l
jam
();
jam
();
if
(
charsetFlag
)
{
if
(
charsetFlag
)
{
l
jam
();
jam
();
Tablerec
*
regTabPtr
=
tabptr
.
p
;
Tablerec
*
regTabPtr
=
tabptr
.
p
;
Uint32
typeId
=
AttributeDescriptor
::
getType
(
attrDescriptor
);
Uint32
typeId
=
AttributeDescriptor
::
getType
(
attrDescriptor
);
Uint32
bytes
=
AttributeDescriptor
::
getSizeInBytes
(
attrDescriptor
);
Uint32
bytes
=
AttributeDescriptor
::
getSizeInBytes
(
attrDescriptor
);
...
@@ -1378,14 +1376,14 @@ Dbtup::updateDiskFixedSizeNotNULL(Uint32* inBuffer,
...
@@ -1378,14 +1376,14 @@ Dbtup::updateDiskFixedSizeNotNULL(Uint32* inBuffer,
const
char
*
ssrc
=
(
const
char
*
)
&
inBuffer
[
indexBuf
+
1
];
const
char
*
ssrc
=
(
const
char
*
)
&
inBuffer
[
indexBuf
+
1
];
Uint32
lb
,
len
;
Uint32
lb
,
len
;
if
(
!
NdbSqlUtil
::
get_var_length
(
typeId
,
ssrc
,
bytes
,
lb
,
len
))
{
if
(
!
NdbSqlUtil
::
get_var_length
(
typeId
,
ssrc
,
bytes
,
lb
,
len
))
{
l
jam
();
jam
();
terrorCode
=
ZINVALID_CHAR_FORMAT
;
terrorCode
=
ZINVALID_CHAR_FORMAT
;
return
false
;
return
false
;
}
}
// fast fix bug#7340
// fast fix bug#7340
if
(
typeId
!=
NDB_TYPE_TEXT
&&
if
(
typeId
!=
NDB_TYPE_TEXT
&&
(
*
cs
->
cset
->
well_formed_len
)(
cs
,
ssrc
+
lb
,
ssrc
+
lb
+
len
,
ZNIL
,
&
not_used
)
!=
len
)
{
(
*
cs
->
cset
->
well_formed_len
)(
cs
,
ssrc
+
lb
,
ssrc
+
lb
+
len
,
ZNIL
,
&
not_used
)
!=
len
)
{
l
jam
();
jam
();
terrorCode
=
ZINVALID_CHAR_FORMAT
;
terrorCode
=
ZINVALID_CHAR_FORMAT
;
return
false
;
return
false
;
}
}
...
@@ -1396,12 +1394,12 @@ Dbtup::updateDiskFixedSizeNotNULL(Uint32* inBuffer,
...
@@ -1396,12 +1394,12 @@ Dbtup::updateDiskFixedSizeNotNULL(Uint32* inBuffer,
noOfWords
);
noOfWords
);
return
true
;
return
true
;
}
else
{
}
else
{
l
jam
();
jam
();
terrorCode
=
ZNOT_NULL_ATTR
;
terrorCode
=
ZNOT_NULL_ATTR
;
return
false
;
return
false
;
}
}
}
else
{
}
else
{
l
jam
();
jam
();
terrorCode
=
ZAI_INCONSISTENCY_ERROR
;
terrorCode
=
ZAI_INCONSISTENCY_ERROR
;
return
false
;
return
false
;
}
}
...
@@ -1419,7 +1417,7 @@ Dbtup::updateDiskFixedSizeNULLable(Uint32* inBuffer,
...
@@ -1419,7 +1417,7 @@ Dbtup::updateDiskFixedSizeNULLable(Uint32* inBuffer,
Uint32
*
bits
=
req_struct
->
m_disk_ptr
->
get_null_bits
(
regTabPtr
,
DD
);
Uint32
*
bits
=
req_struct
->
m_disk_ptr
->
get_null_bits
(
regTabPtr
,
DD
);
if
(
!
nullIndicator
)
{
if
(
!
nullIndicator
)
{
l
jam
();
jam
();
BitmaskImpl
::
clear
(
regTabPtr
->
m_offsets
[
DD
].
m_null_words
,
bits
,
pos
);
BitmaskImpl
::
clear
(
regTabPtr
->
m_offsets
[
DD
].
m_null_words
,
bits
,
pos
);
return
updateDiskFixedSizeNotNULL
(
inBuffer
,
return
updateDiskFixedSizeNotNULL
(
inBuffer
,
req_struct
,
req_struct
,
...
@@ -1428,11 +1426,11 @@ Dbtup::updateDiskFixedSizeNULLable(Uint32* inBuffer,
...
@@ -1428,11 +1426,11 @@ Dbtup::updateDiskFixedSizeNULLable(Uint32* inBuffer,
Uint32
newIndex
=
req_struct
->
in_buf_index
+
1
;
Uint32
newIndex
=
req_struct
->
in_buf_index
+
1
;
if
(
newIndex
<=
req_struct
->
in_buf_len
)
{
if
(
newIndex
<=
req_struct
->
in_buf_len
)
{
BitmaskImpl
::
set
(
regTabPtr
->
m_offsets
[
DD
].
m_null_words
,
bits
,
pos
);
BitmaskImpl
::
set
(
regTabPtr
->
m_offsets
[
DD
].
m_null_words
,
bits
,
pos
);
l
jam
();
jam
();
req_struct
->
in_buf_index
=
newIndex
;
req_struct
->
in_buf_index
=
newIndex
;
return
true
;
return
true
;
}
else
{
}
else
{
l
jam
();
jam
();
terrorCode
=
ZAI_INCONSISTENCY_ERROR
;
terrorCode
=
ZAI_INCONSISTENCY_ERROR
;
return
false
;
return
false
;
}
}
...
@@ -1466,7 +1464,7 @@ Dbtup::updateDiskVarSizeNotNULL(Uint32* in_buffer,
...
@@ -1466,7 +1464,7 @@ Dbtup::updateDiskVarSizeNotNULL(Uint32* in_buffer,
if
(
new_index
<=
in_buf_len
&&
vsize_in_words
<=
max_var_size
)
{
if
(
new_index
<=
in_buf_len
&&
vsize_in_words
<=
max_var_size
)
{
if
(
!
null_ind
)
{
if
(
!
null_ind
)
{
l
jam
();
jam
();
var_attr_pos
=
vpos_array
[
var_index
];
var_attr_pos
=
vpos_array
[
var_index
];
var_data_start
=
req_struct
->
m_var_data
[
DD
].
m_data_ptr
;
var_data_start
=
req_struct
->
m_var_data
[
DD
].
m_data_ptr
;
vpos_array
[
var_index
+
idx
]
=
var_attr_pos
+
size_in_bytes
;
vpos_array
[
var_index
+
idx
]
=
var_attr_pos
+
size_in_bytes
;
...
@@ -1477,12 +1475,12 @@ Dbtup::updateDiskVarSizeNotNULL(Uint32* in_buffer,
...
@@ -1477,12 +1475,12 @@ Dbtup::updateDiskVarSizeNotNULL(Uint32* in_buffer,
size_in_bytes
);
size_in_bytes
);
return
true
;
return
true
;
}
else
{
}
else
{
l
jam
();
jam
();
terrorCode
=
ZNOT_NULL_ATTR
;
terrorCode
=
ZNOT_NULL_ATTR
;
return
false
;
return
false
;
}
}
}
else
{
}
else
{
l
jam
();
jam
();
terrorCode
=
ZAI_INCONSISTENCY_ERROR
;
terrorCode
=
ZAI_INCONSISTENCY_ERROR
;
return
false
;
return
false
;
}
}
...
@@ -1502,7 +1500,7 @@ Dbtup::updateDiskVarSizeNULLable(Uint32* inBuffer,
...
@@ -1502,7 +1500,7 @@ Dbtup::updateDiskVarSizeNULLable(Uint32* inBuffer,
Uint32
idx
=
req_struct
->
m_var_data
[
DD
].
m_var_len_offset
;
Uint32
idx
=
req_struct
->
m_var_data
[
DD
].
m_var_len_offset
;
if
(
!
nullIndicator
)
{
if
(
!
nullIndicator
)
{
l
jam
();
jam
();
BitmaskImpl
::
clear
(
regTabPtr
->
m_offsets
[
DD
].
m_null_words
,
bits
,
pos
);
BitmaskImpl
::
clear
(
regTabPtr
->
m_offsets
[
DD
].
m_null_words
,
bits
,
pos
);
return
updateDiskVarSizeNotNULL
(
inBuffer
,
return
updateDiskVarSizeNotNULL
(
inBuffer
,
req_struct
,
req_struct
,
...
@@ -1512,13 +1510,13 @@ Dbtup::updateDiskVarSizeNULLable(Uint32* inBuffer,
...
@@ -1512,13 +1510,13 @@ Dbtup::updateDiskVarSizeNULLable(Uint32* inBuffer,
Uint32
var_index
=
AttributeOffset
::
getOffset
(
attrDes2
);
Uint32
var_index
=
AttributeOffset
::
getOffset
(
attrDes2
);
Uint32
var_pos
=
req_struct
->
var_pos_array
[
var_index
];
Uint32
var_pos
=
req_struct
->
var_pos_array
[
var_index
];
if
(
newIndex
<=
req_struct
->
in_buf_len
)
{
if
(
newIndex
<=
req_struct
->
in_buf_len
)
{
l
jam
();
jam
();
BitmaskImpl
::
set
(
regTabPtr
->
m_offsets
[
DD
].
m_null_words
,
bits
,
pos
);
BitmaskImpl
::
set
(
regTabPtr
->
m_offsets
[
DD
].
m_null_words
,
bits
,
pos
);
req_struct
->
var_pos_array
[
var_index
+
idx
]
=
var_pos
;
req_struct
->
var_pos_array
[
var_index
+
idx
]
=
var_pos
;
req_struct
->
in_buf_index
=
newIndex
;
req_struct
->
in_buf_index
=
newIndex
;
return
true
;
return
true
;
}
else
{
}
else
{
l
jam
();
jam
();
terrorCode
=
ZAI_INCONSISTENCY_ERROR
;
terrorCode
=
ZAI_INCONSISTENCY_ERROR
;
return
false
;
return
false
;
}
}
...
@@ -1540,7 +1538,7 @@ Dbtup::readDiskBitsNotNULL(Uint32* outBuffer,
...
@@ -1540,7 +1538,7 @@ Dbtup::readDiskBitsNotNULL(Uint32* outBuffer,
Uint32
maxRead
=
req_struct
->
max_read
;
Uint32
maxRead
=
req_struct
->
max_read
;
Uint32
*
bits
=
req_struct
->
m_disk_ptr
->
get_null_bits
(
regTabPtr
,
DD
);
Uint32
*
bits
=
req_struct
->
m_disk_ptr
->
get_null_bits
(
regTabPtr
,
DD
);
if
(
newIndexBuf
<=
maxRead
)
{
if
(
newIndexBuf
<=
maxRead
)
{
l
jam
();
jam
();
ahOut
->
setDataSize
((
bitCount
+
31
)
>>
5
);
ahOut
->
setDataSize
((
bitCount
+
31
)
>>
5
);
req_struct
->
out_buf_index
=
newIndexBuf
;
req_struct
->
out_buf_index
=
newIndexBuf
;
...
@@ -1549,7 +1547,7 @@ Dbtup::readDiskBitsNotNULL(Uint32* outBuffer,
...
@@ -1549,7 +1547,7 @@ Dbtup::readDiskBitsNotNULL(Uint32* outBuffer,
return
true
;
return
true
;
}
else
{
}
else
{
l
jam
();
jam
();
terrorCode
=
ZTRY_TO_READ_TOO_MUCH_ERROR
;
terrorCode
=
ZTRY_TO_READ_TOO_MUCH_ERROR
;
return
false
;
return
false
;
}
//if
}
//if
...
@@ -1573,20 +1571,20 @@ Dbtup::readDiskBitsNULLable(Uint32* outBuffer,
...
@@ -1573,20 +1571,20 @@ Dbtup::readDiskBitsNULLable(Uint32* outBuffer,
if
(
BitmaskImpl
::
get
(
regTabPtr
->
m_offsets
[
DD
].
m_null_words
,
bits
,
pos
))
if
(
BitmaskImpl
::
get
(
regTabPtr
->
m_offsets
[
DD
].
m_null_words
,
bits
,
pos
))
{
{
l
jam
();
jam
();
ahOut
->
setNULL
();
ahOut
->
setNULL
();
return
true
;
return
true
;
}
}
if
(
newIndexBuf
<=
maxRead
)
{
if
(
newIndexBuf
<=
maxRead
)
{
l
jam
();
jam
();
ahOut
->
setDataSize
((
bitCount
+
31
)
>>
5
);
ahOut
->
setDataSize
((
bitCount
+
31
)
>>
5
);
req_struct
->
out_buf_index
=
newIndexBuf
;
req_struct
->
out_buf_index
=
newIndexBuf
;
BitmaskImpl
::
getField
(
regTabPtr
->
m_offsets
[
DD
].
m_null_words
,
bits
,
pos
+
1
,
BitmaskImpl
::
getField
(
regTabPtr
->
m_offsets
[
DD
].
m_null_words
,
bits
,
pos
+
1
,
bitCount
,
outBuffer
+
indexBuf
);
bitCount
,
outBuffer
+
indexBuf
);
return
true
;
return
true
;
}
else
{
}
else
{
l
jam
();
jam
();
terrorCode
=
ZTRY_TO_READ_TOO_MUCH_ERROR
;
terrorCode
=
ZTRY_TO_READ_TOO_MUCH_ERROR
;
return
false
;
return
false
;
}
//if
}
//if
...
@@ -1615,12 +1613,12 @@ Dbtup::updateDiskBitsNotNULL(Uint32* inBuffer,
...
@@ -1615,12 +1613,12 @@ Dbtup::updateDiskBitsNotNULL(Uint32* inBuffer,
req_struct
->
in_buf_index
=
newIndex
;
req_struct
->
in_buf_index
=
newIndex
;
return
true
;
return
true
;
}
else
{
}
else
{
l
jam
();
jam
();
terrorCode
=
ZNOT_NULL_ATTR
;
terrorCode
=
ZNOT_NULL_ATTR
;
return
false
;
return
false
;
}
//if
}
//if
}
else
{
}
else
{
l
jam
();
jam
();
terrorCode
=
ZAI_INCONSISTENCY_ERROR
;
terrorCode
=
ZAI_INCONSISTENCY_ERROR
;
return
false
;
return
false
;
}
//if
}
//if
...
@@ -1653,13 +1651,13 @@ Dbtup::updateDiskBitsNULLable(Uint32* inBuffer,
...
@@ -1653,13 +1651,13 @@ Dbtup::updateDiskBitsNULLable(Uint32* inBuffer,
Uint32
newIndex
=
indexBuf
+
1
;
Uint32
newIndex
=
indexBuf
+
1
;
if
(
newIndex
<=
req_struct
->
in_buf_len
)
if
(
newIndex
<=
req_struct
->
in_buf_len
)
{
{
l
jam
();
jam
();
BitmaskImpl
::
set
(
regTabPtr
->
m_offsets
[
DD
].
m_null_words
,
bits
,
pos
);
BitmaskImpl
::
set
(
regTabPtr
->
m_offsets
[
DD
].
m_null_words
,
bits
,
pos
);
req_struct
->
in_buf_index
=
newIndex
;
req_struct
->
in_buf_index
=
newIndex
;
return
true
;
return
true
;
}
else
{
}
else
{
l
jam
();
jam
();
terrorCode
=
ZAI_INCONSISTENCY_ERROR
;
terrorCode
=
ZAI_INCONSISTENCY_ERROR
;
return
false
;
return
false
;
}
//if
}
//if
...
...
storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp
View file @
9fb5e5d0
...
@@ -14,6 +14,7 @@
...
@@ -14,6 +14,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C
#define DBTUP_C
#define DBTUP_SCAN_CPP
#include "Dbtup.hpp"
#include "Dbtup.hpp"
#include <signaldata/AccScan.hpp>
#include <signaldata/AccScan.hpp>
#include <signaldata/NextScan.hpp>
#include <signaldata/NextScan.hpp>
...
...
storage/ndb/src/kernel/blocks/dbtup/DbtupStoredProcDef.cpp
View file @
9fb5e5d0
...
@@ -15,14 +15,12 @@
...
@@ -15,14 +15,12 @@
#define DBTUP_C
#define DBTUP_C
#define DBTUP_STORE_PROC_DEF_CPP
#include "Dbtup.hpp"
#include "Dbtup.hpp"
#include <RefConvert.hpp>
#include <RefConvert.hpp>
#include <ndb_limits.h>
#include <ndb_limits.h>
#include <pc.hpp>
#include <pc.hpp>
#define ljam() { jamLine(18000 + __LINE__); }
#define ljamEntry() { jamEntryLine(18000 + __LINE__); }
/* ---------------------------------------------------------------- */
/* ---------------------------------------------------------------- */
/* ---------------------------------------------------------------- */
/* ---------------------------------------------------------------- */
/* ------------ADD/DROP STORED PROCEDURE MODULE ------------------- */
/* ------------ADD/DROP STORED PROCEDURE MODULE ------------------- */
...
@@ -32,7 +30,7 @@ void Dbtup::execSTORED_PROCREQ(Signal* signal)
...
@@ -32,7 +30,7 @@ void Dbtup::execSTORED_PROCREQ(Signal* signal)
{
{
OperationrecPtr
regOperPtr
;
OperationrecPtr
regOperPtr
;
TablerecPtr
regTabPtr
;
TablerecPtr
regTabPtr
;
l
jamEntry
();
jamEntry
();
regOperPtr
.
i
=
signal
->
theData
[
0
];
regOperPtr
.
i
=
signal
->
theData
[
0
];
c_operation_pool
.
getPtr
(
regOperPtr
);
c_operation_pool
.
getPtr
(
regOperPtr
);
regTabPtr
.
i
=
signal
->
theData
[
1
];
regTabPtr
.
i
=
signal
->
theData
[
1
];
...
@@ -46,17 +44,17 @@ void Dbtup::execSTORED_PROCREQ(Signal* signal)
...
@@ -46,17 +44,17 @@ void Dbtup::execSTORED_PROCREQ(Signal* signal)
ndbrequire
(
regTabPtr
.
p
->
tableStatus
==
DEFINED
);
ndbrequire
(
regTabPtr
.
p
->
tableStatus
==
DEFINED
);
switch
(
requestInfo
)
{
switch
(
requestInfo
)
{
case
ZSCAN_PROCEDURE
:
case
ZSCAN_PROCEDURE
:
l
jam
();
jam
();
scanProcedure
(
signal
,
scanProcedure
(
signal
,
regOperPtr
.
p
,
regOperPtr
.
p
,
signal
->
theData
[
4
]);
signal
->
theData
[
4
]);
break
;
break
;
case
ZCOPY_PROCEDURE
:
case
ZCOPY_PROCEDURE
:
l
jam
();
jam
();
copyProcedure
(
signal
,
regTabPtr
,
regOperPtr
.
p
);
copyProcedure
(
signal
,
regTabPtr
,
regOperPtr
.
p
);
break
;
break
;
case
ZSTORED_PROCEDURE_DELETE
:
case
ZSTORED_PROCEDURE_DELETE
:
l
jam
();
jam
();
deleteScanProcedure
(
signal
,
regOperPtr
.
p
);
deleteScanProcedure
(
signal
,
regOperPtr
.
p
);
break
;
break
;
default:
default:
...
@@ -124,14 +122,14 @@ void Dbtup::copyProcedure(Signal* signal,
...
@@ -124,14 +122,14 @@ void Dbtup::copyProcedure(Signal* signal,
AttributeHeader
::
init
(
&
signal
->
theData
[
length
+
1
],
Ti
,
0
);
AttributeHeader
::
init
(
&
signal
->
theData
[
length
+
1
],
Ti
,
0
);
length
++
;
length
++
;
if
(
length
==
24
)
{
if
(
length
==
24
)
{
l
jam
();
jam
();
ndbrequire
(
storedProcedureAttrInfo
(
signal
,
regOperPtr
,
ndbrequire
(
storedProcedureAttrInfo
(
signal
,
regOperPtr
,
signal
->
theData
+
1
,
length
,
true
));
signal
->
theData
+
1
,
length
,
true
));
length
=
0
;
length
=
0
;
}
//if
}
//if
}
//for
}
//for
if
(
length
!=
0
)
{
if
(
length
!=
0
)
{
l
jam
();
jam
();
ndbrequire
(
storedProcedureAttrInfo
(
signal
,
regOperPtr
,
ndbrequire
(
storedProcedureAttrInfo
(
signal
,
regOperPtr
,
signal
->
theData
+
1
,
length
,
true
));
signal
->
theData
+
1
,
length
,
true
));
}
//if
}
//if
...
@@ -155,7 +153,7 @@ bool Dbtup::storedProcedureAttrInfo(Signal* signal,
...
@@ -155,7 +153,7 @@ bool Dbtup::storedProcedureAttrInfo(Signal* signal,
ndbrequire
(
regOperPtr
->
currentAttrinbufLen
<=
regOperPtr
->
attrinbufLen
);
ndbrequire
(
regOperPtr
->
currentAttrinbufLen
<=
regOperPtr
->
attrinbufLen
);
if
((
RnoFree
>
MIN_ATTRBUF
)
||
if
((
RnoFree
>
MIN_ATTRBUF
)
||
(
copyProcedure
))
{
(
copyProcedure
))
{
l
jam
();
jam
();
regAttrPtr
.
i
=
cfirstfreeAttrbufrec
;
regAttrPtr
.
i
=
cfirstfreeAttrbufrec
;
ptrCheckGuard
(
regAttrPtr
,
cnoOfAttrbufrec
,
attrbufrec
);
ptrCheckGuard
(
regAttrPtr
,
cnoOfAttrbufrec
,
attrbufrec
);
regAttrPtr
.
p
->
attrbuf
[
ZBUF_DATA_LEN
]
=
0
;
regAttrPtr
.
p
->
attrbuf
[
ZBUF_DATA_LEN
]
=
0
;
...
@@ -163,18 +161,18 @@ bool Dbtup::storedProcedureAttrInfo(Signal* signal,
...
@@ -163,18 +161,18 @@ bool Dbtup::storedProcedureAttrInfo(Signal* signal,
cnoFreeAttrbufrec
=
RnoFree
-
1
;
cnoFreeAttrbufrec
=
RnoFree
-
1
;
regAttrPtr
.
p
->
attrbuf
[
ZBUF_NEXT
]
=
RNIL
;
regAttrPtr
.
p
->
attrbuf
[
ZBUF_NEXT
]
=
RNIL
;
}
else
{
}
else
{
l
jam
();
jam
();
storedSeizeAttrinbufrecErrorLab
(
signal
,
regOperPtr
);
storedSeizeAttrinbufrecErrorLab
(
signal
,
regOperPtr
);
return
false
;
return
false
;
}
//if
}
//if
if
(
regOperPtr
->
firstAttrinbufrec
==
RNIL
)
{
if
(
regOperPtr
->
firstAttrinbufrec
==
RNIL
)
{
l
jam
();
jam
();
regOperPtr
->
firstAttrinbufrec
=
regAttrPtr
.
i
;
regOperPtr
->
firstAttrinbufrec
=
regAttrPtr
.
i
;
}
//if
}
//if
regAttrPtr
.
p
->
attrbuf
[
ZBUF_NEXT
]
=
RNIL
;
regAttrPtr
.
p
->
attrbuf
[
ZBUF_NEXT
]
=
RNIL
;
if
(
regOperPtr
->
lastAttrinbufrec
!=
RNIL
)
{
if
(
regOperPtr
->
lastAttrinbufrec
!=
RNIL
)
{
AttrbufrecPtr
tempAttrinbufptr
;
AttrbufrecPtr
tempAttrinbufptr
;
l
jam
();
jam
();
tempAttrinbufptr
.
i
=
regOperPtr
->
lastAttrinbufrec
;
tempAttrinbufptr
.
i
=
regOperPtr
->
lastAttrinbufrec
;
ptrCheckGuard
(
tempAttrinbufptr
,
cnoOfAttrbufrec
,
attrbufrec
);
ptrCheckGuard
(
tempAttrinbufptr
,
cnoOfAttrbufrec
,
attrbufrec
);
tempAttrinbufptr
.
p
->
attrbuf
[
ZBUF_NEXT
]
=
regAttrPtr
.
i
;
tempAttrinbufptr
.
p
->
attrbuf
[
ZBUF_NEXT
]
=
regAttrPtr
.
i
;
...
@@ -187,7 +185,7 @@ bool Dbtup::storedProcedureAttrInfo(Signal* signal,
...
@@ -187,7 +185,7 @@ bool Dbtup::storedProcedureAttrInfo(Signal* signal,
length
);
length
);
if
(
regOperPtr
->
currentAttrinbufLen
<
regOperPtr
->
attrinbufLen
)
{
if
(
regOperPtr
->
currentAttrinbufLen
<
regOperPtr
->
attrinbufLen
)
{
l
jam
();
jam
();
return
true
;
return
true
;
}
//if
}
//if
if
(
ERROR_INSERTED
(
4005
)
&&
!
copyProcedure
)
{
if
(
ERROR_INSERTED
(
4005
)
&&
!
copyProcedure
)
{
...
...
storage/ndb/src/kernel/blocks/dbtup/DbtupTabDesMan.cpp
View file @
9fb5e5d0
...
@@ -15,14 +15,12 @@
...
@@ -15,14 +15,12 @@
#define DBTUP_C
#define DBTUP_C
#define DBTUP_TAB_DES_MAN_CPP
#include "Dbtup.hpp"
#include "Dbtup.hpp"
#include <RefConvert.hpp>
#include <RefConvert.hpp>
#include <ndb_limits.h>
#include <ndb_limits.h>
#include <pc.hpp>
#include <pc.hpp>
#define ljam() { jamLine(22000 + __LINE__); }
#define ljamEntry() { jamEntryLine(22000 + __LINE__); }
/*
/*
* TABLE DESCRIPTOR MEMORY MANAGER
* TABLE DESCRIPTOR MEMORY MANAGER
*
*
...
@@ -65,30 +63,30 @@ Uint32 Dbtup::allocTabDescr(const Tablerec* regTabPtr, Uint32* offset)
...
@@ -65,30 +63,30 @@ Uint32 Dbtup::allocTabDescr(const Tablerec* regTabPtr, Uint32* offset)
allocSize
=
(((
allocSize
-
1
)
>>
4
)
+
1
)
<<
4
;
allocSize
=
(((
allocSize
-
1
)
>>
4
)
+
1
)
<<
4
;
Uint32
list
=
nextHigherTwoLog
(
allocSize
-
1
);
/* CALCULATE WHICH LIST IT BELONGS TO */
Uint32
list
=
nextHigherTwoLog
(
allocSize
-
1
);
/* CALCULATE WHICH LIST IT BELONGS TO */
for
(
Uint32
i
=
list
;
i
<
16
;
i
++
)
{
for
(
Uint32
i
=
list
;
i
<
16
;
i
++
)
{
l
jam
();
jam
();
if
(
cfreeTdList
[
i
]
!=
RNIL
)
{
if
(
cfreeTdList
[
i
]
!=
RNIL
)
{
l
jam
();
jam
();
reference
=
cfreeTdList
[
i
];
reference
=
cfreeTdList
[
i
];
removeTdArea
(
reference
,
i
);
/* REMOVE THE AREA FROM THE FREELIST */
removeTdArea
(
reference
,
i
);
/* REMOVE THE AREA FROM THE FREELIST */
Uint32
retNo
=
(
1
<<
i
)
-
allocSize
;
/* CALCULATE THE DIFFERENCE */
Uint32
retNo
=
(
1
<<
i
)
-
allocSize
;
/* CALCULATE THE DIFFERENCE */
if
(
retNo
>=
ZTD_FREE_SIZE
)
{
if
(
retNo
>=
ZTD_FREE_SIZE
)
{
l
jam
();
jam
();
// return unused words, of course without attempting left merge
// return unused words, of course without attempting left merge
Uint32
retRef
=
reference
+
allocSize
;
Uint32
retRef
=
reference
+
allocSize
;
freeTabDescr
(
retRef
,
retNo
,
false
);
freeTabDescr
(
retRef
,
retNo
,
false
);
}
else
{
}
else
{
l
jam
();
jam
();
allocSize
=
1
<<
i
;
allocSize
=
1
<<
i
;
}
//if
}
//if
break
;
break
;
}
//if
}
//if
}
//for
}
//for
if
(
reference
==
RNIL
)
{
if
(
reference
==
RNIL
)
{
l
jam
();
jam
();
terrorCode
=
ZMEM_NOTABDESCR_ERROR
;
terrorCode
=
ZMEM_NOTABDESCR_ERROR
;
return
RNIL
;
return
RNIL
;
}
else
{
}
else
{
l
jam
();
jam
();
setTabDescrWord
((
reference
+
allocSize
)
-
ZTD_TR_TYPE
,
ZTD_TYPE_NORMAL
);
setTabDescrWord
((
reference
+
allocSize
)
-
ZTD_TR_TYPE
,
ZTD_TYPE_NORMAL
);
setTabDescrWord
(
reference
+
ZTD_DATASIZE
,
allocSize
);
setTabDescrWord
(
reference
+
ZTD_DATASIZE
,
allocSize
);
...
@@ -105,7 +103,7 @@ void Dbtup::freeTabDescr(Uint32 retRef, Uint32 retNo, bool normal)
...
@@ -105,7 +103,7 @@ void Dbtup::freeTabDescr(Uint32 retRef, Uint32 retNo, bool normal)
{
{
itdaMergeTabDescr
(
retRef
,
retNo
,
normal
);
/* MERGE WITH POSSIBLE NEIGHBOURS */
itdaMergeTabDescr
(
retRef
,
retNo
,
normal
);
/* MERGE WITH POSSIBLE NEIGHBOURS */
while
(
retNo
>=
ZTD_FREE_SIZE
)
{
while
(
retNo
>=
ZTD_FREE_SIZE
)
{
l
jam
();
jam
();
Uint32
list
=
nextHigherTwoLog
(
retNo
);
Uint32
list
=
nextHigherTwoLog
(
retNo
);
list
--
;
/* RETURN TO NEXT LOWER LIST */
list
--
;
/* RETURN TO NEXT LOWER LIST */
Uint32
sizeOfChunk
=
1
<<
list
;
Uint32
sizeOfChunk
=
1
<<
list
;
...
@@ -136,7 +134,7 @@ void Dbtup::insertTdArea(Uint32 tabDesRef, Uint32 list)
...
@@ -136,7 +134,7 @@ void Dbtup::insertTdArea(Uint32 tabDesRef, Uint32 list)
setTabDescrWord
(
tabDesRef
+
ZTD_FL_HEADER
,
ZTD_TYPE_FREE
);
setTabDescrWord
(
tabDesRef
+
ZTD_FL_HEADER
,
ZTD_TYPE_FREE
);
setTabDescrWord
(
tabDesRef
+
ZTD_FL_NEXT
,
cfreeTdList
[
list
]);
setTabDescrWord
(
tabDesRef
+
ZTD_FL_NEXT
,
cfreeTdList
[
list
]);
if
(
cfreeTdList
[
list
]
!=
RNIL
)
{
if
(
cfreeTdList
[
list
]
!=
RNIL
)
{
l
jam
();
/* PREVIOUSLY EMPTY SLOT */
jam
();
/* PREVIOUSLY EMPTY SLOT */
setTabDescrWord
(
cfreeTdList
[
list
]
+
ZTD_FL_PREV
,
tabDesRef
);
setTabDescrWord
(
cfreeTdList
[
list
]
+
ZTD_FL_PREV
,
tabDesRef
);
}
//if
}
//if
cfreeTdList
[
list
]
=
tabDesRef
;
/* RELINK THE LIST */
cfreeTdList
[
list
]
=
tabDesRef
;
/* RELINK THE LIST */
...
@@ -156,28 +154,28 @@ void Dbtup::itdaMergeTabDescr(Uint32& retRef, Uint32& retNo, bool normal)
...
@@ -156,28 +154,28 @@ void Dbtup::itdaMergeTabDescr(Uint32& retRef, Uint32& retNo, bool normal)
{
{
// merge right
// merge right
while
((
retRef
+
retNo
)
<
cnoOfTabDescrRec
)
{
while
((
retRef
+
retNo
)
<
cnoOfTabDescrRec
)
{
l
jam
();
jam
();
Uint32
tabDesRef
=
retRef
+
retNo
;
Uint32
tabDesRef
=
retRef
+
retNo
;
Uint32
headerWord
=
getTabDescrWord
(
tabDesRef
+
ZTD_FL_HEADER
);
Uint32
headerWord
=
getTabDescrWord
(
tabDesRef
+
ZTD_FL_HEADER
);
if
(
headerWord
==
ZTD_TYPE_FREE
)
{
if
(
headerWord
==
ZTD_TYPE_FREE
)
{
l
jam
();
jam
();
Uint32
sizeOfMergedPart
=
getTabDescrWord
(
tabDesRef
+
ZTD_FL_SIZE
);
Uint32
sizeOfMergedPart
=
getTabDescrWord
(
tabDesRef
+
ZTD_FL_SIZE
);
retNo
+=
sizeOfMergedPart
;
retNo
+=
sizeOfMergedPart
;
Uint32
list
=
nextHigherTwoLog
(
sizeOfMergedPart
-
1
);
Uint32
list
=
nextHigherTwoLog
(
sizeOfMergedPart
-
1
);
removeTdArea
(
tabDesRef
,
list
);
removeTdArea
(
tabDesRef
,
list
);
}
else
{
}
else
{
l
jam
();
jam
();
break
;
break
;
}
}
}
}
// merge left
// merge left
const
bool
mergeLeft
=
normal
;
const
bool
mergeLeft
=
normal
;
while
(
mergeLeft
&&
retRef
>
0
)
{
while
(
mergeLeft
&&
retRef
>
0
)
{
l
jam
();
jam
();
Uint32
trailerWord
=
getTabDescrWord
(
retRef
-
ZTD_TR_TYPE
);
Uint32
trailerWord
=
getTabDescrWord
(
retRef
-
ZTD_TR_TYPE
);
if
(
trailerWord
==
ZTD_TYPE_FREE
)
{
if
(
trailerWord
==
ZTD_TYPE_FREE
)
{
l
jam
();
jam
();
Uint32
sizeOfMergedPart
=
getTabDescrWord
(
retRef
-
ZTD_TR_SIZE
);
Uint32
sizeOfMergedPart
=
getTabDescrWord
(
retRef
-
ZTD_TR_SIZE
);
ndbrequire
(
retRef
>=
sizeOfMergedPart
);
ndbrequire
(
retRef
>=
sizeOfMergedPart
);
retRef
-=
sizeOfMergedPart
;
retRef
-=
sizeOfMergedPart
;
...
@@ -185,7 +183,7 @@ void Dbtup::itdaMergeTabDescr(Uint32& retRef, Uint32& retNo, bool normal)
...
@@ -185,7 +183,7 @@ void Dbtup::itdaMergeTabDescr(Uint32& retRef, Uint32& retNo, bool normal)
Uint32
list
=
nextHigherTwoLog
(
sizeOfMergedPart
-
1
);
Uint32
list
=
nextHigherTwoLog
(
sizeOfMergedPart
-
1
);
removeTdArea
(
retRef
,
list
);
removeTdArea
(
retRef
,
list
);
}
else
{
}
else
{
l
jam
();
jam
();
break
;
break
;
}
}
}
}
...
@@ -213,15 +211,15 @@ void Dbtup::removeTdArea(Uint32 tabDesRef, Uint32 list)
...
@@ -213,15 +211,15 @@ void Dbtup::removeTdArea(Uint32 tabDesRef, Uint32 list)
setTabDescrWord
((
tabDesRef
+
(
1
<<
list
))
-
ZTD_TR_TYPE
,
ZTD_TYPE_NORMAL
);
setTabDescrWord
((
tabDesRef
+
(
1
<<
list
))
-
ZTD_TR_TYPE
,
ZTD_TYPE_NORMAL
);
if
(
tabDesRef
==
cfreeTdList
[
list
])
{
if
(
tabDesRef
==
cfreeTdList
[
list
])
{
l
jam
();
jam
();
cfreeTdList
[
list
]
=
tabDescrNextPtr
;
/* RELINK THE LIST */
cfreeTdList
[
list
]
=
tabDescrNextPtr
;
/* RELINK THE LIST */
}
//if
}
//if
if
(
tabDescrNextPtr
!=
RNIL
)
{
if
(
tabDescrNextPtr
!=
RNIL
)
{
l
jam
();
jam
();
setTabDescrWord
(
tabDescrNextPtr
+
ZTD_FL_PREV
,
tabDescrPrevPtr
);
setTabDescrWord
(
tabDescrNextPtr
+
ZTD_FL_PREV
,
tabDescrPrevPtr
);
}
//if
}
//if
if
(
tabDescrPrevPtr
!=
RNIL
)
{
if
(
tabDescrPrevPtr
!=
RNIL
)
{
l
jam
();
jam
();
setTabDescrWord
(
tabDescrPrevPtr
+
ZTD_FL_NEXT
,
tabDescrNextPtr
);
setTabDescrWord
(
tabDescrPrevPtr
+
ZTD_FL_NEXT
,
tabDescrNextPtr
);
}
//if
}
//if
}
//Dbtup::removeTdArea()
}
//Dbtup::removeTdArea()
...
...
storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp
View file @
9fb5e5d0
...
@@ -15,6 +15,7 @@
...
@@ -15,6 +15,7 @@
#define DBTUP_C
#define DBTUP_C
#define DBTUP_TRIGGER_CPP
#include "Dbtup.hpp"
#include "Dbtup.hpp"
#include <RefConvert.hpp>
#include <RefConvert.hpp>
#include <ndb_limits.h>
#include <ndb_limits.h>
...
@@ -26,9 +27,6 @@
...
@@ -26,9 +27,6 @@
#include <signaldata/CreateTrig.hpp>
#include <signaldata/CreateTrig.hpp>
#include <signaldata/TuxMaint.hpp>
#include <signaldata/TuxMaint.hpp>
#define ljam() { jamLine(7000 + __LINE__); }
#define ljamEntry() { jamEntryLine(7000 + __LINE__); }
/* **************************************************************** */
/* **************************************************************** */
/* ---------------------------------------------------------------- */
/* ---------------------------------------------------------------- */
/* ----------------------- TRIGGER HANDLING ----------------------- */
/* ----------------------- TRIGGER HANDLING ----------------------- */
...
@@ -47,17 +45,17 @@ Dbtup::findTriggerList(Tablerec* table,
...
@@ -47,17 +45,17 @@ Dbtup::findTriggerList(Tablerec* table,
case
TriggerType
:
:
SUBSCRIPTION_BEFORE
:
case
TriggerType
:
:
SUBSCRIPTION_BEFORE
:
switch
(
tevent
)
{
switch
(
tevent
)
{
case
TriggerEvent
:
:
TE_INSERT
:
case
TriggerEvent
:
:
TE_INSERT
:
l
jam
();
jam
();
if
(
ttime
==
TriggerActionTime
::
TA_DETACHED
)
if
(
ttime
==
TriggerActionTime
::
TA_DETACHED
)
tlist
=
&
table
->
subscriptionInsertTriggers
;
tlist
=
&
table
->
subscriptionInsertTriggers
;
break
;
break
;
case
TriggerEvent
:
:
TE_UPDATE
:
case
TriggerEvent
:
:
TE_UPDATE
:
l
jam
();
jam
();
if
(
ttime
==
TriggerActionTime
::
TA_DETACHED
)
if
(
ttime
==
TriggerActionTime
::
TA_DETACHED
)
tlist
=
&
table
->
subscriptionUpdateTriggers
;
tlist
=
&
table
->
subscriptionUpdateTriggers
;
break
;
break
;
case
TriggerEvent
:
:
TE_DELETE
:
case
TriggerEvent
:
:
TE_DELETE
:
l
jam
();
jam
();
if
(
ttime
==
TriggerActionTime
::
TA_DETACHED
)
if
(
ttime
==
TriggerActionTime
::
TA_DETACHED
)
tlist
=
&
table
->
subscriptionDeleteTriggers
;
tlist
=
&
table
->
subscriptionDeleteTriggers
;
break
;
break
;
...
@@ -68,17 +66,17 @@ Dbtup::findTriggerList(Tablerec* table,
...
@@ -68,17 +66,17 @@ Dbtup::findTriggerList(Tablerec* table,
case
TriggerType
:
:
SECONDARY_INDEX
:
case
TriggerType
:
:
SECONDARY_INDEX
:
switch
(
tevent
)
{
switch
(
tevent
)
{
case
TriggerEvent
:
:
TE_INSERT
:
case
TriggerEvent
:
:
TE_INSERT
:
l
jam
();
jam
();
if
(
ttime
==
TriggerActionTime
::
TA_AFTER
)
if
(
ttime
==
TriggerActionTime
::
TA_AFTER
)
tlist
=
&
table
->
afterInsertTriggers
;
tlist
=
&
table
->
afterInsertTriggers
;
break
;
break
;
case
TriggerEvent
:
:
TE_UPDATE
:
case
TriggerEvent
:
:
TE_UPDATE
:
l
jam
();
jam
();
if
(
ttime
==
TriggerActionTime
::
TA_AFTER
)
if
(
ttime
==
TriggerActionTime
::
TA_AFTER
)
tlist
=
&
table
->
afterUpdateTriggers
;
tlist
=
&
table
->
afterUpdateTriggers
;
break
;
break
;
case
TriggerEvent
:
:
TE_DELETE
:
case
TriggerEvent
:
:
TE_DELETE
:
l
jam
();
jam
();
if
(
ttime
==
TriggerActionTime
::
TA_AFTER
)
if
(
ttime
==
TriggerActionTime
::
TA_AFTER
)
tlist
=
&
table
->
afterDeleteTriggers
;
tlist
=
&
table
->
afterDeleteTriggers
;
break
;
break
;
...
@@ -89,7 +87,7 @@ Dbtup::findTriggerList(Tablerec* table,
...
@@ -89,7 +87,7 @@ Dbtup::findTriggerList(Tablerec* table,
case
TriggerType
:
:
ORDERED_INDEX
:
case
TriggerType
:
:
ORDERED_INDEX
:
switch
(
tevent
)
{
switch
(
tevent
)
{
case
TriggerEvent
:
:
TE_CUSTOM
:
case
TriggerEvent
:
:
TE_CUSTOM
:
l
jam
();
jam
();
if
(
ttime
==
TriggerActionTime
::
TA_CUSTOM
)
if
(
ttime
==
TriggerActionTime
::
TA_CUSTOM
)
tlist
=
&
table
->
tuxCustomTriggers
;
tlist
=
&
table
->
tuxCustomTriggers
;
break
;
break
;
...
@@ -100,7 +98,7 @@ Dbtup::findTriggerList(Tablerec* table,
...
@@ -100,7 +98,7 @@ Dbtup::findTriggerList(Tablerec* table,
case
TriggerType
:
:
READ_ONLY_CONSTRAINT
:
case
TriggerType
:
:
READ_ONLY_CONSTRAINT
:
switch
(
tevent
)
{
switch
(
tevent
)
{
case
TriggerEvent
:
:
TE_UPDATE
:
case
TriggerEvent
:
:
TE_UPDATE
:
l
jam
();
jam
();
if
(
ttime
==
TriggerActionTime
::
TA_AFTER
)
if
(
ttime
==
TriggerActionTime
::
TA_AFTER
)
tlist
=
&
table
->
constraintUpdateTriggers
;
tlist
=
&
table
->
constraintUpdateTriggers
;
break
;
break
;
...
@@ -118,7 +116,7 @@ Dbtup::findTriggerList(Tablerec* table,
...
@@ -118,7 +116,7 @@ Dbtup::findTriggerList(Tablerec* table,
void
void
Dbtup
::
execCREATE_TRIG_REQ
(
Signal
*
signal
)
Dbtup
::
execCREATE_TRIG_REQ
(
Signal
*
signal
)
{
{
l
jamEntry
();
jamEntry
();
BlockReference
senderRef
=
signal
->
getSendersBlockRef
();
BlockReference
senderRef
=
signal
->
getSendersBlockRef
();
const
CreateTrigReq
reqCopy
=
*
(
const
CreateTrigReq
*
)
signal
->
getDataPtr
();
const
CreateTrigReq
reqCopy
=
*
(
const
CreateTrigReq
*
)
signal
->
getDataPtr
();
const
CreateTrigReq
*
const
req
=
&
reqCopy
;
const
CreateTrigReq
*
const
req
=
&
reqCopy
;
...
@@ -131,13 +129,13 @@ Dbtup::execCREATE_TRIG_REQ(Signal* signal)
...
@@ -131,13 +129,13 @@ Dbtup::execCREATE_TRIG_REQ(Signal* signal)
if
(
tabPtr
.
p
->
tableStatus
!=
DEFINED
)
if
(
tabPtr
.
p
->
tableStatus
!=
DEFINED
)
{
{
l
jam
();
jam
();
error
=
CreateTrigRef
::
InvalidTable
;
error
=
CreateTrigRef
::
InvalidTable
;
}
}
// Create trigger and associate it with the table
// Create trigger and associate it with the table
else
if
(
createTrigger
(
tabPtr
.
p
,
req
))
else
if
(
createTrigger
(
tabPtr
.
p
,
req
))
{
{
l
jam
();
jam
();
// Send conf
// Send conf
CreateTrigConf
*
const
conf
=
(
CreateTrigConf
*
)
signal
->
getDataPtrSend
();
CreateTrigConf
*
const
conf
=
(
CreateTrigConf
*
)
signal
->
getDataPtrSend
();
conf
->
setUserRef
(
reference
());
conf
->
setUserRef
(
reference
());
...
@@ -153,7 +151,7 @@ Dbtup::execCREATE_TRIG_REQ(Signal* signal)
...
@@ -153,7 +151,7 @@ Dbtup::execCREATE_TRIG_REQ(Signal* signal)
}
}
else
else
{
{
l
jam
();
jam
();
error
=
CreateTrigRef
::
TooManyTriggers
;
error
=
CreateTrigRef
::
TooManyTriggers
;
}
}
ndbassert
(
error
!=
CreateTrigRef
::
NoError
);
ndbassert
(
error
!=
CreateTrigRef
::
NoError
);
...
@@ -174,7 +172,7 @@ Dbtup::execCREATE_TRIG_REQ(Signal* signal)
...
@@ -174,7 +172,7 @@ Dbtup::execCREATE_TRIG_REQ(Signal* signal)
void
void
Dbtup
::
execDROP_TRIG_REQ
(
Signal
*
signal
)
Dbtup
::
execDROP_TRIG_REQ
(
Signal
*
signal
)
{
{
l
jamEntry
();
jamEntry
();
BlockReference
senderRef
=
signal
->
getSendersBlockRef
();
BlockReference
senderRef
=
signal
->
getSendersBlockRef
();
const
DropTrigReq
reqCopy
=
*
(
const
DropTrigReq
*
)
signal
->
getDataPtr
();
const
DropTrigReq
reqCopy
=
*
(
const
DropTrigReq
*
)
signal
->
getDataPtr
();
const
DropTrigReq
*
const
req
=
&
reqCopy
;
const
DropTrigReq
*
const
req
=
&
reqCopy
;
...
@@ -262,7 +260,7 @@ Dbtup::createTrigger(Tablerec* table, const CreateTrigReq* req)
...
@@ -262,7 +260,7 @@ Dbtup::createTrigger(Tablerec* table, const CreateTrigReq* req)
if
((
tptr
.
p
->
triggerType
==
TriggerType
::
SUBSCRIPTION
)
&&
if
((
tptr
.
p
->
triggerType
==
TriggerType
::
SUBSCRIPTION
)
&&
((
tptr
.
p
->
triggerEvent
==
TriggerEvent
::
TE_UPDATE
)
||
((
tptr
.
p
->
triggerEvent
==
TriggerEvent
::
TE_UPDATE
)
||
(
tptr
.
p
->
triggerEvent
==
TriggerEvent
::
TE_DELETE
)))
{
(
tptr
.
p
->
triggerEvent
==
TriggerEvent
::
TE_DELETE
)))
{
l
jam
();
jam
();
tptr
.
p
->
sendBeforeValues
=
false
;
tptr
.
p
->
sendBeforeValues
=
false
;
}
}
/*
/*
...
@@ -270,7 +268,7 @@ Dbtup::createTrigger(Tablerec* table, const CreateTrigReq* req)
...
@@ -270,7 +268,7 @@ Dbtup::createTrigger(Tablerec* table, const CreateTrigReq* req)
if (((tptr.p->triggerType == TriggerType::SUBSCRIPTION) ||
if (((tptr.p->triggerType == TriggerType::SUBSCRIPTION) ||
(tptr.p->triggerType == TriggerType::SUBSCRIPTION_BEFORE)) &&
(tptr.p->triggerType == TriggerType::SUBSCRIPTION_BEFORE)) &&
(tptr.p->triggerEvent == TriggerEvent::TE_UPDATE)) {
(tptr.p->triggerEvent == TriggerEvent::TE_UPDATE)) {
l
jam();
jam();
tptr.p->sendOnlyChangedAttributes = true;
tptr.p->sendOnlyChangedAttributes = true;
}
}
*/
*/
...
@@ -282,16 +280,16 @@ Dbtup::createTrigger(Tablerec* table, const CreateTrigReq* req)
...
@@ -282,16 +280,16 @@ Dbtup::createTrigger(Tablerec* table, const CreateTrigReq* req)
tptr
.
p
->
attributeMask
.
clear
();
tptr
.
p
->
attributeMask
.
clear
();
if
(
tptr
.
p
->
monitorAllAttributes
)
{
if
(
tptr
.
p
->
monitorAllAttributes
)
{
l
jam
();
jam
();
for
(
Uint32
i
=
0
;
i
<
table
->
m_no_of_attributes
;
i
++
)
{
for
(
Uint32
i
=
0
;
i
<
table
->
m_no_of_attributes
;
i
++
)
{
if
(
!
primaryKey
(
table
,
i
))
{
if
(
!
primaryKey
(
table
,
i
))
{
l
jam
();
jam
();
tptr
.
p
->
attributeMask
.
set
(
i
);
tptr
.
p
->
attributeMask
.
set
(
i
);
}
}
}
}
}
else
{
}
else
{
// Set attribute mask
// Set attribute mask
l
jam
();
jam
();
tptr
.
p
->
attributeMask
=
req
->
getAttributeMask
();
tptr
.
p
->
attributeMask
=
req
->
getAttributeMask
();
}
}
return
true
;
return
true
;
...
@@ -336,7 +334,7 @@ Dbtup::dropTrigger(Tablerec* table, const DropTrigReq* req, BlockNumber sender)
...
@@ -336,7 +334,7 @@ Dbtup::dropTrigger(Tablerec* table, const DropTrigReq* req, BlockNumber sender)
Ptr
<
TupTriggerData
>
ptr
;
Ptr
<
TupTriggerData
>
ptr
;
for
(
tlist
->
first
(
ptr
);
!
ptr
.
isNull
();
tlist
->
next
(
ptr
))
{
for
(
tlist
->
first
(
ptr
);
!
ptr
.
isNull
();
tlist
->
next
(
ptr
))
{
l
jam
();
jam
();
if
(
ptr
.
p
->
triggerId
==
triggerId
)
{
if
(
ptr
.
p
->
triggerId
==
triggerId
)
{
if
(
ttype
==
TriggerType
::
SUBSCRIPTION
&&
sender
!=
ptr
.
p
->
m_receiverBlock
)
if
(
ttype
==
TriggerType
::
SUBSCRIPTION
&&
sender
!=
ptr
.
p
->
m_receiverBlock
)
{
{
...
@@ -348,10 +346,10 @@ Dbtup::dropTrigger(Tablerec* table, const DropTrigReq* req, BlockNumber sender)
...
@@ -348,10 +346,10 @@ Dbtup::dropTrigger(Tablerec* table, const DropTrigReq* req, BlockNumber sender)
*
*
* Backup doesn't really care about the Ids though.
* Backup doesn't really care about the Ids though.
*/
*/
l
jam
();
jam
();
continue
;
continue
;
}
}
l
jam
();
jam
();
tlist
->
release
(
ptr
.
i
);
tlist
->
release
(
ptr
.
i
);
return
0
;
return
0
;
}
}
...
@@ -379,7 +377,7 @@ Dbtup::checkImmediateTriggersAfterInsert(KeyReqStruct *req_struct,
...
@@ -379,7 +377,7 @@ Dbtup::checkImmediateTriggersAfterInsert(KeyReqStruct *req_struct,
if
((
regOperPtr
->
op_struct
.
primary_replica
)
&&
if
((
regOperPtr
->
op_struct
.
primary_replica
)
&&
(
!
(
regTablePtr
->
afterInsertTriggers
.
isEmpty
())))
{
(
!
(
regTablePtr
->
afterInsertTriggers
.
isEmpty
())))
{
l
jam
();
jam
();
fireImmediateTriggers
(
req_struct
,
fireImmediateTriggers
(
req_struct
,
regTablePtr
->
afterInsertTriggers
,
regTablePtr
->
afterInsertTriggers
,
regOperPtr
);
regOperPtr
);
...
@@ -397,14 +395,14 @@ Dbtup::checkImmediateTriggersAfterUpdate(KeyReqStruct *req_struct,
...
@@ -397,14 +395,14 @@ Dbtup::checkImmediateTriggersAfterUpdate(KeyReqStruct *req_struct,
if
((
regOperPtr
->
op_struct
.
primary_replica
)
&&
if
((
regOperPtr
->
op_struct
.
primary_replica
)
&&
(
!
(
regTablePtr
->
afterUpdateTriggers
.
isEmpty
())))
{
(
!
(
regTablePtr
->
afterUpdateTriggers
.
isEmpty
())))
{
l
jam
();
jam
();
fireImmediateTriggers
(
req_struct
,
fireImmediateTriggers
(
req_struct
,
regTablePtr
->
afterUpdateTriggers
,
regTablePtr
->
afterUpdateTriggers
,
regOperPtr
);
regOperPtr
);
}
}
if
((
regOperPtr
->
op_struct
.
primary_replica
)
&&
if
((
regOperPtr
->
op_struct
.
primary_replica
)
&&
(
!
(
regTablePtr
->
constraintUpdateTriggers
.
isEmpty
())))
{
(
!
(
regTablePtr
->
constraintUpdateTriggers
.
isEmpty
())))
{
l
jam
();
jam
();
fireImmediateTriggers
(
req_struct
,
fireImmediateTriggers
(
req_struct
,
regTablePtr
->
constraintUpdateTriggers
,
regTablePtr
->
constraintUpdateTriggers
,
regOperPtr
);
regOperPtr
);
...
@@ -422,7 +420,7 @@ Dbtup::checkImmediateTriggersAfterDelete(KeyReqStruct *req_struct,
...
@@ -422,7 +420,7 @@ Dbtup::checkImmediateTriggersAfterDelete(KeyReqStruct *req_struct,
if
((
regOperPtr
->
op_struct
.
primary_replica
)
&&
if
((
regOperPtr
->
op_struct
.
primary_replica
)
&&
(
!
(
regTablePtr
->
afterDeleteTriggers
.
isEmpty
())))
{
(
!
(
regTablePtr
->
afterDeleteTriggers
.
isEmpty
())))
{
l
jam
();
jam
();
executeTriggers
(
req_struct
,
executeTriggers
(
req_struct
,
regTablePtr
->
afterDeleteTriggers
,
regTablePtr
->
afterDeleteTriggers
,
regOperPtr
);
regOperPtr
);
...
@@ -443,7 +441,7 @@ void Dbtup::checkDeferredTriggers(Signal* signal,
...
@@ -443,7 +441,7 @@ void Dbtup::checkDeferredTriggers(Signal* signal,
Operationrec* const regOperPtr,
Operationrec* const regOperPtr,
Tablerec* const regTablePtr)
Tablerec* const regTablePtr)
{
{
l
jam();
jam();
// NYI
// NYI
}//Dbtup::checkDeferredTriggers()
}//Dbtup::checkDeferredTriggers()
#endif
#endif
...
@@ -479,7 +477,7 @@ void Dbtup::checkDetachedTriggers(KeyReqStruct *req_struct,
...
@@ -479,7 +477,7 @@ void Dbtup::checkDetachedTriggers(KeyReqStruct *req_struct,
if
(
save_ptr
->
m_header_bits
&
Tuple_header
::
ALLOC
)
{
if
(
save_ptr
->
m_header_bits
&
Tuple_header
::
ALLOC
)
{
if
(
save_type
==
ZDELETE
)
{
if
(
save_type
==
ZDELETE
)
{
// insert + delete = nothing
// insert + delete = nothing
l
jam
();
jam
();
return
;
return
;
goto
end
;
goto
end
;
}
}
...
@@ -495,10 +493,10 @@ void Dbtup::checkDetachedTriggers(KeyReqStruct *req_struct,
...
@@ -495,10 +493,10 @@ void Dbtup::checkDetachedTriggers(KeyReqStruct *req_struct,
switch
(
regOperPtr
->
op_struct
.
op_type
)
{
switch
(
regOperPtr
->
op_struct
.
op_type
)
{
case
(
ZINSERT
):
case
(
ZINSERT
):
l
jam
();
jam
();
if
(
regTablePtr
->
subscriptionInsertTriggers
.
isEmpty
())
{
if
(
regTablePtr
->
subscriptionInsertTriggers
.
isEmpty
())
{
// Table has no active triggers monitoring inserts at commit
// Table has no active triggers monitoring inserts at commit
l
jam
();
jam
();
goto
end
;
goto
end
;
}
}
...
@@ -508,10 +506,10 @@ void Dbtup::checkDetachedTriggers(KeyReqStruct *req_struct,
...
@@ -508,10 +506,10 @@ void Dbtup::checkDetachedTriggers(KeyReqStruct *req_struct,
regOperPtr
);
regOperPtr
);
break
;
break
;
case
(
ZDELETE
):
case
(
ZDELETE
):
l
jam
();
jam
();
if
(
regTablePtr
->
subscriptionDeleteTriggers
.
isEmpty
())
{
if
(
regTablePtr
->
subscriptionDeleteTriggers
.
isEmpty
())
{
// Table has no active triggers monitoring deletes at commit
// Table has no active triggers monitoring deletes at commit
l
jam
();
jam
();
goto
end
;
goto
end
;
}
}
...
@@ -522,10 +520,10 @@ void Dbtup::checkDetachedTriggers(KeyReqStruct *req_struct,
...
@@ -522,10 +520,10 @@ void Dbtup::checkDetachedTriggers(KeyReqStruct *req_struct,
regOperPtr
);
regOperPtr
);
break
;
break
;
case
(
ZUPDATE
):
case
(
ZUPDATE
):
l
jam
();
jam
();
if
(
regTablePtr
->
subscriptionUpdateTriggers
.
isEmpty
())
{
if
(
regTablePtr
->
subscriptionUpdateTriggers
.
isEmpty
())
{
// Table has no active triggers monitoring updates at commit
// Table has no active triggers monitoring updates at commit
l
jam
();
jam
();
goto
end
;
goto
end
;
}
}
...
@@ -553,10 +551,10 @@ Dbtup::fireImmediateTriggers(KeyReqStruct *req_struct,
...
@@ -553,10 +551,10 @@ Dbtup::fireImmediateTriggers(KeyReqStruct *req_struct,
TriggerPtr
trigPtr
;
TriggerPtr
trigPtr
;
triggerList
.
first
(
trigPtr
);
triggerList
.
first
(
trigPtr
);
while
(
trigPtr
.
i
!=
RNIL
)
{
while
(
trigPtr
.
i
!=
RNIL
)
{
l
jam
();
jam
();
if
(
trigPtr
.
p
->
monitorAllAttributes
||
if
(
trigPtr
.
p
->
monitorAllAttributes
||
trigPtr
.
p
->
attributeMask
.
overlaps
(
req_struct
->
changeMask
))
{
trigPtr
.
p
->
attributeMask
.
overlaps
(
req_struct
->
changeMask
))
{
l
jam
();
jam
();
executeTrigger
(
req_struct
,
executeTrigger
(
req_struct
,
trigPtr
.
p
,
trigPtr
.
p
,
regOperPtr
);
regOperPtr
);
...
@@ -575,10 +573,10 @@ Dbtup::fireDeferredTriggers(Signal* signal,
...
@@ -575,10 +573,10 @@ Dbtup::fireDeferredTriggers(Signal* signal,
TriggerPtr trigPtr;
TriggerPtr trigPtr;
triggerList.first(trigPtr);
triggerList.first(trigPtr);
while (trigPtr.i != RNIL) {
while (trigPtr.i != RNIL) {
l
jam();
jam();
if (trigPtr.p->monitorAllAttributes ||
if (trigPtr.p->monitorAllAttributes ||
trigPtr.p->attributeMask.overlaps(req_struct->changeMask)) {
trigPtr.p->attributeMask.overlaps(req_struct->changeMask)) {
l
jam();
jam();
executeTrigger(req_struct,
executeTrigger(req_struct,
trigPtr,
trigPtr,
regOperPtr);
regOperPtr);
...
@@ -604,12 +602,12 @@ Dbtup::fireDetachedTriggers(KeyReqStruct *req_struct,
...
@@ -604,12 +602,12 @@ Dbtup::fireDetachedTriggers(KeyReqStruct *req_struct,
ndbrequire
(
regOperPtr
->
is_first_operation
());
ndbrequire
(
regOperPtr
->
is_first_operation
());
triggerList
.
first
(
trigPtr
);
triggerList
.
first
(
trigPtr
);
while
(
trigPtr
.
i
!=
RNIL
)
{
while
(
trigPtr
.
i
!=
RNIL
)
{
l
jam
();
jam
();
if
((
trigPtr
.
p
->
monitorReplicas
||
if
((
trigPtr
.
p
->
monitorReplicas
||
regOperPtr
->
op_struct
.
primary_replica
)
&&
regOperPtr
->
op_struct
.
primary_replica
)
&&
(
trigPtr
.
p
->
monitorAllAttributes
||
(
trigPtr
.
p
->
monitorAllAttributes
||
trigPtr
.
p
->
attributeMask
.
overlaps
(
req_struct
->
changeMask
)))
{
trigPtr
.
p
->
attributeMask
.
overlaps
(
req_struct
->
changeMask
)))
{
l
jam
();
jam
();
executeTrigger
(
req_struct
,
executeTrigger
(
req_struct
,
trigPtr
.
p
,
trigPtr
.
p
,
regOperPtr
);
regOperPtr
);
...
@@ -625,7 +623,7 @@ void Dbtup::executeTriggers(KeyReqStruct *req_struct,
...
@@ -625,7 +623,7 @@ void Dbtup::executeTriggers(KeyReqStruct *req_struct,
TriggerPtr
trigPtr
;
TriggerPtr
trigPtr
;
triggerList
.
first
(
trigPtr
);
triggerList
.
first
(
trigPtr
);
while
(
trigPtr
.
i
!=
RNIL
)
{
while
(
trigPtr
.
i
!=
RNIL
)
{
l
jam
();
jam
();
executeTrigger
(
req_struct
,
executeTrigger
(
req_struct
,
trigPtr
.
p
,
trigPtr
.
p
,
regOperPtr
);
regOperPtr
);
...
@@ -675,7 +673,7 @@ void Dbtup::executeTrigger(KeyReqStruct *req_struct,
...
@@ -675,7 +673,7 @@ void Dbtup::executeTrigger(KeyReqStruct *req_struct,
ptrCheckGuard
(
regFragPtr
,
cnoOfFragrec
,
fragrecord
);
ptrCheckGuard
(
regFragPtr
,
cnoOfFragrec
,
fragrecord
);
if
(
ref
==
BACKUP
)
{
if
(
ref
==
BACKUP
)
{
l
jam
();
jam
();
/*
/*
In order for the implementation of BACKUP to work even when changing
In order for the implementation of BACKUP to work even when changing
primaries in the middle of the backup we need to set the trigger on
primaries in the middle of the backup we need to set the trigger on
...
@@ -688,9 +686,9 @@ void Dbtup::executeTrigger(KeyReqStruct *req_struct,
...
@@ -688,9 +686,9 @@ void Dbtup::executeTrigger(KeyReqStruct *req_struct,
signal
->
theData
[
0
]
=
trigPtr
->
triggerId
;
signal
->
theData
[
0
]
=
trigPtr
->
triggerId
;
signal
->
theData
[
1
]
=
regFragPtr
.
p
->
fragmentId
;
signal
->
theData
[
1
]
=
regFragPtr
.
p
->
fragmentId
;
EXECUTE_DIRECT
(
BACKUP
,
GSN_BACKUP_TRIG_REQ
,
signal
,
2
);
EXECUTE_DIRECT
(
BACKUP
,
GSN_BACKUP_TRIG_REQ
,
signal
,
2
);
l
jamEntry
();
jamEntry
();
if
(
signal
->
theData
[
0
]
==
0
)
{
if
(
signal
->
theData
[
0
]
==
0
)
{
l
jam
();
jam
();
return
;
return
;
}
}
}
}
...
@@ -704,7 +702,7 @@ void Dbtup::executeTrigger(KeyReqStruct *req_struct,
...
@@ -704,7 +702,7 @@ void Dbtup::executeTrigger(KeyReqStruct *req_struct,
noAfterWords
,
noAfterWords
,
beforeBuffer
,
beforeBuffer
,
noBeforeWords
))
{
noBeforeWords
))
{
l
jam
();
jam
();
return
;
return
;
}
}
//--------------------------------------------------------------------
//--------------------------------------------------------------------
...
@@ -720,13 +718,13 @@ void Dbtup::executeTrigger(KeyReqStruct *req_struct,
...
@@ -720,13 +718,13 @@ void Dbtup::executeTrigger(KeyReqStruct *req_struct,
switch
(
trigPtr
->
triggerType
)
{
switch
(
trigPtr
->
triggerType
)
{
case
(
TriggerType
:
:
SECONDARY_INDEX
)
:
case
(
TriggerType
:
:
SECONDARY_INDEX
)
:
l
jam
();
jam
();
ref
=
req_struct
->
TC_ref
;
ref
=
req_struct
->
TC_ref
;
executeDirect
=
false
;
executeDirect
=
false
;
break
;
break
;
case
(
TriggerType
:
:
SUBSCRIPTION
)
:
case
(
TriggerType
:
:
SUBSCRIPTION
)
:
case
(
TriggerType
:
:
SUBSCRIPTION_BEFORE
)
:
case
(
TriggerType
:
:
SUBSCRIPTION_BEFORE
)
:
l
jam
();
jam
();
// Since only backup uses subscription triggers we send to backup directly for now
// Since only backup uses subscription triggers we send to backup directly for now
ref
=
trigPtr
->
m_receiverBlock
;
ref
=
trigPtr
->
m_receiverBlock
;
executeDirect
=
true
;
executeDirect
=
true
;
...
@@ -747,22 +745,22 @@ void Dbtup::executeTrigger(KeyReqStruct *req_struct,
...
@@ -747,22 +745,22 @@ void Dbtup::executeTrigger(KeyReqStruct *req_struct,
switch
(
regOperPtr
->
op_struct
.
op_type
)
{
switch
(
regOperPtr
->
op_struct
.
op_type
)
{
case
(
ZINSERT
):
case
(
ZINSERT
):
l
jam
();
jam
();
// Send AttrInfo signals with new attribute values
// Send AttrInfo signals with new attribute values
trigAttrInfo
->
setAttrInfoType
(
TrigAttrInfo
::
AFTER_VALUES
);
trigAttrInfo
->
setAttrInfoType
(
TrigAttrInfo
::
AFTER_VALUES
);
sendTrigAttrInfo
(
signal
,
afterBuffer
,
noAfterWords
,
executeDirect
,
ref
);
sendTrigAttrInfo
(
signal
,
afterBuffer
,
noAfterWords
,
executeDirect
,
ref
);
break
;
break
;
case
(
ZDELETE
):
case
(
ZDELETE
):
if
(
trigPtr
->
sendBeforeValues
)
{
if
(
trigPtr
->
sendBeforeValues
)
{
l
jam
();
jam
();
trigAttrInfo
->
setAttrInfoType
(
TrigAttrInfo
::
BEFORE_VALUES
);
trigAttrInfo
->
setAttrInfoType
(
TrigAttrInfo
::
BEFORE_VALUES
);
sendTrigAttrInfo
(
signal
,
beforeBuffer
,
noBeforeWords
,
executeDirect
,
ref
);
sendTrigAttrInfo
(
signal
,
beforeBuffer
,
noBeforeWords
,
executeDirect
,
ref
);
}
}
break
;
break
;
case
(
ZUPDATE
):
case
(
ZUPDATE
):
l
jam
();
jam
();
if
(
trigPtr
->
sendBeforeValues
)
{
if
(
trigPtr
->
sendBeforeValues
)
{
l
jam
();
jam
();
trigAttrInfo
->
setAttrInfoType
(
TrigAttrInfo
::
BEFORE_VALUES
);
trigAttrInfo
->
setAttrInfoType
(
TrigAttrInfo
::
BEFORE_VALUES
);
sendTrigAttrInfo
(
signal
,
beforeBuffer
,
noBeforeWords
,
executeDirect
,
ref
);
sendTrigAttrInfo
(
signal
,
beforeBuffer
,
noBeforeWords
,
executeDirect
,
ref
);
}
}
...
@@ -788,9 +786,9 @@ Uint32 Dbtup::setAttrIds(Bitmask<MAXNROFATTRIBUTESINWORDS>& attributeMask,
...
@@ -788,9 +786,9 @@ Uint32 Dbtup::setAttrIds(Bitmask<MAXNROFATTRIBUTESINWORDS>& attributeMask,
{
{
Uint32
bufIndx
=
0
;
Uint32
bufIndx
=
0
;
for
(
Uint32
i
=
0
;
i
<
m_no_of_attributesibutes
;
i
++
)
{
for
(
Uint32
i
=
0
;
i
<
m_no_of_attributesibutes
;
i
++
)
{
l
jam
();
jam
();
if
(
attributeMask
.
get
(
i
))
{
if
(
attributeMask
.
get
(
i
))
{
l
jam
();
jam
();
AttributeHeader
::
init
(
&
inBuffer
[
bufIndx
++
],
i
,
0
);
AttributeHeader
::
init
(
&
inBuffer
[
bufIndx
++
],
i
,
0
);
}
}
}
}
...
@@ -858,7 +856,7 @@ bool Dbtup::readTriggerInfo(TupTriggerData* const trigPtr,
...
@@ -858,7 +856,7 @@ bool Dbtup::readTriggerInfo(TupTriggerData* const trigPtr,
Uint32
numAttrsToRead
;
Uint32
numAttrsToRead
;
if
((
regOperPtr
->
op_struct
.
op_type
==
ZUPDATE
)
&&
if
((
regOperPtr
->
op_struct
.
op_type
==
ZUPDATE
)
&&
(
trigPtr
->
sendOnlyChangedAttributes
))
{
(
trigPtr
->
sendOnlyChangedAttributes
))
{
l
jam
();
jam
();
//--------------------------------------------------------------------
//--------------------------------------------------------------------
// Update that sends only changed information
// Update that sends only changed information
//--------------------------------------------------------------------
//--------------------------------------------------------------------
...
@@ -870,13 +868,13 @@ bool Dbtup::readTriggerInfo(TupTriggerData* const trigPtr,
...
@@ -870,13 +868,13 @@ bool Dbtup::readTriggerInfo(TupTriggerData* const trigPtr,
}
else
if
((
regOperPtr
->
op_struct
.
op_type
==
ZDELETE
)
&&
}
else
if
((
regOperPtr
->
op_struct
.
op_type
==
ZDELETE
)
&&
(
!
trigPtr
->
sendBeforeValues
))
{
(
!
trigPtr
->
sendBeforeValues
))
{
l
jam
();
jam
();
//--------------------------------------------------------------------
//--------------------------------------------------------------------
// Delete without sending before values only read Primary Key
// Delete without sending before values only read Primary Key
//--------------------------------------------------------------------
//--------------------------------------------------------------------
return
true
;
return
true
;
}
else
{
}
else
{
l
jam
();
jam
();
//--------------------------------------------------------------------
//--------------------------------------------------------------------
// All others send all attributes that are monitored, except:
// All others send all attributes that are monitored, except:
// Omit unchanged blob inlines on update i.e.
// Omit unchanged blob inlines on update i.e.
...
@@ -898,7 +896,7 @@ bool Dbtup::readTriggerInfo(TupTriggerData* const trigPtr,
...
@@ -898,7 +896,7 @@ bool Dbtup::readTriggerInfo(TupTriggerData* const trigPtr,
//--------------------------------------------------------------------
//--------------------------------------------------------------------
if
(
regOperPtr
->
op_struct
.
op_type
!=
ZDELETE
)
if
(
regOperPtr
->
op_struct
.
op_type
!=
ZDELETE
)
{
{
l
jam
();
jam
();
int
ret
=
readAttributes
(
req_struct
,
int
ret
=
readAttributes
(
req_struct
,
&
readBuffer
[
0
],
&
readBuffer
[
0
],
numAttrsToRead
,
numAttrsToRead
,
...
@@ -908,7 +906,7 @@ bool Dbtup::readTriggerInfo(TupTriggerData* const trigPtr,
...
@@ -908,7 +906,7 @@ bool Dbtup::readTriggerInfo(TupTriggerData* const trigPtr,
ndbrequire
(
ret
!=
-
1
);
ndbrequire
(
ret
!=
-
1
);
noAfterWords
=
ret
;
noAfterWords
=
ret
;
}
else
{
}
else
{
l
jam
();
jam
();
noAfterWords
=
0
;
noAfterWords
=
0
;
}
}
...
@@ -920,7 +918,7 @@ bool Dbtup::readTriggerInfo(TupTriggerData* const trigPtr,
...
@@ -920,7 +918,7 @@ bool Dbtup::readTriggerInfo(TupTriggerData* const trigPtr,
if
((
regOperPtr
->
op_struct
.
op_type
==
ZUPDATE
||
if
((
regOperPtr
->
op_struct
.
op_type
==
ZUPDATE
||
regOperPtr
->
op_struct
.
op_type
==
ZDELETE
)
&&
regOperPtr
->
op_struct
.
op_type
==
ZDELETE
)
&&
(
trigPtr
->
sendBeforeValues
))
{
(
trigPtr
->
sendBeforeValues
))
{
l
jam
();
jam
();
Tuple_header
*
save
=
req_struct
->
m_tuple_ptr
;
Tuple_header
*
save
=
req_struct
->
m_tuple_ptr
;
PagePtr
tmp
;
PagePtr
tmp
;
...
@@ -956,7 +954,7 @@ bool Dbtup::readTriggerInfo(TupTriggerData* const trigPtr,
...
@@ -956,7 +954,7 @@ bool Dbtup::readTriggerInfo(TupTriggerData* const trigPtr,
// Although a trigger was fired it was not necessary since the old
// Although a trigger was fired it was not necessary since the old
// value and the new value was exactly the same
// value and the new value was exactly the same
//--------------------------------------------------------------------
//--------------------------------------------------------------------
l
jam
();
jam
();
//XXX does this work with collations?
//XXX does this work with collations?
return
false
;
return
false
;
}
}
...
@@ -976,21 +974,21 @@ void Dbtup::sendTrigAttrInfo(Signal* signal,
...
@@ -976,21 +974,21 @@ void Dbtup::sendTrigAttrInfo(Signal* signal,
do
{
do
{
sigLen
=
dataLen
-
dataIndex
;
sigLen
=
dataLen
-
dataIndex
;
if
(
sigLen
>
TrigAttrInfo
::
DataLength
)
{
if
(
sigLen
>
TrigAttrInfo
::
DataLength
)
{
l
jam
();
jam
();
sigLen
=
TrigAttrInfo
::
DataLength
;
sigLen
=
TrigAttrInfo
::
DataLength
;
}
}
MEMCOPY_NO_WORDS
(
trigAttrInfo
->
getData
(),
MEMCOPY_NO_WORDS
(
trigAttrInfo
->
getData
(),
data
+
dataIndex
,
data
+
dataIndex
,
sigLen
);
sigLen
);
if
(
executeDirect
)
{
if
(
executeDirect
)
{
l
jam
();
jam
();
EXECUTE_DIRECT
(
receiverReference
,
EXECUTE_DIRECT
(
receiverReference
,
GSN_TRIG_ATTRINFO
,
GSN_TRIG_ATTRINFO
,
signal
,
signal
,
TrigAttrInfo
::
StaticLength
+
sigLen
);
TrigAttrInfo
::
StaticLength
+
sigLen
);
l
jamEntry
();
jamEntry
();
}
else
{
}
else
{
l
jam
();
jam
();
sendSignal
(
receiverReference
,
sendSignal
(
receiverReference
,
GSN_TRIG_ATTRINFO
,
GSN_TRIG_ATTRINFO
,
signal
,
signal
,
...
@@ -1018,15 +1016,15 @@ void Dbtup::sendFireTrigOrd(Signal* signal,
...
@@ -1018,15 +1016,15 @@ void Dbtup::sendFireTrigOrd(Signal* signal,
switch
(
regOperPtr
->
op_struct
.
op_type
)
{
switch
(
regOperPtr
->
op_struct
.
op_type
)
{
case
(
ZINSERT
):
case
(
ZINSERT
):
l
jam
();
jam
();
fireTrigOrd
->
setTriggerEvent
(
TriggerEvent
::
TE_INSERT
);
fireTrigOrd
->
setTriggerEvent
(
TriggerEvent
::
TE_INSERT
);
break
;
break
;
case
(
ZDELETE
):
case
(
ZDELETE
):
l
jam
();
jam
();
fireTrigOrd
->
setTriggerEvent
(
TriggerEvent
::
TE_DELETE
);
fireTrigOrd
->
setTriggerEvent
(
TriggerEvent
::
TE_DELETE
);
break
;
break
;
case
(
ZUPDATE
):
case
(
ZUPDATE
):
l
jam
();
jam
();
fireTrigOrd
->
setTriggerEvent
(
TriggerEvent
::
TE_UPDATE
);
fireTrigOrd
->
setTriggerEvent
(
TriggerEvent
::
TE_UPDATE
);
break
;
break
;
default:
default:
...
@@ -1040,12 +1038,12 @@ void Dbtup::sendFireTrigOrd(Signal* signal,
...
@@ -1040,12 +1038,12 @@ void Dbtup::sendFireTrigOrd(Signal* signal,
switch
(
trigPtr
->
triggerType
)
{
switch
(
trigPtr
->
triggerType
)
{
case
(
TriggerType
:
:
SECONDARY_INDEX
)
:
case
(
TriggerType
:
:
SECONDARY_INDEX
)
:
l
jam
();
jam
();
sendSignal
(
req_struct
->
TC_ref
,
GSN_FIRE_TRIG_ORD
,
sendSignal
(
req_struct
->
TC_ref
,
GSN_FIRE_TRIG_ORD
,
signal
,
FireTrigOrd
::
SignalLength
,
JBB
);
signal
,
FireTrigOrd
::
SignalLength
,
JBB
);
break
;
break
;
case
(
TriggerType
:
:
SUBSCRIPTION_BEFORE
)
:
// Only Suma
case
(
TriggerType
:
:
SUBSCRIPTION_BEFORE
)
:
// Only Suma
l
jam
();
jam
();
// Since only backup uses subscription triggers we
// Since only backup uses subscription triggers we
// send to backup directly for now
// send to backup directly for now
fireTrigOrd
->
setGCI
(
req_struct
->
gci
);
fireTrigOrd
->
setGCI
(
req_struct
->
gci
);
...
@@ -1056,7 +1054,7 @@ void Dbtup::sendFireTrigOrd(Signal* signal,
...
@@ -1056,7 +1054,7 @@ void Dbtup::sendFireTrigOrd(Signal* signal,
FireTrigOrd
::
SignalWithHashValueLength
);
FireTrigOrd
::
SignalWithHashValueLength
);
break
;
break
;
case
(
TriggerType
:
:
SUBSCRIPTION
)
:
case
(
TriggerType
:
:
SUBSCRIPTION
)
:
l
jam
();
jam
();
// Since only backup uses subscription triggers we
// Since only backup uses subscription triggers we
// send to backup directly for now
// send to backup directly for now
fireTrigOrd
->
setGCI
(
req_struct
->
gci
);
fireTrigOrd
->
setGCI
(
req_struct
->
gci
);
...
@@ -1123,7 +1121,7 @@ Dbtup::addTuxEntries(Signal* signal,
...
@@ -1123,7 +1121,7 @@ Dbtup::addTuxEntries(Signal* signal,
Tablerec
*
regTabPtr
)
Tablerec
*
regTabPtr
)
{
{
if
(
ERROR_INSERTED
(
4022
))
{
if
(
ERROR_INSERTED
(
4022
))
{
l
jam
();
jam
();
CLEAR_ERROR_INSERT_VALUE
;
CLEAR_ERROR_INSERT_VALUE
;
terrorCode
=
9999
;
terrorCode
=
9999
;
return
-
1
;
return
-
1
;
...
@@ -1134,12 +1132,12 @@ Dbtup::addTuxEntries(Signal* signal,
...
@@ -1134,12 +1132,12 @@ Dbtup::addTuxEntries(Signal* signal,
Uint32
failPtrI
;
Uint32
failPtrI
;
triggerList
.
first
(
triggerPtr
);
triggerList
.
first
(
triggerPtr
);
while
(
triggerPtr
.
i
!=
RNIL
)
{
while
(
triggerPtr
.
i
!=
RNIL
)
{
l
jam
();
jam
();
req
->
indexId
=
triggerPtr
.
p
->
indexId
;
req
->
indexId
=
triggerPtr
.
p
->
indexId
;
req
->
errorCode
=
RNIL
;
req
->
errorCode
=
RNIL
;
if
(
ERROR_INSERTED
(
4023
)
&&
if
(
ERROR_INSERTED
(
4023
)
&&
!
triggerList
.
hasNext
(
triggerPtr
))
{
!
triggerList
.
hasNext
(
triggerPtr
))
{
l
jam
();
jam
();
CLEAR_ERROR_INSERT_VALUE
;
CLEAR_ERROR_INSERT_VALUE
;
terrorCode
=
9999
;
terrorCode
=
9999
;
failPtrI
=
triggerPtr
.
i
;
failPtrI
=
triggerPtr
.
i
;
...
@@ -1147,9 +1145,9 @@ Dbtup::addTuxEntries(Signal* signal,
...
@@ -1147,9 +1145,9 @@ Dbtup::addTuxEntries(Signal* signal,
}
}
EXECUTE_DIRECT
(
DBTUX
,
GSN_TUX_MAINT_REQ
,
EXECUTE_DIRECT
(
DBTUX
,
GSN_TUX_MAINT_REQ
,
signal
,
TuxMaintReq
::
SignalLength
);
signal
,
TuxMaintReq
::
SignalLength
);
l
jamEntry
();
jamEntry
();
if
(
req
->
errorCode
!=
0
)
{
if
(
req
->
errorCode
!=
0
)
{
l
jam
();
jam
();
terrorCode
=
req
->
errorCode
;
terrorCode
=
req
->
errorCode
;
failPtrI
=
triggerPtr
.
i
;
failPtrI
=
triggerPtr
.
i
;
goto
fail
;
goto
fail
;
...
@@ -1161,12 +1159,12 @@ Dbtup::addTuxEntries(Signal* signal,
...
@@ -1161,12 +1159,12 @@ Dbtup::addTuxEntries(Signal* signal,
req
->
opInfo
=
TuxMaintReq
::
OpRemove
;
req
->
opInfo
=
TuxMaintReq
::
OpRemove
;
triggerList
.
first
(
triggerPtr
);
triggerList
.
first
(
triggerPtr
);
while
(
triggerPtr
.
i
!=
failPtrI
)
{
while
(
triggerPtr
.
i
!=
failPtrI
)
{
l
jam
();
jam
();
req
->
indexId
=
triggerPtr
.
p
->
indexId
;
req
->
indexId
=
triggerPtr
.
p
->
indexId
;
req
->
errorCode
=
RNIL
;
req
->
errorCode
=
RNIL
;
EXECUTE_DIRECT
(
DBTUX
,
GSN_TUX_MAINT_REQ
,
EXECUTE_DIRECT
(
DBTUX
,
GSN_TUX_MAINT_REQ
,
signal
,
TuxMaintReq
::
SignalLength
);
signal
,
TuxMaintReq
::
SignalLength
);
l
jamEntry
();
jamEntry
();
ndbrequire
(
req
->
errorCode
==
0
);
ndbrequire
(
req
->
errorCode
==
0
);
triggerList
.
next
(
triggerPtr
);
triggerList
.
next
(
triggerPtr
);
}
}
...
@@ -1197,15 +1195,15 @@ Dbtup::executeTuxCommitTriggers(Signal* signal,
...
@@ -1197,15 +1195,15 @@ Dbtup::executeTuxCommitTriggers(Signal* signal,
if
(
regOperPtr
->
op_struct
.
op_type
==
ZINSERT
)
{
if
(
regOperPtr
->
op_struct
.
op_type
==
ZINSERT
)
{
if
(
!
regOperPtr
->
op_struct
.
delete_insert_flag
)
if
(
!
regOperPtr
->
op_struct
.
delete_insert_flag
)
return
;
return
;
l
jam
();
jam
();
tupVersion
=
decr_tup_version
(
regOperPtr
->
tupVersion
);
tupVersion
=
decr_tup_version
(
regOperPtr
->
tupVersion
);
}
else
if
(
regOperPtr
->
op_struct
.
op_type
==
ZUPDATE
)
{
}
else
if
(
regOperPtr
->
op_struct
.
op_type
==
ZUPDATE
)
{
l
jam
();
jam
();
tupVersion
=
decr_tup_version
(
regOperPtr
->
tupVersion
);
tupVersion
=
decr_tup_version
(
regOperPtr
->
tupVersion
);
}
else
if
(
regOperPtr
->
op_struct
.
op_type
==
ZDELETE
)
{
}
else
if
(
regOperPtr
->
op_struct
.
op_type
==
ZDELETE
)
{
if
(
regOperPtr
->
op_struct
.
delete_insert_flag
)
if
(
regOperPtr
->
op_struct
.
delete_insert_flag
)
return
;
return
;
l
jam
();
jam
();
tupVersion
=
regOperPtr
->
tupVersion
;
tupVersion
=
regOperPtr
->
tupVersion
;
}
else
{
}
else
{
ndbrequire
(
false
);
ndbrequire
(
false
);
...
@@ -1231,13 +1229,13 @@ Dbtup::executeTuxAbortTriggers(Signal* signal,
...
@@ -1231,13 +1229,13 @@ Dbtup::executeTuxAbortTriggers(Signal* signal,
// get version
// get version
Uint32
tupVersion
;
Uint32
tupVersion
;
if
(
regOperPtr
->
op_struct
.
op_type
==
ZINSERT
)
{
if
(
regOperPtr
->
op_struct
.
op_type
==
ZINSERT
)
{
l
jam
();
jam
();
tupVersion
=
regOperPtr
->
tupVersion
;
tupVersion
=
regOperPtr
->
tupVersion
;
}
else
if
(
regOperPtr
->
op_struct
.
op_type
==
ZUPDATE
)
{
}
else
if
(
regOperPtr
->
op_struct
.
op_type
==
ZUPDATE
)
{
l
jam
();
jam
();
tupVersion
=
regOperPtr
->
tupVersion
;
tupVersion
=
regOperPtr
->
tupVersion
;
}
else
if
(
regOperPtr
->
op_struct
.
op_type
==
ZDELETE
)
{
}
else
if
(
regOperPtr
->
op_struct
.
op_type
==
ZDELETE
)
{
l
jam
();
jam
();
return
;
return
;
}
else
{
}
else
{
ndbrequire
(
false
);
ndbrequire
(
false
);
...
@@ -1262,12 +1260,12 @@ Dbtup::removeTuxEntries(Signal* signal,
...
@@ -1262,12 +1260,12 @@ Dbtup::removeTuxEntries(Signal* signal,
TriggerPtr
triggerPtr
;
TriggerPtr
triggerPtr
;
triggerList
.
first
(
triggerPtr
);
triggerList
.
first
(
triggerPtr
);
while
(
triggerPtr
.
i
!=
RNIL
)
{
while
(
triggerPtr
.
i
!=
RNIL
)
{
l
jam
();
jam
();
req
->
indexId
=
triggerPtr
.
p
->
indexId
;
req
->
indexId
=
triggerPtr
.
p
->
indexId
;
req
->
errorCode
=
RNIL
,
req
->
errorCode
=
RNIL
,
EXECUTE_DIRECT
(
DBTUX
,
GSN_TUX_MAINT_REQ
,
EXECUTE_DIRECT
(
DBTUX
,
GSN_TUX_MAINT_REQ
,
signal
,
TuxMaintReq
::
SignalLength
);
signal
,
TuxMaintReq
::
SignalLength
);
l
jamEntry
();
jamEntry
();
// must succeed
// must succeed
ndbrequire
(
req
->
errorCode
==
0
);
ndbrequire
(
req
->
errorCode
==
0
);
triggerList
.
next
(
triggerPtr
);
triggerList
.
next
(
triggerPtr
);
...
...
storage/ndb/src/kernel/blocks/dbtup/DbtupVarAlloc.cpp
View file @
9fb5e5d0
...
@@ -14,12 +14,9 @@
...
@@ -14,12 +14,9 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C
#define DBTUP_C
#define DBTUP_VAR_ALLOC_CPP
#include "Dbtup.hpp"
#include "Dbtup.hpp"
#define ljam() { jamLine(32000 + __LINE__); }
#define ljamEntry() { jamEntryLine(32000 + __LINE__); }
void
Dbtup
::
init_list_sizes
(
void
)
void
Dbtup
::
init_list_sizes
(
void
)
{
{
c_min_list_size
[
0
]
=
200
;
c_min_list_size
[
0
]
=
200
;
...
@@ -109,9 +106,9 @@ Dbtup::alloc_var_part(Fragrecord* fragPtr,
...
@@ -109,9 +106,9 @@ Dbtup::alloc_var_part(Fragrecord* fragPtr,
PagePtr
pagePtr
;
PagePtr
pagePtr
;
pagePtr
.
i
=
get_alloc_page
(
fragPtr
,
(
alloc_size
+
1
));
pagePtr
.
i
=
get_alloc_page
(
fragPtr
,
(
alloc_size
+
1
));
if
(
pagePtr
.
i
==
RNIL
)
{
if
(
pagePtr
.
i
==
RNIL
)
{
l
jam
();
jam
();
if
((
pagePtr
.
i
=
get_empty_var_page
(
fragPtr
))
==
RNIL
)
{
if
((
pagePtr
.
i
=
get_empty_var_page
(
fragPtr
))
==
RNIL
)
{
l
jam
();
jam
();
return
0
;
return
0
;
}
}
c_page_pool
.
getPtr
(
pagePtr
);
c_page_pool
.
getPtr
(
pagePtr
);
...
@@ -127,7 +124,7 @@ Dbtup::alloc_var_part(Fragrecord* fragPtr,
...
@@ -127,7 +124,7 @@ Dbtup::alloc_var_part(Fragrecord* fragPtr,
pagePtr
.
p
->
page_state
=
ZTH_MM_FREE
;
pagePtr
.
p
->
page_state
=
ZTH_MM_FREE
;
}
else
{
}
else
{
c_page_pool
.
getPtr
(
pagePtr
);
c_page_pool
.
getPtr
(
pagePtr
);
l
jam
();
jam
();
}
}
Uint32
idx
=
((
Var_page
*
)
pagePtr
.
p
)
Uint32
idx
=
((
Var_page
*
)
pagePtr
.
p
)
->
alloc_record
(
alloc_size
,
(
Var_page
*
)
ctemp_page
,
Var_page
::
CHAIN
);
->
alloc_record
(
alloc_size
,
(
Var_page
*
)
ctemp_page
,
Var_page
::
CHAIN
);
...
@@ -178,7 +175,7 @@ void Dbtup::free_var_rec(Fragrecord* fragPtr,
...
@@ -178,7 +175,7 @@ void Dbtup::free_var_rec(Fragrecord* fragPtr,
ndbassert
(
pagePtr
.
p
->
free_space
<=
Var_page
::
DATA_WORDS
);
ndbassert
(
pagePtr
.
p
->
free_space
<=
Var_page
::
DATA_WORDS
);
if
(
pagePtr
.
p
->
free_space
==
Var_page
::
DATA_WORDS
-
1
)
if
(
pagePtr
.
p
->
free_space
==
Var_page
::
DATA_WORDS
-
1
)
{
{
l
jam
();
jam
();
/*
/*
This code could be used when we release pages.
This code could be used when we release pages.
remove_free_page(signal,fragPtr,page_header,page_header->list_index);
remove_free_page(signal,fragPtr,page_header,page_header->list_index);
...
@@ -186,7 +183,7 @@ void Dbtup::free_var_rec(Fragrecord* fragPtr,
...
@@ -186,7 +183,7 @@ void Dbtup::free_var_rec(Fragrecord* fragPtr,
*/
*/
update_free_page_list
(
fragPtr
,
pagePtr
);
update_free_page_list
(
fragPtr
,
pagePtr
);
}
else
{
}
else
{
l
jam
();
jam
();
update_free_page_list
(
fragPtr
,
pagePtr
);
update_free_page_list
(
fragPtr
,
pagePtr
);
}
}
return
;
return
;
...
@@ -260,16 +257,16 @@ Dbtup::get_alloc_page(Fragrecord* fragPtr, Uint32 alloc_size)
...
@@ -260,16 +257,16 @@ Dbtup::get_alloc_page(Fragrecord* fragPtr, Uint32 alloc_size)
start_index
=
calculate_free_list_impl
(
alloc_size
);
start_index
=
calculate_free_list_impl
(
alloc_size
);
if
(
start_index
==
(
MAX_FREE_LIST
-
1
))
{
if
(
start_index
==
(
MAX_FREE_LIST
-
1
))
{
l
jam
();
jam
();
}
else
{
}
else
{
l
jam
();
jam
();
ndbrequire
(
start_index
<
(
MAX_FREE_LIST
-
1
));
ndbrequire
(
start_index
<
(
MAX_FREE_LIST
-
1
));
start_index
++
;
start_index
++
;
}
}
for
(
i
=
start_index
;
i
<
MAX_FREE_LIST
;
i
++
)
{
for
(
i
=
start_index
;
i
<
MAX_FREE_LIST
;
i
++
)
{
l
jam
();
jam
();
if
(
!
fragPtr
->
free_var_page_array
[
i
].
isEmpty
())
{
if
(
!
fragPtr
->
free_var_page_array
[
i
].
isEmpty
())
{
l
jam
();
jam
();
return
fragPtr
->
free_var_page_array
[
i
].
firstItem
;
return
fragPtr
->
free_var_page_array
[
i
].
firstItem
;
}
}
}
}
...
@@ -278,9 +275,9 @@ Dbtup::get_alloc_page(Fragrecord* fragPtr, Uint32 alloc_size)
...
@@ -278,9 +275,9 @@ Dbtup::get_alloc_page(Fragrecord* fragPtr, Uint32 alloc_size)
LocalDLList
<
Page
>
list
(
c_page_pool
,
fragPtr
->
free_var_page_array
[
i
]);
LocalDLList
<
Page
>
list
(
c_page_pool
,
fragPtr
->
free_var_page_array
[
i
]);
for
(
list
.
first
(
pagePtr
);
!
pagePtr
.
isNull
()
&&
loop
<
16
;
)
for
(
list
.
first
(
pagePtr
);
!
pagePtr
.
isNull
()
&&
loop
<
16
;
)
{
{
l
jam
();
jam
();
if
(
pagePtr
.
p
->
free_space
>=
alloc_size
)
{
if
(
pagePtr
.
p
->
free_space
>=
alloc_size
)
{
l
jam
();
jam
();
return
pagePtr
.
i
;
return
pagePtr
.
i
;
}
}
loop
++
;
loop
++
;
...
@@ -347,7 +344,7 @@ void Dbtup::update_free_page_list(Fragrecord* fragPtr,
...
@@ -347,7 +344,7 @@ void Dbtup::update_free_page_list(Fragrecord* fragPtr,
(
free_space
>
c_max_list_size
[
list_index
]))
{
(
free_space
>
c_max_list_size
[
list_index
]))
{
Uint32
new_list_index
=
calculate_free_list_impl
(
free_space
);
Uint32
new_list_index
=
calculate_free_list_impl
(
free_space
);
if
(
list_index
!=
MAX_FREE_LIST
)
{
if
(
list_index
!=
MAX_FREE_LIST
)
{
l
jam
();
jam
();
/*
/*
* Only remove it from its list if it is in a list
* Only remove it from its list if it is in a list
*/
*/
...
@@ -362,11 +359,11 @@ void Dbtup::update_free_page_list(Fragrecord* fragPtr,
...
@@ -362,11 +359,11 @@ void Dbtup::update_free_page_list(Fragrecord* fragPtr,
This can only happen for the free list with least guaranteed
This can only happen for the free list with least guaranteed
free space.
free space.
*/
*/
l
jam
();
jam
();
ndbrequire
(
new_list_index
==
0
);
ndbrequire
(
new_list_index
==
0
);
pagePtr
.
p
->
list_index
=
MAX_FREE_LIST
;
pagePtr
.
p
->
list_index
=
MAX_FREE_LIST
;
}
else
{
}
else
{
l
jam
();
jam
();
LocalDLList
<
Page
>
list
(
c_page_pool
,
LocalDLList
<
Page
>
list
(
c_page_pool
,
fragPtr
->
free_var_page_array
[
new_list_index
]);
fragPtr
->
free_var_page_array
[
new_list_index
]);
list
.
add
(
pagePtr
);
list
.
add
(
pagePtr
);
...
@@ -382,9 +379,9 @@ Uint32 Dbtup::calculate_free_list_impl(Uint32 free_space_size) const
...
@@ -382,9 +379,9 @@ Uint32 Dbtup::calculate_free_list_impl(Uint32 free_space_size) const
{
{
Uint32
i
;
Uint32
i
;
for
(
i
=
0
;
i
<
MAX_FREE_LIST
;
i
++
)
{
for
(
i
=
0
;
i
<
MAX_FREE_LIST
;
i
++
)
{
l
jam
();
jam
();
if
(
free_space_size
<=
c_max_list_size
[
i
])
{
if
(
free_space_size
<=
c_max_list_size
[
i
])
{
l
jam
();
jam
();
return
i
;
return
i
;
}
}
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment