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
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
e063f909
Commit
e063f909
authored
Jun 18, 2004
by
pekka@mysql.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
tux optim 10 - use TUP method to read entry keys
parent
64077103
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
78 additions
and
52 deletions
+78
-52
ndb/src/kernel/blocks/dbtux/Dbtux.hpp
ndb/src/kernel/blocks/dbtux/Dbtux.hpp
+3
-19
ndb/src/kernel/blocks/dbtux/DbtuxCmp.cpp
ndb/src/kernel/blocks/dbtux/DbtuxCmp.cpp
+59
-4
ndb/src/kernel/blocks/dbtux/DbtuxMaint.cpp
ndb/src/kernel/blocks/dbtux/DbtuxMaint.cpp
+3
-6
ndb/src/kernel/blocks/dbtux/DbtuxTree.cpp
ndb/src/kernel/blocks/dbtux/DbtuxTree.cpp
+10
-23
ndb/src/kernel/blocks/dbtux/Times.txt
ndb/src/kernel/blocks/dbtux/Times.txt
+3
-0
No files found.
ndb/src/kernel/blocks/dbtux/Dbtux.hpp
View file @
e063f909
...
...
@@ -564,17 +564,6 @@ private:
ReadPar
();
};
/*
* Tree search for entry.
*/
struct
SearchPar
;
friend
struct
SearchPar
;
struct
SearchPar
{
TableData
m_data
;
// input index key values
TreeEnt
m_ent
;
// input tuple and version
SearchPar
();
};
/*
* Scan bound comparison.
*/
...
...
@@ -641,7 +630,7 @@ private:
/*
* DbtuxTree.cpp
*/
void
treeSearch
(
Signal
*
signal
,
Frag
&
frag
,
SearchPar
searchPar
,
TreePos
&
treePos
);
void
treeSearch
(
Signal
*
signal
,
Frag
&
frag
,
TableData
searchKey
,
TreeEnt
searchEnt
,
TreePos
&
treePos
);
void
treeAdd
(
Signal
*
signal
,
Frag
&
frag
,
TreePos
treePos
,
TreeEnt
ent
);
void
treeRemove
(
Signal
*
signal
,
Frag
&
frag
,
TreePos
treePos
);
void
treeRotateSingle
(
Signal
*
signal
,
Frag
&
frag
,
NodeHandle
&
node
,
unsigned
i
);
...
...
@@ -669,6 +658,7 @@ private:
* DbtuxCmp.cpp
*/
int
cmpSearchKey
(
const
Frag
&
frag
,
unsigned
&
start
,
TableData
data1
,
ConstData
data2
,
unsigned
size2
=
MaxAttrDataSize
);
int
cmpSearchKey
(
const
Frag
&
frag
,
unsigned
&
start
,
TableData
data1
,
TableData
data2
);
int
cmpScanBound
(
const
Frag
&
frag
,
const
BoundPar
boundPar
);
/*
...
...
@@ -1218,13 +1208,6 @@ Dbtux::ReadPar::ReadPar() :
{
}
inline
Dbtux
::
SearchPar
::
SearchPar
()
:
m_data
(
0
),
m_ent
()
{
}
inline
Dbtux
::
BoundPar
::
BoundPar
()
:
m_data1
(
0
),
...
...
@@ -1295,6 +1278,7 @@ Dbtux::readKeyAttrs(const Frag& frag, TreeEnt ent, unsigned start, ConstData key
const
Uint32
tupVersion
=
ent
.
m_tupVersion
;
ndbrequire
(
start
<
frag
.
m_numAttrs
);
const
unsigned
numAttrs
=
frag
.
m_numAttrs
-
start
;
// start applies to both keys and output data
keyAttrs
+=
start
;
keyData
+=
start
;
c_tup
->
tuxReadAttrs
(
tableFragPtrI
,
tupLoc
.
m_pageId
,
tupLoc
.
m_pageOffset
,
tupVersion
,
numAttrs
,
keyAttrs
,
keyData
);
...
...
ndb/src/kernel/blocks/dbtux/DbtuxCmp.cpp
View file @
e063f909
...
...
@@ -18,11 +18,11 @@
#include "Dbtux.hpp"
/*
* Search key vs
tree entry
.
* Search key vs
node prefix
.
*
*
Compare search key and index attribute data. The attribute data may
*
be partial in which case CmpUnknown may be returned. Also counts how
*
many (additional) initial attributes were equal
.
*
The comparison starts at given attribute position (in fact 0). The
*
position is updated by number of equal initial attributes found. The
*
prefix may be partial in which case CmpUnknown may be returned
.
*/
int
Dbtux
::
cmpSearchKey
(
const
Frag
&
frag
,
unsigned
&
start
,
TableData
data1
,
ConstData
data2
,
unsigned
size2
)
...
...
@@ -83,6 +83,61 @@ Dbtux::cmpSearchKey(const Frag& frag, unsigned& start, TableData data1, ConstDat
return
ret
;
}
/*
* Search key vs tree entry.
*
* Start position is updated as in previous routine.
*/
int
Dbtux
::
cmpSearchKey
(
const
Frag
&
frag
,
unsigned
&
start
,
TableData
data1
,
TableData
data2
)
{
const
unsigned
numAttrs
=
frag
.
m_numAttrs
;
const
DescEnt
&
descEnt
=
getDescEnt
(
frag
.
m_descPage
,
frag
.
m_descOff
);
// skip to right position
data1
+=
start
;
data2
+=
start
;
int
ret
=
0
;
while
(
start
<
numAttrs
)
{
if
(
*
data1
!=
0
)
{
if
(
*
data2
!=
0
)
{
jam
();
// current attribute
const
DescAttr
&
descAttr
=
descEnt
.
m_descAttr
[
start
];
const
unsigned
typeId
=
descAttr
.
m_typeId
;
// full data size
const
unsigned
size1
=
AttributeDescriptor
::
getSizeInWords
(
descAttr
.
m_attrDesc
);
// compare
const
Uint32
*
const
p1
=
*
data1
;
const
Uint32
*
const
p2
=
*
data2
;
ret
=
NdbSqlUtil
::
cmp
(
typeId
,
p1
,
p2
,
size1
,
size1
);
if
(
ret
!=
0
)
{
jam
();
break
;
}
}
else
{
jam
();
// not NULL < NULL
ret
=
-
1
;
break
;
}
}
else
{
if
(
*
data2
!=
0
)
{
jam
();
// NULL > not NULL
ret
=
+
1
;
break
;
}
}
data1
+=
1
;
data2
+=
1
;
start
++
;
}
// XXX until data format errors are handled
ndbrequire
(
ret
!=
NdbSqlUtil
::
CmpError
);
return
ret
;
}
/*
* Scan bound vs tree entry.
*
...
...
ndb/src/kernel/blocks/dbtux/DbtuxMaint.cpp
View file @
e063f909
...
...
@@ -100,11 +100,6 @@ Dbtux::execTUX_MAINT_REQ(Signal* signal)
return
;
}
}
// find position in tree
SearchPar
searchPar
;
searchPar
.
m_data
=
c_searchKey
;
searchPar
.
m_ent
=
ent
;
TreePos
treePos
;
#ifdef VM_TRACE
if
(
debugFlags
&
DebugMaint
)
{
debugOut
<<
"opCode="
<<
dec
<<
opCode
;
...
...
@@ -116,7 +111,9 @@ Dbtux::execTUX_MAINT_REQ(Signal* signal)
debugOut
<<
endl
;
}
#endif
treeSearch
(
signal
,
frag
,
searchPar
,
treePos
);
// find position in tree
TreePos
treePos
;
treeSearch
(
signal
,
frag
,
c_searchKey
,
ent
,
treePos
);
#ifdef VM_TRACE
if
(
debugFlags
&
DebugMaint
)
{
debugOut
<<
treePos
<<
endl
;
...
...
ndb/src/kernel/blocks/dbtux/DbtuxTree.cpp
View file @
e063f909
...
...
@@ -26,7 +26,7 @@
* same in min/max need not be checked.
*/
void
Dbtux
::
treeSearch
(
Signal
*
signal
,
Frag
&
frag
,
SearchPar
searchPar
,
TreePos
&
treePos
)
Dbtux
::
treeSearch
(
Signal
*
signal
,
Frag
&
frag
,
TableData
searchKey
,
TreeEnt
searchEnt
,
TreePos
&
treePos
)
{
const
TreeHead
&
tree
=
frag
.
m_tree
;
const
unsigned
numAttrs
=
frag
.
m_numAttrs
;
...
...
@@ -50,19 +50,12 @@ loop: {
jam
();
unsigned
start1
=
0
;
// compare prefix
int
ret
=
cmpSearchKey
(
frag
,
start1
,
search
Par
.
m_data
,
node
.
getPref
(
i
),
tree
.
m_prefSize
);
int
ret
=
cmpSearchKey
(
frag
,
start1
,
search
Key
,
node
.
getPref
(
i
),
tree
.
m_prefSize
);
if
(
ret
==
NdbSqlUtil
::
CmpUnknown
)
{
jam
();
// read full value
ReadPar
readPar
;
readPar
.
m_ent
=
node
.
getMinMax
(
i
);
ndbrequire
(
start1
<
numAttrs
);
readPar
.
m_first
=
start1
;
readPar
.
m_count
=
numAttrs
-
start1
;
readPar
.
m_data
=
0
;
// leave in signal data
tupReadAttrs
(
signal
,
frag
,
readPar
);
// compare full value
ret
=
cmpSearchKey
(
frag
,
start1
,
searchPar
.
m_data
,
readPar
.
m_data
);
// read and compare remaining attributes
readKeyAttrs
(
frag
,
node
.
getMinMax
(
i
),
start1
,
c_keyAttrs
,
c_entryKey
);
ret
=
cmpSearchKey
(
frag
,
start1
,
searchKey
,
c_entryKey
);
ndbrequire
(
ret
!=
NdbSqlUtil
::
CmpUnknown
);
}
if
(
start
>
start1
)
...
...
@@ -70,7 +63,7 @@ loop: {
if
(
ret
==
0
)
{
jam
();
// keys are equal, compare entry values
ret
=
search
Par
.
m_e
nt
.
cmp
(
node
.
getMinMax
(
i
));
ret
=
search
E
nt
.
cmp
(
node
.
getMinMax
(
i
));
}
if
(
i
==
0
?
(
ret
<
0
)
:
(
ret
>
0
))
{
jam
();
...
...
@@ -102,24 +95,18 @@ loop: {
for
(
unsigned
j
=
1
;
j
<=
numWithin
;
j
++
)
{
jam
();
int
ret
=
0
;
// compare remaining attributes
if
(
start
<
numAttrs
)
{
jam
();
ReadPar
readPar
;
readPar
.
m_ent
=
node
.
getEnt
(
j
);
readPar
.
m_first
=
start
;
readPar
.
m_count
=
numAttrs
-
start
;
readPar
.
m_data
=
0
;
// leave in signal data
tupReadAttrs
(
signal
,
frag
,
readPar
);
// compare
// read and compare remaining attributes
unsigned
start1
=
start
;
ret
=
cmpSearchKey
(
frag
,
start1
,
searchPar
.
m_data
,
readPar
.
m_data
);
readKeyAttrs
(
frag
,
node
.
getEnt
(
j
),
start1
,
c_keyAttrs
,
c_entryKey
);
ret
=
cmpSearchKey
(
frag
,
start1
,
searchKey
,
c_entryKey
);
ndbrequire
(
ret
!=
NdbSqlUtil
::
CmpUnknown
);
}
if
(
ret
==
0
)
{
jam
();
// keys are equal, compare entry values
ret
=
search
Par
.
m_e
nt
.
cmp
(
node
.
getEnt
(
j
));
ret
=
search
E
nt
.
cmp
(
node
.
getEnt
(
j
));
}
if
(
ret
<=
0
)
{
jam
();
...
...
ndb/src/kernel/blocks/dbtux/Times.txt
View file @
e063f909
...
...
@@ -43,4 +43,7 @@ optim 8 mc02/a 42 ms 69 ms 62 pct
optim 9 mc02/a 43 ms 67 ms 54 pct
mc02/b 53 ms 102 ms 91 pct
optim 10 mc02/a 44 ms 65 ms 46 pct
mc02/b 53 ms 88 ms 66 pct
vim: set et:
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