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
d2f51fb7
Commit
d2f51fb7
authored
Sep 14, 2004
by
joreland@mysql.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix UtilTransaction::verifyIndex wrt to null handling
parent
29c5bfb2
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
84 additions
and
78 deletions
+84
-78
ndb/test/src/UtilTransactions.cpp
ndb/test/src/UtilTransactions.cpp
+84
-78
No files found.
ndb/test/src/UtilTransactions.cpp
View file @
d2f51fb7
...
...
@@ -1138,90 +1138,94 @@ UtilTransactions::readRowFromTableAndIndex(Ndb* pNdb,
*/
NdbIndexOperation
*
pIndexOp
=
NULL
;
NdbIndexScanOperation
*
pScanOp
=
NULL
;
{
void
*
pOpCheck
=
NULL
;
if
(
indexType
==
NdbDictionary
::
Index
::
UniqueHashIndex
)
{
pOpCheck
=
pIndexOp
=
pTrans1
->
getNdbIndexOperation
(
indexName
,
tab
.
getName
());
}
else
{
pOpCheck
=
pScanOp
=
pTrans1
->
getNdbIndexScanOperation
(
indexName
,
tab
.
getName
());
}
NdbOperation
*
pIOp
=
0
;
if
(
pOpCheck
==
NULL
)
{
ERR
(
pTrans1
->
getNdbError
());
goto
close_all
;
bool
null_found
=
false
;
for
(
a
=
0
;
a
<
(
int
)
pIndex
->
getNoOfColumns
();
a
++
){
const
NdbDictionary
::
Column
*
col
=
pIndex
->
getColumn
(
a
);
if
(
row
.
attributeStore
(
col
->
getName
())
->
isNULL
())
{
null_found
=
true
;
ndbout_c
(
"null found"
);
break
;
}
}
const
char
*
tabName
=
tab
.
getName
();
if
(
!
null_found
)
{
bool
not_ok
;
if
(
pIndexOp
)
{
not_ok
=
pIndexOp
->
readTuple
()
==
-
1
;
if
(
indexType
==
NdbDictionary
::
Index
::
UniqueHashIndex
)
{
pIOp
=
pIndexOp
=
pTrans1
->
getNdbIndexOperation
(
indexName
,
tabName
);
}
else
{
not_ok
=
(
cursor
=
pScanOp
->
readTuples
())
==
0
;
pIOp
=
pScanOp
=
pTrans1
->
getNdbIndexScanOperation
(
indexName
,
tabName
)
;
}
if
(
not_ok
)
{
if
(
pIOp
==
NULL
)
{
ERR
(
pTrans1
->
getNdbError
());
goto
close_all
;
}
}
{
bool
not_ok
;
if
(
pIndexOp
)
{
not_ok
=
pIndexOp
->
readTuple
()
==
-
1
;
}
else
{
not_ok
=
(
cursor
=
pScanOp
->
readTuples
())
==
0
;
}
if
(
not_ok
)
{
ERR
(
pTrans1
->
getNdbError
());
goto
close_all
;
}
}
// Define primary keys for index
#if VERBOSE
printf
(
"SI: "
);
printf
(
"SI: "
);
#endif
for
(
a
=
0
;
a
<
(
int
)
pIndex
->
getNoOfColumns
();
a
++
){
const
NdbDictionary
::
Column
*
col
=
pIndex
->
getColumn
(
a
);
int
r
;
if
(
pIndexOp
)
r
=
pIndexOp
->
equal
(
col
->
getName
(),
row
.
attributeStore
(
col
->
getName
())
->
aRef
());
else
{
// setBound not possible for null attributes
for
(
a
=
0
;
a
<
(
int
)
pIndex
->
getNoOfColumns
();
a
++
){
const
NdbDictionary
::
Column
*
col
=
pIndex
->
getColumn
(
a
);
int
r
;
if
(
!
row
.
attributeStore
(
col
->
getName
())
->
isNULL
()
)
{
r
=
pScanOp
->
setBound
(
col
->
getName
(),
NdbIndexScanOperation
::
BoundEQ
,
row
.
attributeStore
(
col
->
getName
())
->
aRef
());
if
(
pIOp
->
equal
(
col
->
getName
(),
row
.
attributeStore
(
col
->
getName
())
->
aRef
())
!=
0
){
ERR
(
pTrans1
->
getNdbError
());
goto
close_all
;
}
}
}
if
(
r
!=
0
){
ERR
(
pTrans1
->
getNdbError
());
goto
close_all
;
}
#if VERBOSE
printf
(
"%s = %d: "
,
col
->
getName
(),
row
.
attributeStore
(
a
)
->
aRef
());
printf
(
"%s = %d: "
,
col
->
getName
(),
row
.
attributeStore
(
a
)
->
aRef
());
#endif
}
}
#if VERBOSE
printf
(
"
\n
"
);
printf
(
"
\n
"
);
#endif
// Read all attributes
// Read all attributes
#if VERBOSE
printf
(
"Reading %u attributes: "
,
tab
.
getNoOfColumns
());
printf
(
"Reading %u attributes: "
,
tab
.
getNoOfColumns
());
#endif
for
(
a
=
0
;
a
<
tab
.
getNoOfColumns
();
a
++
){
void
*
pCheck
;
if
(
pIndexOp
)
pCheck
=
indexRow
.
attributeStore
(
a
)
=
pIndexOp
->
getValue
(
tab
.
getColumn
(
a
)
->
getName
());
else
pCheck
=
indexRow
.
attributeStore
(
a
)
=
pScanOp
->
getValue
(
tab
.
getColumn
(
a
)
->
getName
());
if
(
pCheck
==
NULL
)
{
ERR
(
pTrans1
->
getNdbError
());
goto
close_all
;
}
for
(
a
=
0
;
a
<
tab
.
getNoOfColumns
();
a
++
){
void
*
pCheck
;
pCheck
=
indexRow
.
attributeStore
(
a
)
=
pIOp
->
getValue
(
tab
.
getColumn
(
a
)
->
getName
());
if
(
pCheck
==
NULL
)
{
ERR
(
pTrans1
->
getNdbError
());
goto
close_all
;
}
#if VERBOSE
printf
(
"%s "
,
tab
.
getColumn
(
a
)
->
getName
());
printf
(
"%s "
,
tab
.
getColumn
(
a
)
->
getName
());
#endif
}
}
#if VERBOSE
printf
(
"
\n
"
);
#endif
check
=
pTrans1
->
execute
(
Commit
);
if
(
check
==
-
1
)
{
const
NdbError
err
=
pTrans1
->
getNdbError
();
...
...
@@ -1238,41 +1242,43 @@ UtilTransactions::readRowFromTableAndIndex(Ndb* pNdb,
ndbout
<<
"row: "
<<
row
.
c_str
().
c_str
()
<<
endl
;
goto
close_all
;
}
/**
* Compare the two rows
*/
if
(
pScanOp
)
{
if
(
cursor
->
nextResult
()
!=
0
){
const
NdbError
err
=
pTrans1
->
getNdbError
();
ERR
(
err
);
ndbout
<<
"Error when comparing records - index op next_result missing"
<<
endl
;
ndbout
<<
"row: "
<<
row
.
c_str
().
c_str
()
<<
endl
;
goto
close_all
;
if
(
!
null_found
){
if
(
pScanOp
)
{
if
(
cursor
->
nextResult
()
!=
0
){
const
NdbError
err
=
pTrans1
->
getNdbError
();
ERR
(
err
);
ndbout
<<
"Error when comparing records - index op next_result missing"
<<
endl
;
ndbout
<<
"row: "
<<
row
.
c_str
().
c_str
()
<<
endl
;
goto
close_all
;
}
}
}
if
(
!
(
tabRow
.
c_str
()
==
indexRow
.
c_str
())){
ndbout
<<
"Error when comapring records"
<<
endl
;
ndbout
<<
" tabRow:
\n
"
<<
tabRow
.
c_str
().
c_str
()
<<
endl
;
ndbout
<<
" indexRow:
\n
"
<<
indexRow
.
c_str
().
c_str
()
<<
endl
;
goto
close_all
;
}
if
(
pScanOp
)
{
if
(
cursor
->
nextResult
()
==
0
){
ndbout
<<
"Error when comparing records - index op next_result to many"
<<
endl
;
ndbout
<<
"row: "
<<
row
.
c_str
().
c_str
()
<<
endl
;
if
(
!
(
tabRow
.
c_str
()
==
indexRow
.
c_str
())){
ndbout
<<
"Error when comapring records"
<<
endl
;
ndbout
<<
" tabRow:
\n
"
<<
tabRow
.
c_str
().
c_str
()
<<
endl
;
ndbout
<<
" indexRow:
\n
"
<<
indexRow
.
c_str
().
c_str
()
<<
endl
;
goto
close_all
;
}
if
(
pScanOp
)
{
if
(
cursor
->
nextResult
()
==
0
){
ndbout
<<
"Error when comparing records - index op next_result to many"
<<
endl
;
ndbout
<<
"row: "
<<
row
.
c_str
().
c_str
()
<<
endl
;
goto
close_all
;
}
}
}
return_code
=
NDBT_OK
;
goto
close_all
;
}
close_all:
close_all:
if
(
cursor
)
cursor
->
close
();
if
(
pTrans1
)
pNdb
->
closeTransaction
(
pTrans1
);
return
return_code
;
}
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