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
2965c480
Commit
2965c480
authored
Oct 26, 2007
by
jonas@perch.ndb.mysql.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ndb - bug#31635 (5.0)
0 pad varsize keys in ndbapi
parent
e57ae669
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
92 additions
and
17 deletions
+92
-17
mysql-test/r/ndb_basic.result
mysql-test/r/ndb_basic.result
+24
-0
mysql-test/t/ndb_basic.test
mysql-test/t/ndb_basic.test
+20
-2
ndb/src/ndbapi/NdbOperationDefine.cpp
ndb/src/ndbapi/NdbOperationDefine.cpp
+25
-8
ndb/src/ndbapi/NdbOperationSearch.cpp
ndb/src/ndbapi/NdbOperationSearch.cpp
+23
-7
No files found.
mysql-test/r/ndb_basic.result
View file @
2965c480
...
...
@@ -841,4 +841,28 @@ a b
3 30
4 1
drop table t1,t2;
create table t1 (a varchar(100) primary key, b varchar(100)) engine = NDB;
insert into t1 values
('a', 'a'),('b','b'),('c', 'c'),('aa', 'aa'),('bb', 'bb'),('cc', 'cc');
replace into t1 values ('a', '-a');
replace into t1 values ('b', '-b');
replace into t1 values ('c', '-c');
replace into t1 values ('aa', '-aa');
replace into t1 values ('bb', '-bb');
replace into t1 values ('cc', '-cc');
replace into t1 values ('aaa', '-aaa');
replace into t1 values ('bbb', '-bbb');
replace into t1 values ('ccc', '-ccc');
select * from t1 order by 1,2;
a b
a -a
aa -aa
aaa -aaa
b -b
bb -bb
bbb -bbb
c -c
cc -cc
ccc -ccc
drop table t1;
End of 5.0 tests
mysql-test/t/ndb_basic.test
View file @
2965c480
...
...
@@ -780,7 +780,25 @@ update ignore t1,t2 set a = 1, c = 1 where a = 3 and c = 3;
select
*
from
t1
order
by
a
;
drop
table
t1
,
t2
;
# End of 5.0 tests
--
echo
End
of
5.0
tests
#
# Bug#31635
#
create
table
t1
(
a
varchar
(
100
)
primary
key
,
b
varchar
(
100
))
engine
=
NDB
;
insert
into
t1
values
(
'a'
,
'a'
),(
'b'
,
'b'
),(
'c'
,
'c'
),(
'aa'
,
'aa'
),(
'bb'
,
'bb'
),(
'cc'
,
'cc'
);
replace
into
t1
values
(
'a'
,
'-a'
);
replace
into
t1
values
(
'b'
,
'-b'
);
replace
into
t1
values
(
'c'
,
'-c'
);
replace
into
t1
values
(
'aa'
,
'-aa'
);
replace
into
t1
values
(
'bb'
,
'-bb'
);
replace
into
t1
values
(
'cc'
,
'-cc'
);
replace
into
t1
values
(
'aaa'
,
'-aaa'
);
replace
into
t1
values
(
'bbb'
,
'-bbb'
);
replace
into
t1
values
(
'ccc'
,
'-ccc'
);
select
*
from
t1
order
by
1
,
2
;
drop
table
t1
;
# End of 5.0 tests
--
echo
End
of
5.0
tests
ndb/src/ndbapi/NdbOperationDefine.cpp
View file @
2965c480
...
...
@@ -572,15 +572,32 @@ NdbOperation::setValue( const NdbColumnImpl* tAttrInfo,
* If it is not aligned then we start by copying the value to tempData and
* use this as aValue instead.
*************************************************************************/
const
int
attributeSize
=
sizeInBytes
;
const
int
slack
=
sizeInBytes
&
3
;
int
attributeSize
=
sizeInBytes
;
int
slack
=
(
sizeInBytes
&
3
)
?
4
-
(
sizeInBytes
&
3
)
:
0
;
switch
(
tAttrInfo
->
m_type
){
case
NdbDictionary
:
:
Column
::
Varchar
:
case
NdbDictionary
:
:
Column
::
Varbinary
:
attributeSize
=
1
+
*
(
Uint8
*
)
aValue
;
slack
=
4
*
totalSizeInWords
-
attributeSize
;
break
;
case
NdbDictionary
:
:
Column
::
Longvarchar
:
case
NdbDictionary
:
:
Column
::
Longvarbinary
:
{
const
Uint8
*
ptr
=
(
const
Uint8
*
)
aValue
;
attributeSize
=
2
+
ptr
[
0
]
+
256
*
ptr
[
1
];
slack
=
4
*
totalSizeInWords
-
attributeSize
;
break
;
}
}
if
(((
UintPtr
)
aValue
&
3
)
!=
0
||
(
slack
!=
0
)){
memcpy
(
&
tempData
[
0
],
aValue
,
attributeSize
);
aValue
=
(
char
*
)
&
tempData
[
0
];
if
(
slack
!=
0
)
{
char
*
tmp
=
(
char
*
)
&
tempData
[
0
];
memset
(
&
tmp
[
attributeSize
],
0
,
(
4
-
slack
));
if
(((
UintPtr
)
aValue
&
3
)
!=
0
||
(
slack
!=
0
))
{
char
*
tmp
=
(
char
*
)
tempData
;
memcpy
(
tmp
,
aValue
,
attributeSize
);
aValue
=
tmp
;
if
(
slack
!=
0
)
{
bzero
(
tmp
+
attributeSize
,
slack
);
}
//if
}
//if
...
...
ndb/src/ndbapi/NdbOperationSearch.cpp
View file @
2965c480
...
...
@@ -129,6 +129,7 @@ NdbOperation::equal_impl(const NdbColumnImpl* tAttrInfo,
OperationType
tOpType
=
theOperationType
;
Uint32
sizeInBytes
=
tAttrInfo
->
m_attrSize
*
tAttrInfo
->
m_arraySize
;
const
Uint32
totalSizeInWords
=
(
sizeInBytes
+
3
)
/
4
;
Uint32
real_len
;
if
(
!
tAttrInfo
->
get_var_length
(
aValue
,
real_len
))
{
...
...
@@ -150,20 +151,35 @@ NdbOperation::equal_impl(const NdbColumnImpl* tAttrInfo,
* aValue. If it is not aligned then we start by copying the value to
* tempData and use this as aValue instead.
***********************************************************************/
const
int
attributeSize
=
sizeInBytes
;
const
int
slack
=
sizeInBytes
&
3
;
int
attributeSize
=
sizeInBytes
;
int
slack
=
(
sizeInBytes
&
3
)
?
4
-
(
sizeInBytes
&
3
)
:
0
;
const
int
align
=
UintPtr
(
aValue
)
&
7
;
switch
(
tAttrInfo
->
m_type
){
case
NdbDictionary
:
:
Column
::
Varchar
:
case
NdbDictionary
:
:
Column
::
Varbinary
:
attributeSize
=
1
+
*
(
Uint8
*
)
aValue
;
slack
=
4
*
totalSizeInWords
-
attributeSize
;
break
;
case
NdbDictionary
:
:
Column
::
Longvarchar
:
case
NdbDictionary
:
:
Column
::
Longvarbinary
:
{
const
Uint8
*
ptr
=
(
const
Uint8
*
)
aValue
;
attributeSize
=
2
+
ptr
[
0
]
+
256
*
ptr
[
1
];
slack
=
4
*
totalSizeInWords
-
attributeSize
;
break
;
}
}
if
(((
align
&
3
)
!=
0
)
||
(
slack
!=
0
)
||
(
tDistrKey
&&
(
align
!=
0
)))
{
((
Uint32
*
)
tempData
)[
attributeSize
>>
2
]
=
0
;
memcpy
(
&
tempData
[
0
],
aValue
,
attributeSize
);
aValue
=
(
char
*
)
&
tempData
[
0
];
char
*
tmp
=
(
char
*
)
tempData
;
memcpy
(
tmp
,
aValue
,
attributeSize
);
aValue
=
tmp
;
bzero
(
tmp
+
attributeSize
,
slack
);
}
//if
}
Uint32
totalSizeInWords
=
(
sizeInBytes
+
3
)
/
4
;
// Inc. bits in last word
if
(
true
){
//tArraySize != 0) {
Uint32
tTupKeyLen
=
theTupKeyLen
;
...
...
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