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
18735828
Commit
18735828
authored
Jan 25, 2008
by
mskold/marty@quadfish.(none)
Browse files
Options
Browse Files
Download
Plain Diff
Merge mskold@bk-internal.mysql.com:/home/bk/mysql-5.0-ndb
into mysql.com:/home/marty/MySQL/mysql-5.0-ndb
parents
3bbbdc09
f6f8dd34
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
153 additions
and
73 deletions
+153
-73
mysql-test/r/ndb_auto_increment.result
mysql-test/r/ndb_auto_increment.result
+3
-3
mysql-test/r/ndb_restore.result
mysql-test/r/ndb_restore.result
+35
-15
mysql-test/t/ndb_restore.test
mysql-test/t/ndb_restore.test
+15
-10
ndb/include/ndbapi/Ndb.hpp
ndb/include/ndbapi/Ndb.hpp
+10
-8
ndb/src/ndbapi/DictCache.cpp
ndb/src/ndbapi/DictCache.cpp
+1
-0
ndb/src/ndbapi/DictCache.hpp
ndb/src/ndbapi/DictCache.hpp
+1
-0
ndb/src/ndbapi/Ndb.cpp
ndb/src/ndbapi/Ndb.cpp
+88
-37
No files found.
mysql-test/r/ndb_auto_increment.result
View file @
18735828
...
...
@@ -421,10 +421,10 @@ select * from t1 order by a;
a
1
20
21
33
34
35
65
insert into t1 values (100);
insert into t1 values (NULL);
insert into t1 values (NULL);
...
...
@@ -432,11 +432,11 @@ select * from t1 order by a;
a
1
20
21
22
33
34
35
65
66
100
101
set auto_increment_offset = @old_auto_increment_offset;
...
...
mysql-test/r/ndb_restore.result
View file @
18735828
...
...
@@ -266,21 +266,41 @@ a
2000
3000
10000
show table status like 't1_c';
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
X X X X X X X X X X 3001 X X X X X X X
show table status like 't2_c';
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
X X X X X X X X X X 501 X X X X X X X
show table status like 't4_c';
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
X X X X X X X X X X 290000001 X X X X X X X
show table status like 't7_c';
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
X X X X X X X X X X 29 X X X X X X X
show table status like 't10_c';
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
X X X X X X X X X X 10001 X X X X X X X
select max(capgoaledatta) from t1_c;
max(capgoaledatta)
3000
select auto_increment from information_schema.tables
where table_name = 't1_c';
auto_increment
3001
select max(capgotod) from t2_c;
max(capgotod)
500
select auto_increment from information_schema.tables
where table_name = 't2_c';
auto_increment
501
select max(capfa) from t4_c;
max(capfa)
290000000
select auto_increment from information_schema.tables
where table_name = 't4_c';
auto_increment
290000001
select max(dardtestard) from t7_c;
max(dardtestard)
28
select auto_increment from information_schema.tables
where table_name = 't7_c';
auto_increment
29
select max(a) from t10_c;
max(a)
10000
select auto_increment from information_schema.tables
where table_name = 't10_c';
auto_increment
10001
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9, t10;
drop table if exists t1_c,t2_c,t3_c,t4_c,t5_c,t6_c,t7_c,t8_c,t9_c, t10_c;
520093696,<the_backup_id>
mysql-test/t/ndb_restore.test
View file @
18735828
...
...
@@ -231,16 +231,21 @@ select count(*)
select
*
from
t10_c
order
by
a
;
# Bug #27775 cont'd
# - auto inc info should be correct
--
replace_column
1
X
2
X
3
X
4
X
5
X
6
X
7
X
8
X
9
X
10
X
12
X
13
X
14
X
15
X
16
X
17
X
18
X
show
table
status
like
't1_c'
;
--
replace_column
1
X
2
X
3
X
4
X
5
X
6
X
7
X
8
X
9
X
10
X
12
X
13
X
14
X
15
X
16
X
17
X
18
X
show
table
status
like
't2_c'
;
--
replace_column
1
X
2
X
3
X
4
X
5
X
6
X
7
X
8
X
9
X
10
X
12
X
13
X
14
X
15
X
16
X
17
X
18
X
show
table
status
like
't4_c'
;
--
replace_column
1
X
2
X
3
X
4
X
5
X
6
X
7
X
8
X
9
X
10
X
12
X
13
X
14
X
15
X
16
X
17
X
18
X
show
table
status
like
't7_c'
;
--
replace_column
1
X
2
X
3
X
4
X
5
X
6
X
7
X
8
X
9
X
10
X
12
X
13
X
14
X
15
X
16
X
17
X
18
X
show
table
status
like
't10_c'
;
select
max
(
capgoaledatta
)
from
t1_c
;
select
auto_increment
from
information_schema
.
tables
where
table_name
=
't1_c'
;
select
max
(
capgotod
)
from
t2_c
;
select
auto_increment
from
information_schema
.
tables
where
table_name
=
't2_c'
;
select
max
(
capfa
)
from
t4_c
;
select
auto_increment
from
information_schema
.
tables
where
table_name
=
't4_c'
;
select
max
(
dardtestard
)
from
t7_c
;
select
auto_increment
from
information_schema
.
tables
where
table_name
=
't7_c'
;
select
max
(
a
)
from
t10_c
;
select
auto_increment
from
information_schema
.
tables
where
table_name
=
't10_c'
;
--
disable_warnings
drop
table
if
exists
t1
,
t2
,
t3
,
t4
,
t5
,
t6
,
t7
,
t8
,
t9
,
t10
;
...
...
ndb/include/ndbapi/Ndb.hpp
View file @
18735828
...
...
@@ -1386,22 +1386,22 @@ public:
*
* @param cacheSize number of values to cache in this Ndb object
*
* @return 0 or -1 on error, and
tupleId
in out parameter
* @return 0 or -1 on error, and
autoValue
in out parameter
*/
int
getAutoIncrementValue
(
const
char
*
aTableName
,
Uint64
&
tupleId
,
Uint32
cacheSize
,
Uint64
&
autoValue
,
Uint32
cacheSize
,
Uint64
step
=
1
,
Uint64
start
=
1
);
int
getAutoIncrementValue
(
const
NdbDictionary
::
Table
*
aTable
,
Uint64
&
tupleId
,
Uint32
cacheSize
,
Uint64
&
autoValue
,
Uint32
cacheSize
,
Uint64
step
=
1
,
Uint64
start
=
1
);
int
readAutoIncrementValue
(
const
char
*
aTableName
,
Uint64
&
tupleId
);
Uint64
&
autoValue
);
int
readAutoIncrementValue
(
const
NdbDictionary
::
Table
*
aTable
,
Uint64
&
tupleId
);
Uint64
&
autoValue
);
int
setAutoIncrementValue
(
const
char
*
aTableName
,
Uint64
tupleId
,
bool
increase
);
Uint64
autoValue
,
bool
modify
);
int
setAutoIncrementValue
(
const
NdbDictionary
::
Table
*
aTable
,
Uint64
tupleId
,
bool
increase
);
Uint64
autoValue
,
bool
modify
);
private:
int
getTupleIdFromNdb
(
Ndb_local_table_info
*
info
,
Uint64
&
tupleId
,
Uint32
cacheSize
,
...
...
@@ -1409,7 +1409,9 @@ private:
int
readTupleIdFromNdb
(
Ndb_local_table_info
*
info
,
Uint64
&
tupleId
);
int
setTupleIdInNdb
(
Ndb_local_table_info
*
info
,
Uint64
tupleId
,
bool
increase
);
Uint64
tupleId
,
bool
modify
);
int
checkTupleIdInNdb
(
Ndb_local_table_info
*
info
,
Uint64
tupleId
);
int
opTupleIdOnNdb
(
Ndb_local_table_info
*
info
,
Uint64
&
opValue
,
Uint32
op
);
public:
...
...
ndb/src/ndbapi/DictCache.cpp
View file @
18735828
...
...
@@ -46,6 +46,7 @@ Ndb_local_table_info::Ndb_local_table_info(NdbTableImpl *table_impl)
m_table_impl
=
table_impl
;
m_first_tuple_id
=
~
(
Uint64
)
0
;
m_last_tuple_id
=
~
(
Uint64
)
0
;
m_highest_seen
=
0
;
}
Ndb_local_table_info
::~
Ndb_local_table_info
()
...
...
ndb/src/ndbapi/DictCache.hpp
View file @
18735828
...
...
@@ -36,6 +36,7 @@ public:
// range of cached tuple ids per thread
Uint64
m_first_tuple_id
;
Uint64
m_last_tuple_id
;
Uint64
m_highest_seen
;
Uint64
m_local_data
[
1
];
// Must be last member. Used to access extra space.
private:
...
...
ndb/src/ndbapi/Ndb.cpp
View file @
18735828
...
...
@@ -767,8 +767,8 @@ Ndb::getNodeId()
}
/****************************************************************************
Uint64
getAutoIncrementValue( const char* aTableName,
Uint64 &
tupleId
,
int
getAutoIncrementValue( const char* aTableName,
Uint64 &
autoValue
,
Uint32 cacheSize,
Uint64 step,
Uint64 start);
...
...
@@ -779,6 +779,7 @@ Parameters: aTableName (IN) : The table name.
step (IN) : Specifies the step between the
autoincrement values.
start (IN) : Start value for first value
Returns: 0 if succesful, -1 if error encountered
Remark: Returns a new autoincrement value to the application.
The autoincrement values can be increased by steps
(default 1) and a number of values can be prefetched
...
...
@@ -892,9 +893,18 @@ Ndb::getTupleIdFromNdb(Ndb_local_table_info* info,
DBUG_RETURN
(
0
);
}
/****************************************************************************
int readAutoIncrementValue( const char* aTableName,
Uint64 & autoValue);
Parameters: aTableName (IN) : The table name.
autoValue (OUT) : The current autoincrement value
Returns: 0 if succesful, -1 if error encountered
Remark: Returns the current autoincrement value to the application.
****************************************************************************/
int
Ndb
::
readAutoIncrementValue
(
const
char
*
aTableName
,
Uint64
&
tupleId
)
Uint64
&
autoValue
)
{
DBUG_ENTER
(
"Ndb::readAutoIncrementValue"
);
BaseString
internal_tabname
(
internalize_table_name
(
aTableName
));
...
...
@@ -905,15 +915,15 @@ Ndb::readAutoIncrementValue(const char* aTableName,
theError
.
code
=
theDictionary
->
getNdbError
().
code
;
DBUG_RETURN
(
-
1
);
}
if
(
readTupleIdFromNdb
(
info
,
tupleId
)
==
-
1
)
if
(
readTupleIdFromNdb
(
info
,
autoValue
)
==
-
1
)
DBUG_RETURN
(
-
1
);
DBUG_PRINT
(
"info"
,
(
"value %lu"
,
(
ulong
)
tupleId
));
DBUG_PRINT
(
"info"
,
(
"value %lu"
,
(
ulong
)
autoValue
));
DBUG_RETURN
(
0
);
}
int
Ndb
::
readAutoIncrementValue
(
const
NdbDictionary
::
Table
*
aTable
,
Uint64
&
tupleId
)
Uint64
&
autoValue
)
{
DBUG_ENTER
(
"Ndb::readAutoIncrementValue"
);
assert
(
aTable
!=
0
);
...
...
@@ -926,9 +936,9 @@ Ndb::readAutoIncrementValue(const NdbDictionary::Table * aTable,
theError
.
code
=
theDictionary
->
getNdbError
().
code
;
DBUG_RETURN
(
-
1
);
}
if
(
readTupleIdFromNdb
(
info
,
tupleId
)
==
-
1
)
if
(
readTupleIdFromNdb
(
info
,
autoValue
)
==
-
1
)
DBUG_RETURN
(
-
1
);
DBUG_PRINT
(
"info"
,
(
"value %lu"
,
(
ulong
)
tupleId
));
DBUG_PRINT
(
"info"
,
(
"value %lu"
,
(
ulong
)
autoValue
));
DBUG_RETURN
(
0
);
}
...
...
@@ -956,9 +966,20 @@ Ndb::readTupleIdFromNdb(Ndb_local_table_info* info,
DBUG_RETURN
(
0
);
}
/****************************************************************************
int setAutoIncrementValue( const char* aTableName,
Uint64 autoValue,
bool modify);
Parameters: aTableName (IN) : The table name.
autoValue (IN) : The new autoincrement value
modify (IN) : Modify existing value (not initialization)
Returns: 0 if succesful, -1 if error encountered
Remark: Sets a new autoincrement value for the application.
****************************************************************************/
int
Ndb
::
setAutoIncrementValue
(
const
char
*
aTableName
,
Uint64
tupleId
,
bool
increase
)
Uint64
autoValue
,
bool
modify
)
{
DBUG_ENTER
(
"Ndb::setAutoIncrementValue"
);
BaseString
internal_tabname
(
internalize_table_name
(
aTableName
));
...
...
@@ -969,14 +990,14 @@ Ndb::setAutoIncrementValue(const char* aTableName,
theError
.
code
=
theDictionary
->
getNdbError
().
code
;
DBUG_RETURN
(
-
1
);
}
if
(
setTupleIdInNdb
(
info
,
tupleId
,
increase
)
==
-
1
)
if
(
setTupleIdInNdb
(
info
,
autoValue
,
modify
)
==
-
1
)
DBUG_RETURN
(
-
1
);
DBUG_RETURN
(
0
);
}
int
Ndb
::
setAutoIncrementValue
(
const
NdbDictionary
::
Table
*
aTable
,
Uint64
tupleId
,
bool
increase
)
Uint64
autoValue
,
bool
modify
)
{
DBUG_ENTER
(
"Ndb::setAutoIncrementValue"
);
assert
(
aTable
!=
0
);
...
...
@@ -989,17 +1010,19 @@ Ndb::setAutoIncrementValue(const NdbDictionary::Table * aTable,
theError
.
code
=
theDictionary
->
getNdbError
().
code
;
DBUG_RETURN
(
-
1
);
}
if
(
setTupleIdInNdb
(
info
,
tupleId
,
increase
)
==
-
1
)
if
(
setTupleIdInNdb
(
info
,
autoValue
,
modify
)
==
-
1
)
DBUG_RETURN
(
-
1
);
DBUG_RETURN
(
0
);
}
int
Ndb
::
setTupleIdInNdb
(
Ndb_local_table_info
*
info
,
Uint64
tupleId
,
bool
increase
)
Uint64
tupleId
,
bool
modify
)
{
DBUG_ENTER
(
"Ndb::setTupleIdInNdb"
);
if
(
increase
)
if
(
modify
)
{
if
(
checkTupleIdInNdb
(
info
,
tupleId
))
{
if
(
info
->
m_first_tuple_id
!=
info
->
m_last_tuple_id
)
{
...
...
@@ -1019,9 +1042,11 @@ Ndb::setTupleIdInNdb(Ndb_local_table_info* info,
* if tupleId <= NEXTID, do nothing. otherwise update NEXTID to
* tupleId and set cached range to first = last = tupleId - 1.
*/
if
(
opTupleIdOnNdb
(
info
,
tupleId
,
2
)
==
-
1
)
Uint64
opValue
=
tupleId
;
if
(
opTupleIdOnNdb
(
info
,
opValue
,
2
)
==
-
1
)
DBUG_RETURN
(
-
1
);
}
}
else
{
/*
...
...
@@ -1033,6 +1058,32 @@ Ndb::setTupleIdInNdb(Ndb_local_table_info* info,
DBUG_RETURN
(
0
);
}
int
Ndb
::
checkTupleIdInNdb
(
Ndb_local_table_info
*
info
,
Uint64
tupleId
)
{
DBUG_ENTER
(
"Ndb::checkTupleIdIndNdb"
);
if
((
info
->
m_first_tuple_id
!=
~
(
Uint64
)
0
)
&&
(
info
->
m_first_tuple_id
>
tupleId
))
{
/*
* If we have ever cached a value in this object and this cached
* value is larger than the value we're trying to set then we
* need not check with the real value in the SYSTAB_0 table.
*/
DBUG_RETURN
(
0
);
}
if
(
info
->
m_highest_seen
>
tupleId
)
{
/*
* Although we've never cached any higher value we have read
* a higher value and again it isn't necessary to change the
* auto increment value.
*/
DBUG_RETURN
(
0
);
}
DBUG_RETURN
(
1
);
}
int
Ndb
::
opTupleIdOnNdb
(
Ndb_local_table_info
*
info
,
Uint64
&
opValue
,
Uint32
op
)
{
...
...
@@ -1094,6 +1145,7 @@ Ndb::opTupleIdOnNdb(Ndb_local_table_info* info, Uint64 & opValue, Uint32 op)
info
->
m_first_tuple_id
=
~
(
Uint64
)
0
;
info
->
m_last_tuple_id
=
~
(
Uint64
)
0
;
info
->
m_highest_seen
=
0
;
break
;
case
2
:
tOperation
->
interpretedUpdateTuple
();
...
...
@@ -1103,19 +1155,18 @@ Ndb::opTupleIdOnNdb(Ndb_local_table_info* info, Uint64 & opValue, Uint32 op)
// compare NEXTID >= opValue
tOperation
->
branch_le
(
2
,
1
,
0
);
tOperation
->
write_attr
(
"NEXTID"
,
1
);
tOperation
->
interpret_exit_ok
();
tOperation
->
def_label
(
0
);
tOperation
->
interpret_exit_
nok
(
9999
);
tOperation
->
interpret_exit_
ok
(
);
tRecAttrResult
=
tOperation
->
getValue
(
"NEXTID"
);
if
(
tConnection
->
execute
(
Commit
)
==
-
1
)
{
if
(
tConnection
->
theError
.
code
!=
9999
)
goto
error_handler
;
}
else
{
info
->
m_highest_seen
=
tRecAttrResult
->
u_64_value
();
DBUG_PRINT
(
"info"
,
(
"Setting
next
auto increment value (db) to %lu"
,
(
"Setting auto increment value (db) to %lu"
,
(
ulong
)
opValue
));
info
->
m_first_tuple_id
=
info
->
m_last_tuple_id
=
opValue
-
1
;
}
...
...
@@ -1126,7 +1177,7 @@ Ndb::opTupleIdOnNdb(Ndb_local_table_info* info, Uint64 & opValue, Uint32 op)
tRecAttrResult
=
tOperation
->
getValue
(
"NEXTID"
);
if
(
tConnection
->
execute
(
Commit
)
==
-
1
)
goto
error_handler
;
opValue
=
tRecAttrResult
->
u_64_value
();
// out
info
->
m_highest_seen
=
opValue
=
tRecAttrResult
->
u_64_value
();
// out
break
;
default:
goto
error_handler
;
...
...
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