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
424857e0
Commit
424857e0
authored
Sep 18, 2006
by
acurtis/antony@ltamd64.xiphis.org
Browse files
Options
Browse Files
Download
Plain Diff
Merge acurtis@bk-internal.mysql.com:/home/bk/mysql-5.0-engines
into xiphis.org:/home/antony/work2/engines-merge
parents
bb859ecd
f53f015b
Changes
21
Show whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
269 additions
and
19 deletions
+269
-19
include/my_base.h
include/my_base.h
+3
-1
mysql-test/include/strict_autoinc.inc
mysql-test/include/strict_autoinc.inc
+28
-0
mysql-test/r/strict_autoinc_1myisam.result
mysql-test/r/strict_autoinc_1myisam.result
+27
-0
mysql-test/r/strict_autoinc_2innodb.result
mysql-test/r/strict_autoinc_2innodb.result
+27
-0
mysql-test/r/strict_autoinc_3heap.result
mysql-test/r/strict_autoinc_3heap.result
+27
-0
mysql-test/r/strict_autoinc_4bdb.result
mysql-test/r/strict_autoinc_4bdb.result
+27
-0
mysql-test/r/strict_autoinc_5ndb.result
mysql-test/r/strict_autoinc_5ndb.result
+27
-0
mysql-test/t/strict_autoinc_1myisam.test
mysql-test/t/strict_autoinc_1myisam.test
+8
-0
mysql-test/t/strict_autoinc_2innodb.test
mysql-test/t/strict_autoinc_2innodb.test
+10
-0
mysql-test/t/strict_autoinc_3heap.test
mysql-test/t/strict_autoinc_3heap.test
+8
-0
mysql-test/t/strict_autoinc_4bdb.test
mysql-test/t/strict_autoinc_4bdb.test
+10
-0
mysql-test/t/strict_autoinc_5ndb.test
mysql-test/t/strict_autoinc_5ndb.test
+10
-0
sql/ha_ndbcluster.cc
sql/ha_ndbcluster.cc
+3
-1
sql/handler.cc
sql/handler.cc
+21
-6
sql/handler.h
sql/handler.h
+1
-1
sql/share/errmsg.txt
sql/share/errmsg.txt
+2
-0
storage/heap/ha_heap.cc
storage/heap/ha_heap.cc
+4
-1
storage/innobase/handler/ha_innodb.cc
storage/innobase/handler/ha_innodb.cc
+2
-1
storage/myisam/ha_myisam.cc
storage/myisam/ha_myisam.cc
+5
-1
storage/myisam/mi_packrec.c
storage/myisam/mi_packrec.c
+14
-6
storage/myisammrg/ha_myisammrg.cc
storage/myisammrg/ha_myisammrg.cc
+5
-1
No files found.
include/my_base.h
View file @
424857e0
...
...
@@ -372,7 +372,9 @@ enum ha_base_keytype {
#define HA_ERR_TABLE_NEEDS_UPGRADE 164
/* The table changed in storage engine */
#define HA_ERR_TABLE_READONLY 165
/* The table is not writable */
#define HA_ERR_LAST 165
/*Copy last error nr.*/
#define HA_ERR_AUTOINC_READ_FAILED 166
/* Failed to get the next autoinc value */
#define HA_ERR_AUTOINC_ERANGE 167
/* Failed to set the row autoinc value */
#define HA_ERR_LAST 167
/*Copy last error nr.*/
/* Add error numbers before HA_ERR_LAST and change it accordingly. */
#define HA_ERR_ERRORS (HA_ERR_LAST - HA_ERR_FIRST + 1)
...
...
mysql-test/include/strict_autoinc.inc
0 → 100644
View file @
424857e0
#
# Test for strict-mode autoincrement
#
set
@
org_mode
=@@
sql_mode
;
eval
create
table
t1
(
`a`
tinyint
(
4
)
NOT
NULL
auto_increment
,
primary
key
(
`a`
)
)
engine
=
$type
;
set
@@
sql_mode
=
'strict_all_tables'
;
--
error
ER_WARN_DATA_OUT_OF_RANGE
insert
into
t1
values
(
1000
);
select
count
(
*
)
from
t1
;
set
auto_increment_increment
=
1000
;
set
auto_increment_offset
=
700
;
--
error
ER_WARN_DATA_OUT_OF_RANGE
insert
into
t1
values
(
null
);
select
count
(
*
)
from
t1
;
set
@@
sql_mode
=@
org_mode
;
insert
into
t1
values
(
null
);
select
*
from
t1
;
drop
table
t1
;
# End of test
mysql-test/r/strict_autoinc_1myisam.result
0 → 100644
View file @
424857e0
set @org_mode=@@sql_mode;
create table t1
(
`a` tinyint(4) NOT NULL auto_increment,
primary key (`a`)
) engine = 'MYISAM' ;
set @@sql_mode='strict_all_tables';
insert into t1 values(1000);
ERROR 22003: Out of range value adjusted for column 'a' at row 1
select count(*) from t1;
count(*)
0
set auto_increment_increment=1000;
set auto_increment_offset=700;
insert into t1 values(null);
ERROR 22003: Out of range value adjusted for column 'a' at row 1
select count(*) from t1;
count(*)
0
set @@sql_mode=@org_mode;
insert into t1 values(null);
Warnings:
Warning 1264 Out of range value adjusted for column 'a' at row 1
select * from t1;
a
127
drop table t1;
mysql-test/r/strict_autoinc_2innodb.result
0 → 100644
View file @
424857e0
set @org_mode=@@sql_mode;
create table t1
(
`a` tinyint(4) NOT NULL auto_increment,
primary key (`a`)
) engine = 'InnoDB' ;
set @@sql_mode='strict_all_tables';
insert into t1 values(1000);
ERROR 22003: Out of range value adjusted for column 'a' at row 1
select count(*) from t1;
count(*)
0
set auto_increment_increment=1000;
set auto_increment_offset=700;
insert into t1 values(null);
ERROR 22003: Out of range value adjusted for column 'a' at row 1
select count(*) from t1;
count(*)
0
set @@sql_mode=@org_mode;
insert into t1 values(null);
Warnings:
Warning 1264 Out of range value adjusted for column 'a' at row 1
select * from t1;
a
127
drop table t1;
mysql-test/r/strict_autoinc_3heap.result
0 → 100644
View file @
424857e0
set @org_mode=@@sql_mode;
create table t1
(
`a` tinyint(4) NOT NULL auto_increment,
primary key (`a`)
) engine = 'MEMORY' ;
set @@sql_mode='strict_all_tables';
insert into t1 values(1000);
ERROR 22003: Out of range value adjusted for column 'a' at row 1
select count(*) from t1;
count(*)
0
set auto_increment_increment=1000;
set auto_increment_offset=700;
insert into t1 values(null);
ERROR 22003: Out of range value adjusted for column 'a' at row 1
select count(*) from t1;
count(*)
0
set @@sql_mode=@org_mode;
insert into t1 values(null);
Warnings:
Warning 1264 Out of range value adjusted for column 'a' at row 1
select * from t1;
a
127
drop table t1;
mysql-test/r/strict_autoinc_4bdb.result
0 → 100644
View file @
424857e0
set @org_mode=@@sql_mode;
create table t1
(
`a` tinyint(4) NOT NULL auto_increment,
primary key (`a`)
) engine = 'BDB' ;
set @@sql_mode='strict_all_tables';
insert into t1 values(1000);
ERROR 22003: Out of range value adjusted for column 'a' at row 1
select count(*) from t1;
count(*)
0
set auto_increment_increment=1000;
set auto_increment_offset=700;
insert into t1 values(null);
ERROR 22003: Out of range value adjusted for column 'a' at row 1
select count(*) from t1;
count(*)
0
set @@sql_mode=@org_mode;
insert into t1 values(null);
Warnings:
Warning 1264 Out of range value adjusted for column 'a' at row 1
select * from t1;
a
127
drop table t1;
mysql-test/r/strict_autoinc_5ndb.result
0 → 100644
View file @
424857e0
set @org_mode=@@sql_mode;
create table t1
(
`a` tinyint(4) NOT NULL auto_increment,
primary key (`a`)
) engine = 'NDB' ;
set @@sql_mode='strict_all_tables';
insert into t1 values(1000);
ERROR 22003: Out of range value adjusted for column 'a' at row 1
select count(*) from t1;
count(*)
0
set auto_increment_increment=1000;
set auto_increment_offset=700;
insert into t1 values(null);
ERROR 22003: Out of range value adjusted for column 'a' at row 1
select count(*) from t1;
count(*)
0
set @@sql_mode=@org_mode;
insert into t1 values(null);
Warnings:
Warning 1264 Out of range value adjusted for column 'a' at row 1
select * from t1;
a
127
drop table t1;
mysql-test/t/strict_autoinc_1myisam.test
0 → 100644
View file @
424857e0
#
# Bug#20573 Strict mode auto-increment
#
let
$type
=
'MYISAM'
;
--
source
include
/
strict_autoinc
.
inc
# end of test
mysql-test/t/strict_autoinc_2innodb.test
0 → 100644
View file @
424857e0
--
source
include
/
have_innodb
.
inc
#
# Bug#20573 Strict mode auto-increment
#
let
$type
=
'InnoDB'
;
--
source
include
/
strict_autoinc
.
inc
# end of test
mysql-test/t/strict_autoinc_3heap.test
0 → 100644
View file @
424857e0
#
# Bug#20573 Strict mode auto-increment
#
let
$type
=
'MEMORY'
;
--
source
include
/
strict_autoinc
.
inc
# end of test
mysql-test/t/strict_autoinc_4bdb.test
0 → 100644
View file @
424857e0
--
source
include
/
have_bdb
.
inc
#
# Bug#20573 Strict mode auto-increment
#
let
$type
=
'BDB'
;
--
source
include
/
strict_autoinc
.
inc
# end of test
mysql-test/t/strict_autoinc_5ndb.test
0 → 100644
View file @
424857e0
--
source
include
/
have_ndb
.
inc
#
# Bug#20573 Strict mode auto-increment
#
let
$type
=
'NDB'
;
--
source
include
/
strict_autoinc
.
inc
# end of test
sql/ha_ndbcluster.cc
View file @
424857e0
...
...
@@ -2486,9 +2486,11 @@ int ha_ndbcluster::write_row(byte *record)
if
(
has_auto_increment
)
{
THD
*
thd
=
table
->
in_use
;
int
error
;
m_skip_auto_increment
=
FALSE
;
update_auto_increment
();
if
((
error
=
update_auto_increment
()))
DBUG_RETURN
(
error
);
m_skip_auto_increment
=
(
insert_id_for_cur_row
==
0
);
}
}
...
...
sql/handler.cc
View file @
424857e0
...
...
@@ -332,6 +332,8 @@ static int ha_init_errors(void)
SETMSG
(
HA_ERR_FOREIGN_DUPLICATE_KEY
,
"FK constraint would lead to duplicate key"
);
SETMSG
(
HA_ERR_TABLE_NEEDS_UPGRADE
,
ER
(
ER_TABLE_NEEDS_UPGRADE
));
SETMSG
(
HA_ERR_TABLE_READONLY
,
ER
(
ER_OPEN_AS_READONLY
));
SETMSG
(
HA_ERR_AUTOINC_READ_FAILED
,
ER
(
ER_AUTOINC_READ_FAILED
));
SETMSG
(
HA_ERR_AUTOINC_ERANGE
,
ER
(
ER_WARN_DATA_OUT_OF_RANGE
));
/* Register the error messages for use with my_error(). */
return
my_error_register
(
errmsgs
,
HA_ERR_FIRST
,
HA_ERR_LAST
);
...
...
@@ -1656,7 +1658,10 @@ prev_insert_id(ulonglong nr, struct system_variables *variables)
RETURN
0 ok
1 get_auto_increment() was called and returned ~(ulonglong) 0
HA_ERR_AUTOINC_READ_FAILED
get_auto_increment() was called and returned ~(ulonglong) 0
HA_ERR_AUTOINC_ERANGE
storing value in field caused strict mode failure.
IMPLEMENTATION
...
...
@@ -1725,14 +1730,13 @@ prev_insert_id(ulonglong nr, struct system_variables *variables)
#define AUTO_INC_DEFAULT_NB_MAX_BITS 16
#define AUTO_INC_DEFAULT_NB_MAX ((1 << AUTO_INC_DEFAULT_NB_MAX_BITS) - 1)
bool
handler
::
update_auto_increment
()
int
handler
::
update_auto_increment
()
{
ulonglong
nr
,
nb_reserved_values
;
bool
append
=
FALSE
;
THD
*
thd
=
table
->
in_use
;
struct
system_variables
*
variables
=
&
thd
->
variables
;
bool
auto_increment_field_not_null
;
bool
result
=
0
;
DBUG_ENTER
(
"handler::update_auto_increment"
);
/*
...
...
@@ -1809,7 +1813,7 @@ bool handler::update_auto_increment()
nb_desired_values
,
&
nr
,
&
nb_reserved_values
);
if
(
nr
==
~
(
ulonglong
)
0
)
result
=
1
;
// Mark failure
DBUG_RETURN
(
HA_ERR_AUTOINC_READ_FAILED
);
// Mark failure
/*
That rounding below should not be needed when all engines actually
...
...
@@ -1843,6 +1847,12 @@ bool handler::update_auto_increment()
if
(
unlikely
(
table
->
next_number_field
->
store
((
longlong
)
nr
,
TRUE
)))
{
/*
first test if the query was aborted due to strict mode constraints
*/
if
(
thd
->
killed
==
THD
::
KILL_BAD_DATA
)
DBUG_RETURN
(
HA_ERR_AUTOINC_ERANGE
);
/*
field refused this value (overflow) and truncated it, use the result of
the truncation (which is going to be inserted); however we try to
...
...
@@ -1865,7 +1875,6 @@ bool handler::update_auto_increment()
thd
->
auto_inc_intervals_in_cur_stmt_for_binlog
.
append
(
auto_inc_interval_for_cur_row
.
minimum
(),
auto_inc_interval_for_cur_row
.
values
(),
variables
->
auto_increment_increment
);
}
/*
Record this autogenerated value. If the caller then
...
...
@@ -1881,7 +1890,7 @@ bool handler::update_auto_increment()
*/
set_next_insert_id
(
compute_next_insert_id
(
nr
,
variables
));
DBUG_RETURN
(
result
);
DBUG_RETURN
(
result
?
/* some failure occurred */
-
1
:
0
);
}
...
...
@@ -2176,6 +2185,12 @@ void handler::print_error(int error, myf errflag)
case
HA_ERR_TABLE_READONLY
:
textno
=
ER_OPEN_AS_READONLY
;
break
;
case
HA_ERR_AUTOINC_READ_FAILED
:
textno
=
ER_AUTOINC_READ_FAILED
;
break
;
case
HA_ERR_AUTOINC_ERANGE
:
textno
=
ER_WARN_DATA_OUT_OF_RANGE
;
break
;
default:
{
/* The error was "unknown" to this function.
...
...
sql/handler.h
View file @
424857e0
...
...
@@ -990,7 +990,7 @@ class handler :public Sql_alloc
ulong
type
,
TABLE
*
table
);
int
ha_open
(
TABLE
*
table
,
const
char
*
name
,
int
mode
,
int
test_if_locked
);
void
adjust_next_insert_id_after_explicit_value
(
ulonglong
nr
);
bool
update_auto_increment
();
int
update_auto_increment
();
void
print_keydup_error
(
uint
key_nr
,
const
char
*
msg
);
virtual
void
print_error
(
int
error
,
myf
errflag
);
virtual
bool
get_error_message
(
int
error
,
String
*
buf
);
...
...
sql/share/errmsg.txt
View file @
424857e0
...
...
@@ -5984,6 +5984,8 @@ ER_EVENTS_DB_ERROR
eng "Cannot proceed because the tables used by events were found damaged at server start"
ER_ONLY_INTEGERS_ALLOWED
eng "Only normal integers allowed as number here"
ER_AUTOINC_READ_FAILED
eng "Failed to read auto-increment value from storage engine"
ER_USERNAME
eng "user name"
ER_HOSTNAME
...
...
storage/heap/ha_heap.cc
View file @
424857e0
...
...
@@ -176,7 +176,10 @@ int ha_heap::write_row(byte * buf)
if
(
table
->
timestamp_field_type
&
TIMESTAMP_AUTO_SET_ON_INSERT
)
table
->
timestamp_field
->
set_time
();
if
(
table
->
next_number_field
&&
buf
==
table
->
record
[
0
])
update_auto_increment
();
{
if
((
res
=
update_auto_increment
()))
return
res
;
}
res
=
heap_write
(
file
,
buf
);
if
(
!
res
&&
(
++
records_changed
*
HEAP_STATS_UPDATE_THRESHOLD
>
file
->
s
->
records
))
...
...
storage/innobase/handler/ha_innodb.cc
View file @
424857e0
...
...
@@ -3401,7 +3401,8 @@ ha_innobase::write_row(
/* We must use the handler code to update the auto-increment
value to be sure that we increment it correctly. */
update_auto_increment
();
if
((
error
=
update_auto_increment
()))
goto
func_exit
;
auto_inc_used
=
1
;
}
...
...
storage/myisam/ha_myisam.cc
View file @
424857e0
...
...
@@ -343,7 +343,11 @@ int ha_myisam::write_row(byte * buf)
or a new row, then update the auto_increment value in the record.
*/
if
(
table
->
next_number_field
&&
buf
==
table
->
record
[
0
])
update_auto_increment
();
{
int
error
;
if
((
error
=
update_auto_increment
()))
return
error
;
}
return
mi_write
(
file
,
buf
);
}
...
...
storage/myisam/mi_packrec.c
View file @
424857e0
...
...
@@ -16,7 +16,7 @@
/* Functions to compressed records */
#include "
myisamdef
.h"
#include "
fulltext
.h"
#define IS_CHAR ((uint) 32768)
/* Bit if char (not offset) in tree */
...
...
@@ -230,11 +230,19 @@ my_bool _mi_read_pack_info(MI_INFO *info, pbool fix_keys)
{
for
(
i
=
0
;
i
<
share
->
base
.
keys
;
i
++
)
{
share
->
keyinfo
[
i
].
keylength
+=
(
uint16
)
diff_length
;
share
->
keyinfo
[
i
].
minlength
+=
(
uint16
)
diff_length
;
share
->
keyinfo
[
i
].
maxlength
+=
(
uint16
)
diff_length
;
share
->
keyinfo
[
i
].
seg
[
share
->
keyinfo
[
i
].
keysegs
].
length
=
(
uint16
)
rec_reflength
;
MI_KEYDEF
*
keyinfo
=
&
share
->
keyinfo
[
i
];
keyinfo
->
keylength
+=
(
uint16
)
diff_length
;
keyinfo
->
minlength
+=
(
uint16
)
diff_length
;
keyinfo
->
maxlength
+=
(
uint16
)
diff_length
;
keyinfo
->
seg
[
keyinfo
->
flag
&
HA_FULLTEXT
?
FT_SEGS
:
keyinfo
->
keysegs
].
length
=
(
uint16
)
rec_reflength
;
}
if
(
share
->
ft2_keyinfo
.
seg
)
{
MI_KEYDEF
*
ft2_keyinfo
=
&
share
->
ft2_keyinfo
;
ft2_keyinfo
->
keylength
+=
(
uint16
)
diff_length
;
ft2_keyinfo
->
minlength
+=
(
uint16
)
diff_length
;
ft2_keyinfo
->
maxlength
+=
(
uint16
)
diff_length
;
}
}
...
...
storage/myisammrg/ha_myisammrg.cc
View file @
424857e0
...
...
@@ -126,7 +126,11 @@ int ha_myisammrg::write_row(byte * buf)
if
(
table
->
timestamp_field_type
&
TIMESTAMP_AUTO_SET_ON_INSERT
)
table
->
timestamp_field
->
set_time
();
if
(
table
->
next_number_field
&&
buf
==
table
->
record
[
0
])
update_auto_increment
();
{
int
error
;
if
((
error
=
update_auto_increment
()))
return
error
;
}
return
myrg_write
(
file
,
buf
);
}
...
...
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