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
2ff69e74
Commit
2ff69e74
authored
Mar 27, 2008
by
tsmith@rhel5-ia64-a.mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge rhel5-ia64-a.mysql.com:/data0/tsmith/51
into rhel5-ia64-a.mysql.com:/data0/tsmith/build/51
parents
3069db1d
c82d7ecf
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
102 additions
and
30 deletions
+102
-30
mysql-test/r/innodb.result
mysql-test/r/innodb.result
+19
-0
mysql-test/t/innodb.test
mysql-test/t/innodb.test
+23
-0
storage/innobase/dict/dict0dict.c
storage/innobase/dict/dict0dict.c
+3
-3
storage/innobase/handler/ha_innodb.cc
storage/innobase/handler/ha_innodb.cc
+43
-16
storage/innobase/handler/ha_innodb.h
storage/innobase/handler/ha_innodb.h
+1
-1
storage/innobase/include/dict0dict.h
storage/innobase/include/dict0dict.h
+3
-3
storage/innobase/include/dict0mem.h
storage/innobase/include/dict0mem.h
+1
-1
storage/innobase/include/row0sel.h
storage/innobase/include/row0sel.h
+1
-1
storage/innobase/include/univ.i
storage/innobase/include/univ.i
+3
-0
storage/innobase/row/row0sel.c
storage/innobase/row/row0sel.c
+5
-5
No files found.
mysql-test/r/innodb.result
View file @
2ff69e74
...
...
@@ -3245,3 +3245,22 @@ where table_schema='test' and table_name = 't1';
table_comment data_free_is_set
this is a comment 1
drop table t1;
CREATE TABLE t1 (
c1 INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
c2 VARCHAR(128) NOT NULL,
PRIMARY KEY(c1)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=100;
CREATE TABLE t2 (
c1 INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
c2 INT(10) UNSIGNED DEFAULT NULL,
PRIMARY KEY(c1)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=200;
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE table_name = 't2';
AUTO_INCREMENT
200
ALTER TABLE t2 ADD CONSTRAINT t1_t2_1 FOREIGN KEY(c1) REFERENCES t1(c1);
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE table_name = 't2';
AUTO_INCREMENT
200
DROP TABLE t2;
DROP TABLE t1;
mysql-test/t/innodb.test
View file @
2ff69e74
...
...
@@ -2436,6 +2436,29 @@ select table_comment, data_free > 0 as data_free_is_set
where
table_schema
=
'test'
and
table_name
=
't1'
;
drop
table
t1
;
#
# Bug 34920 test
#
CONNECTION
default
;
CREATE
TABLE
t1
(
c1
INT
(
10
)
UNSIGNED
NOT
NULL
AUTO_INCREMENT
,
c2
VARCHAR
(
128
)
NOT
NULL
,
PRIMARY
KEY
(
c1
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8
AUTO_INCREMENT
=
100
;
CREATE
TABLE
t2
(
c1
INT
(
10
)
UNSIGNED
NOT
NULL
AUTO_INCREMENT
,
c2
INT
(
10
)
UNSIGNED
DEFAULT
NULL
,
PRIMARY
KEY
(
c1
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8
AUTO_INCREMENT
=
200
;
SELECT
AUTO_INCREMENT
FROM
INFORMATION_SCHEMA
.
TABLES
WHERE
table_name
=
't2'
;
ALTER
TABLE
t2
ADD
CONSTRAINT
t1_t2_1
FOREIGN
KEY
(
c1
)
REFERENCES
t1
(
c1
);
SELECT
AUTO_INCREMENT
FROM
INFORMATION_SCHEMA
.
TABLES
WHERE
table_name
=
't2'
;
DROP
TABLE
t2
;
DROP
TABLE
t1
;
# End 34920 test
#######################################################################
# #
# Please, DO NOT TOUCH this file as well as the innodb.result file. #
...
...
storage/innobase/dict/dict0dict.c
View file @
2ff69e74
...
...
@@ -429,7 +429,7 @@ void
dict_table_autoinc_initialize
(
/*==========================*/
dict_table_t
*
table
,
/* in: table */
ib_longlong
value
)
/* in: next value to assign to a row */
ib_
u
longlong
value
)
/* in: next value to assign to a row */
{
ut_ad
(
mutex_own
(
&
table
->
autoinc_mutex
));
...
...
@@ -441,7 +441,7 @@ dict_table_autoinc_initialize(
Reads the next autoinc value (== autoinc counter value), 0 if not yet
initialized. */
ib_longlong
ib_
u
longlong
dict_table_autoinc_read
(
/*====================*/
/* out: value for a new row, or 0 */
...
...
@@ -470,7 +470,7 @@ dict_table_autoinc_update(
/*======================*/
dict_table_t
*
table
,
/* in: table */
ib_longlong
value
)
/* in: value which was assigned to a row */
ib_
u
longlong
value
)
/* in: value which was assigned to a row */
{
if
(
table
->
autoinc_inited
&&
value
>
table
->
autoinc
)
{
...
...
storage/innobase/handler/ha_innodb.cc
View file @
2ff69e74
...
...
@@ -3545,7 +3545,19 @@ no_commit:
if
(
auto_inc
>
prebuilt
->
last_value
)
{
set_max_autoinc:
ut_a
(
prebuilt
->
table
->
autoinc_increment
>
0
);
auto_inc
+=
prebuilt
->
table
->
autoinc_increment
;
ulonglong
have
;
ulonglong
need
;
/* Check for overflow conditions. */
need
=
prebuilt
->
table
->
autoinc_increment
;
have
=
~
0x0ULL
-
auto_inc
;
if
(
have
<
need
)
{
need
=
have
;
}
auto_inc
+=
need
;
err
=
innobase_set_max_autoinc
(
auto_inc
);
...
...
@@ -5105,8 +5117,15 @@ ha_innobase::create(
DBUG_ASSERT
(
innobase_table
!=
0
);
if
((
create_info
->
used_fields
&
HA_CREATE_USED_AUTO
)
&&
(
create_info
->
auto_increment_value
!=
0
))
{
/* Note: We can't call update_thd() as prebuilt will not be
setup at this stage and so we use thd. */
/* We need to copy the AUTOINC value from the old table if
this is an ALTER TABLE. */
if
(((
create_info
->
used_fields
&
HA_CREATE_USED_AUTO
)
||
thd_sql_command
(
thd
)
==
SQLCOM_ALTER_TABLE
)
&&
create_info
->
auto_increment_value
!=
0
)
{
/* Query was ALTER TABLE...AUTO_INCREMENT = x; or
CREATE TABLE ...AUTO_INCREMENT = x; Find out a table
...
...
@@ -5856,7 +5875,7 @@ ha_innobase::info(
}
if
(
flag
&
HA_STATUS_AUTO
&&
table
->
found_next_number_field
)
{
longlong
auto_inc
;
u
longlong
auto_inc
;
int
ret
;
/* The following function call can the first time fail in
...
...
@@ -7207,9 +7226,9 @@ ha_innobase::innobase_read_and_init_auto_inc(
/*=========================================*/
/* out: 0 or generic MySQL
error code */
longlong
*
value
)
/* out: the autoinc value */
u
longlong
*
value
)
/* out: the autoinc value */
{
longlong
auto_inc
;
u
longlong
auto_inc
;
ibool
stmt_start
;
int
mysql_error
=
0
;
dict_table_t
*
innodb_table
=
prebuilt
->
table
;
...
...
@@ -7260,7 +7279,9 @@ ha_innobase::innobase_read_and_init_auto_inc(
index
,
autoinc_col_name
,
&
auto_inc
);
if
(
error
==
DB_SUCCESS
)
{
++
auto_inc
;
if
(
auto_inc
<
~
0x0ULL
)
{
++
auto_inc
;
}
dict_table_autoinc_initialize
(
innodb_table
,
auto_inc
);
}
else
{
ut_print_timestamp
(
stderr
);
...
...
@@ -7313,14 +7334,14 @@ ha_innobase::innobase_get_auto_increment(
error
=
innobase_autoinc_lock
();
if
(
error
==
DB_SUCCESS
)
{
ib_
longlong
autoinc
;
u
longlong
autoinc
;
/* Determine the first value of the interval */
autoinc
=
dict_table_autoinc_read
(
prebuilt
->
table
);
/* We need to initialize the AUTO-INC value, for
that we release all locks.*/
if
(
autoinc
<
=
0
)
{
if
(
autoinc
=
=
0
)
{
trx_t
*
trx
;
trx
=
prebuilt
->
trx
;
...
...
@@ -7339,14 +7360,11 @@ ha_innobase::innobase_get_auto_increment(
mysql_error
=
innobase_read_and_init_auto_inc
(
&
autoinc
);
if
(
!
mysql_error
)
{
/* Should have read the proper value */
ut_a
(
autoinc
>
0
);
}
else
{
if
(
mysql_error
)
{
error
=
DB_ERROR
;
}
}
else
{
*
value
=
(
ulonglong
)
autoinc
;
*
value
=
autoinc
;
}
/* A deadlock error during normal processing is OK
and can be ignored. */
...
...
@@ -7431,10 +7449,19 @@ ha_innobase::get_auto_increment(
/* With old style AUTOINC locking we only update the table's
AUTOINC counter after attempting to insert the row. */
if
(
innobase_autoinc_lock_mode
!=
AUTOINC_OLD_STYLE_LOCKING
)
{
ulonglong
have
;
ulonglong
need
;
/* Check for overflow conditions. */
need
=
*
nb_reserved_values
*
increment
;
have
=
~
0x0ULL
-
*
first_value
;
if
(
have
<
need
)
{
need
=
have
;
}
/* Compute the last value in the interval */
prebuilt
->
last_value
=
*
first_value
+
(
*
nb_reserved_values
*
increment
);
prebuilt
->
last_value
=
*
first_value
+
need
;
ut_a
(
prebuilt
->
last_value
>=
*
first_value
);
...
...
storage/innobase/handler/ha_innodb.h
View file @
2ff69e74
...
...
@@ -72,7 +72,7 @@ class ha_innobase: public handler
int
update_thd
(
THD
*
thd
);
int
change_active_index
(
uint
keynr
);
int
general_fetch
(
uchar
*
buf
,
uint
direction
,
uint
match_mode
);
int
innobase_read_and_init_auto_inc
(
longlong
*
ret
);
int
innobase_read_and_init_auto_inc
(
u
longlong
*
ret
);
ulong
innobase_autoinc_lock
();
ulong
innobase_set_max_autoinc
(
ulonglong
auto_inc
);
ulong
innobase_reset_autoinc
(
ulonglong
auto_inc
);
...
...
storage/innobase/include/dict0dict.h
View file @
2ff69e74
...
...
@@ -185,12 +185,12 @@ void
dict_table_autoinc_initialize
(
/*==========================*/
dict_table_t
*
table
,
/* in: table */
ib_longlong
value
);
/* in: next value to assign to a row */
ib_
u
longlong
value
);
/* in: next value to assign to a row */
/************************************************************************
Reads the next autoinc value (== autoinc counter value), 0 if not yet
initialized. */
ib_longlong
ib_
u
longlong
dict_table_autoinc_read
(
/*====================*/
/* out: value for a new row, or 0 */
...
...
@@ -204,7 +204,7 @@ dict_table_autoinc_update(
/*======================*/
dict_table_t
*
table
,
/* in: table */
ib_longlong
value
);
/* in: value which was assigned to a row */
ib_
u
longlong
value
);
/* in: value which was assigned to a row */
/************************************************************************
Release the autoinc lock.*/
...
...
storage/innobase/include/dict0mem.h
View file @
2ff69e74
...
...
@@ -409,7 +409,7 @@ struct dict_table_struct{
/* TRUE if the autoinc counter has been
inited; MySQL gets the init value by executing
SELECT MAX(auto inc column) */
ib_longlong
autoinc
;
/* autoinc counter value to give to the
ib_
u
longlong
autoinc
;
/* autoinc counter value to give to the
next inserted row */
ib_longlong
autoinc_increment
;
...
...
storage/innobase/include/row0sel.h
View file @
2ff69e74
...
...
@@ -181,7 +181,7 @@ row_search_max_autoinc(
error code */
dict_index_t
*
index
,
/* in: index to search */
const
char
*
col_name
,
/* in: autoinc column name */
ib_longlong
*
value
);
/* out: AUTOINC value read */
ib_
u
longlong
*
value
);
/* out: AUTOINC value read */
/* A structure for caching column values for prefetched rows */
struct
sel_buf_struct
{
...
...
storage/innobase/include/univ.i
View file @
2ff69e74
...
...
@@ -212,8 +212,11 @@ typedef long int lint;
#
ifdef
__WIN__
typedef
__int64
ib_longlong
;
typedef
unsigned
__int64
ib_ulonglong
;
#
else
/* Note: longlong and ulonglong come from MySQL headers. */
typedef
longlong
ib_longlong
;
typedef
ulonglong
ib_ulonglong
;
#
endif
typedef
unsigned
long
long
int
ullint
;
...
...
storage/innobase/row/row0sel.c
View file @
2ff69e74
...
...
@@ -4529,7 +4529,7 @@ row_search_check_if_query_cache_permitted(
Read the AUTOINC column from the current row. If the value is less than
0 and the type is not unsigned then we reset the value to 0. */
static
ib_longlong
ib_
u
longlong
row_search_autoinc_read_column
(
/*===========================*/
/* out: value read from the column */
...
...
@@ -4540,7 +4540,7 @@ row_search_autoinc_read_column(
{
ulint
len
;
const
byte
*
data
;
ib_longlong
value
;
ib_
u
longlong
value
;
mem_heap_t
*
heap
=
NULL
;
/* Our requirement is that dest should be word aligned. */
byte
dest
[
sizeof
(
value
)];
...
...
@@ -4567,7 +4567,7 @@ row_search_autoinc_read_column(
and that dest is word aligned. */
switch
(
len
)
{
case
8
:
value
=
*
(
ib_longlong
*
)
dest
;
value
=
*
(
ib_
u
longlong
*
)
dest
;
break
;
case
4
:
...
...
@@ -4595,7 +4595,7 @@ row_search_autoinc_read_column(
mem_heap_free
(
heap
);
}
if
(
!
unsigned_type
&&
value
<
0
)
{
if
(
!
unsigned_type
&&
(
ib_longlong
)
value
<
0
)
{
value
=
0
;
}
...
...
@@ -4634,7 +4634,7 @@ row_search_max_autoinc(
column name can't be found in index */
dict_index_t
*
index
,
/* in: index to search */
const
char
*
col_name
,
/* in: name of autoinc column */
ib_longlong
*
value
)
/* out: AUTOINC value read */
ib_
u
longlong
*
value
)
/* out: AUTOINC value read */
{
ulint
i
;
ulint
n_cols
;
...
...
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