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
e9e64527
Commit
e9e64527
authored
Apr 04, 2005
by
unknown
Browse files
Options
Browse Files
Download
Plain Diff
Merge bk-internal:/home/bk/mysql-5.0
into mysql.com:/home/jimw/my/mysql-5.0-clean
parents
4189e7c8
f3aa7770
Changes
10
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
162 additions
and
94 deletions
+162
-94
client/mysqldump.c
client/mysqldump.c
+60
-55
innobase/row/row0sel.c
innobase/row/row0sel.c
+6
-2
mysql-test/r/strict.result
mysql-test/r/strict.result
+12
-0
mysql-test/t/strict.test
mysql-test/t/strict.test
+15
-0
sql/ha_innodb.cc
sql/ha_innodb.cc
+42
-20
sql/item_timefunc.cc
sql/item_timefunc.cc
+1
-1
sql/sql_base.cc
sql/sql_base.cc
+2
-2
sql/sql_class.h
sql/sql_class.h
+2
-1
sql/sql_error.cc
sql/sql_error.cc
+17
-10
sql/sql_table.cc
sql/sql_table.cc
+5
-3
No files found.
client/mysqldump.c
View file @
e9e64527
This diff is collapsed.
Click to expand it.
innobase/row/row0sel.c
View file @
e9e64527
...
@@ -2145,12 +2145,16 @@ row_sel_convert_mysql_key_to_innobase(
...
@@ -2145,12 +2145,16 @@ row_sel_convert_mysql_key_to_innobase(
}
}
if
(
dtype_get_mysql_type
(
dfield_get_type
(
dfield
))
if
(
dtype_get_mysql_type
(
dfield_get_type
(
dfield
))
==
DATA_MYSQL_TRUE_VARCHAR
)
{
==
DATA_MYSQL_TRUE_VARCHAR
&&
dfield_get_type
(
dfield
)
->
mtype
!=
DATA_INT
)
{
/* In a MySQL key value format, a true VARCHAR is
/* In a MySQL key value format, a true VARCHAR is
always preceded by 2 bytes of a length field.
always preceded by 2 bytes of a length field.
dfield_get_type(dfield)->len returns the maximum
dfield_get_type(dfield)->len returns the maximum
'payload' len in bytes. That does not include the
'payload' len in bytes. That does not include the
2 bytes that tell the actual data length. */
2 bytes that tell the actual data length.
We added the check != DATA_INT to make sure we do
not treat MySQL ENUM or SET as a true VARCHAR! */
data_len
+=
2
;
data_len
+=
2
;
data_field_len
+=
2
;
data_field_len
+=
2
;
...
...
mysql-test/r/strict.result
View file @
e9e64527
...
@@ -1173,4 +1173,16 @@ col1
...
@@ -1173,4 +1173,16 @@ col1
0000-00-00 00:00:00
0000-00-00 00:00:00
NULL
NULL
drop table t1;
drop table t1;
create table t1 (col1 tinyint);
drop procedure if exists t1;
Warnings:
Note 1305 PROCEDURE t1 does not exist
create procedure t1 () begin declare exit handler for sqlexception
select'a'; insert into t1 values (200); end;|
call t1();
ERROR 22003: Out of range value adjusted for column 'col1' at row 1
select * from t1;
col1
drop procedure t1;
drop table t1;
set sql_mode=@org_mode;
set sql_mode=@org_mode;
mysql-test/t/strict.test
View file @
e9e64527
...
@@ -1031,6 +1031,21 @@ insert into t1 select * from t1;
...
@@ -1031,6 +1031,21 @@ insert into t1 select * from t1;
select
*
from
t1
;
select
*
from
t1
;
drop
table
t1
;
drop
table
t1
;
#
# Test of inserting an invalid value via a stored procedure (Bug #5907)
#
create
table
t1
(
col1
tinyint
);
drop
procedure
if
exists
t1
;
delimiter
|
;
create
procedure
t1
()
begin
declare
exit
handler
for
sqlexception
select
'a'
;
insert
into
t1
values
(
200
);
end
;
|
delimiter
;
|
--
error
1264
call
t1
();
select
*
from
t1
;
drop
procedure
t1
;
drop
table
t1
;
#
#
# Restore mode
# Restore mode
#
#
...
...
sql/ha_innodb.cc
View file @
e9e64527
...
@@ -2271,13 +2271,43 @@ inline
...
@@ -2271,13 +2271,43 @@ inline
ulint
ulint
get_innobase_type_from_mysql_type
(
get_innobase_type_from_mysql_type
(
/*==============================*/
/*==============================*/
/* out: DATA_BINARY, DATA_VARCHAR, ... */
/* out: DATA_BINARY, DATA_VARCHAR, ... */
Field
*
field
)
/* in: MySQL field */
ulint
*
unsigned_flag
,
/* out: DATA_UNSIGNED if an 'unsigned type';
at least ENUM and SET, and unsigned integer
types are 'unsigned types' */
Field
*
field
)
/* in: MySQL field */
{
{
/* The following asserts try to check that the MySQL type code fits in
/* The following asserts try to check that the MySQL type code fits in
8 bits: this is used in ibuf and also when DATA_NOT_NULL is ORed to
8 bits: this is used in ibuf and also when DATA_NOT_NULL is ORed to
the type */
the type */
DBUG_ASSERT
((
ulint
)
FIELD_TYPE_STRING
<
256
);
DBUG_ASSERT
((
ulint
)
FIELD_TYPE_VAR_STRING
<
256
);
DBUG_ASSERT
((
ulint
)
FIELD_TYPE_DOUBLE
<
256
);
DBUG_ASSERT
((
ulint
)
FIELD_TYPE_FLOAT
<
256
);
DBUG_ASSERT
((
ulint
)
FIELD_TYPE_DECIMAL
<
256
);
if
(
field
->
flags
&
UNSIGNED_FLAG
)
{
*
unsigned_flag
=
DATA_UNSIGNED
;
}
else
{
*
unsigned_flag
=
0
;
}
if
(
field
->
real_type
()
==
FIELD_TYPE_ENUM
||
field
->
real_type
()
==
FIELD_TYPE_SET
)
{
/* MySQL has field->type() a string type for these, but the
data is actually internally stored as an unsigned integer
code! */
*
unsigned_flag
=
DATA_UNSIGNED
;
/* MySQL has its own unsigned
flag set to zero, even though
internally this is an unsigned
integer type */
return
(
DATA_INT
);
}
switch
(
field
->
type
())
{
switch
(
field
->
type
())
{
/* NOTE that we only allow string types in DATA_MYSQL
/* NOTE that we only allow string types in DATA_MYSQL
and DATA_VARMYSQL */
and DATA_VARMYSQL */
...
@@ -2313,8 +2343,6 @@ get_innobase_type_from_mysql_type(
...
@@ -2313,8 +2343,6 @@ get_innobase_type_from_mysql_type(
case
FIELD_TYPE_DATETIME
:
case
FIELD_TYPE_DATETIME
:
case
FIELD_TYPE_YEAR
:
case
FIELD_TYPE_YEAR
:
case
FIELD_TYPE_NEWDATE
:
case
FIELD_TYPE_NEWDATE
:
case
FIELD_TYPE_ENUM
:
case
FIELD_TYPE_SET
:
case
FIELD_TYPE_TIME
:
case
FIELD_TYPE_TIME
:
case
FIELD_TYPE_TIMESTAMP
:
case
FIELD_TYPE_TIMESTAMP
:
return
(
DATA_INT
);
return
(
DATA_INT
);
...
@@ -2686,7 +2714,7 @@ build_template(
...
@@ -2686,7 +2714,7 @@ build_template(
get_field_offset
(
table
,
field
);
get_field_offset
(
table
,
field
);
templ
->
mysql_col_len
=
(
ulint
)
field
->
pack_length
();
templ
->
mysql_col_len
=
(
ulint
)
field
->
pack_length
();
templ
->
type
=
get_innobase_type_from_mysql_type
(
field
)
;
templ
->
type
=
index
->
table
->
cols
[
i
].
type
.
mtype
;
templ
->
mysql_type
=
(
ulint
)
field
->
type
();
templ
->
mysql_type
=
(
ulint
)
field
->
type
();
if
(
templ
->
mysql_type
==
DATA_MYSQL_TRUE_VARCHAR
)
{
if
(
templ
->
mysql_type
==
DATA_MYSQL_TRUE_VARCHAR
)
{
...
@@ -2698,8 +2726,8 @@ build_template(
...
@@ -2698,8 +2726,8 @@ build_template(
index
->
table
->
cols
[
i
].
type
.
prtype
);
index
->
table
->
cols
[
i
].
type
.
prtype
);
templ
->
mbminlen
=
index
->
table
->
cols
[
i
].
type
.
mbminlen
;
templ
->
mbminlen
=
index
->
table
->
cols
[
i
].
type
.
mbminlen
;
templ
->
mbmaxlen
=
index
->
table
->
cols
[
i
].
type
.
mbmaxlen
;
templ
->
mbmaxlen
=
index
->
table
->
cols
[
i
].
type
.
mbmaxlen
;
templ
->
is_unsigned
=
(
ulint
)
(
field
->
flags
&
UNSIGNED_FLAG
);
templ
->
is_unsigned
=
index
->
table
->
cols
[
i
].
type
.
prtype
&
DATA_UNSIGNED
;
if
(
templ
->
type
==
DATA_BLOB
)
{
if
(
templ
->
type
==
DATA_BLOB
)
{
prebuilt
->
templ_contains_blob
=
TRUE
;
prebuilt
->
templ_contains_blob
=
TRUE
;
}
}
...
@@ -2962,7 +2990,6 @@ calc_row_difference(
...
@@ -2962,7 +2990,6 @@ calc_row_difference(
byte
*
buf
;
byte
*
buf
;
upd_field_t
*
ufield
;
upd_field_t
*
ufield
;
ulint
col_type
;
ulint
col_type
;
ulint
is_unsigned
;
ulint
n_changed
=
0
;
ulint
n_changed
=
0
;
dfield_t
dfield
;
dfield_t
dfield
;
uint
i
;
uint
i
;
...
@@ -2998,8 +3025,7 @@ calc_row_difference(
...
@@ -2998,8 +3025,7 @@ calc_row_difference(
field_mysql_type
=
field
->
type
();
field_mysql_type
=
field
->
type
();
col_type
=
get_innobase_type_from_mysql_type
(
field
);
col_type
=
prebuilt
->
table
->
cols
[
i
].
type
.
mtype
;
is_unsigned
=
(
ulint
)
(
field
->
flags
&
UNSIGNED_FLAG
);
switch
(
col_type
)
{
switch
(
col_type
)
{
...
@@ -3072,8 +3098,7 @@ calc_row_difference(
...
@@ -3072,8 +3098,7 @@ calc_row_difference(
}
}
ufield
->
exp
=
NULL
;
ufield
->
exp
=
NULL
;
ufield
->
field_no
=
ufield
->
field_no
=
prebuilt
->
table
->
cols
[
i
].
clust_pos
;
(
prebuilt
->
table
->
cols
+
i
)
->
clust_pos
;
n_changed
++
;
n_changed
++
;
}
}
}
}
...
@@ -3932,19 +3957,14 @@ create_table_def(
...
@@ -3932,19 +3957,14 @@ create_table_def(
for
(
i
=
0
;
i
<
n_cols
;
i
++
)
{
for
(
i
=
0
;
i
<
n_cols
;
i
++
)
{
field
=
form
->
field
[
i
];
field
=
form
->
field
[
i
];
col_type
=
get_innobase_type_from_mysql_type
(
field
);
col_type
=
get_innobase_type_from_mysql_type
(
&
unsigned_type
,
field
);
if
(
field
->
null_ptr
)
{
if
(
field
->
null_ptr
)
{
nulls_allowed
=
0
;
nulls_allowed
=
0
;
}
else
{
}
else
{
nulls_allowed
=
DATA_NOT_NULL
;
nulls_allowed
=
DATA_NOT_NULL
;
}
}
if
(
field
->
flags
&
UNSIGNED_FLAG
)
{
unsigned_type
=
DATA_UNSIGNED
;
}
else
{
unsigned_type
=
0
;
}
if
(
field
->
binary
())
{
if
(
field
->
binary
())
{
binary_type
=
DATA_BINARY_TYPE
;
binary_type
=
DATA_BINARY_TYPE
;
}
else
{
}
else
{
...
@@ -4021,6 +4041,7 @@ create_index(
...
@@ -4021,6 +4041,7 @@ create_index(
ulint
ind_type
;
ulint
ind_type
;
ulint
col_type
;
ulint
col_type
;
ulint
prefix_len
;
ulint
prefix_len
;
ulint
is_unsigned
;
ulint
i
;
ulint
i
;
ulint
j
;
ulint
j
;
...
@@ -4070,7 +4091,8 @@ create_index(
...
@@ -4070,7 +4091,8 @@ create_index(
ut_a
(
j
<
form
->
s
->
fields
);
ut_a
(
j
<
form
->
s
->
fields
);
col_type
=
get_innobase_type_from_mysql_type
(
key_part
->
field
);
col_type
=
get_innobase_type_from_mysql_type
(
&
is_unsigned
,
key_part
->
field
);
if
(
DATA_BLOB
==
col_type
if
(
DATA_BLOB
==
col_type
||
(
key_part
->
length
<
field
->
pack_length
()
||
(
key_part
->
length
<
field
->
pack_length
()
...
...
sql/item_timefunc.cc
View file @
e9e64527
...
@@ -2199,7 +2199,7 @@ String *Item_char_typecast::val_str(String *str)
...
@@ -2199,7 +2199,7 @@ String *Item_char_typecast::val_str(String *str)
push_warning_printf
(
current_thd
,
MYSQL_ERROR
::
WARN_LEVEL_WARN
,
push_warning_printf
(
current_thd
,
MYSQL_ERROR
::
WARN_LEVEL_WARN
,
ER_TRUNCATED_WRONG_VALUE
,
ER_TRUNCATED_WRONG_VALUE
,
ER
(
ER_TRUNCATED_WRONG_VALUE
),
char_type
,
ER
(
ER_TRUNCATED_WRONG_VALUE
),
char_type
,
res
->
c_ptr
());
res
->
c_ptr
_safe
());
res
->
length
((
uint
)
length
);
res
->
length
((
uint
)
length
);
}
}
null_value
=
0
;
null_value
=
0
;
...
...
sql/sql_base.cc
View file @
e9e64527
...
@@ -692,11 +692,11 @@ TABLE_LIST *find_table_in_list(TABLE_LIST *table,
...
@@ -692,11 +692,11 @@ TABLE_LIST *find_table_in_list(TABLE_LIST *table,
/*
/*
Test that table is unique
Test that table is unique
(It's only exists once in the table list)
SYNOPSIS
SYNOPSIS
unique_table()
unique_table()
table table which should be ch
a
ked
table table which should be ch
ec
ked
table_list list of tables
table_list list of tables
NOTE: to exclude derived tables from check we use following mechanism:
NOTE: to exclude derived tables from check we use following mechanism:
...
...
sql/sql_class.h
View file @
e9e64527
...
@@ -1410,7 +1410,8 @@ class THD :public ilink,
...
@@ -1410,7 +1410,8 @@ class THD :public ilink,
inline
void
send_kill_message
()
const
inline
void
send_kill_message
()
const
{
{
int
err
=
killed_errno
();
int
err
=
killed_errno
();
my_message
(
err
,
ER
(
err
),
MYF
(
0
));
if
(
err
)
my_message
(
err
,
ER
(
err
),
MYF
(
0
));
}
}
/* return TRUE if we will abort query if we make a warning now */
/* return TRUE if we will abort query if we make a warning now */
inline
bool
really_abort_on_warning
()
inline
bool
really_abort_on_warning
()
...
...
sql/sql_error.cc
View file @
e9e64527
...
@@ -116,15 +116,6 @@ MYSQL_ERROR *push_warning(THD *thd, MYSQL_ERROR::enum_warning_level level,
...
@@ -116,15 +116,6 @@ MYSQL_ERROR *push_warning(THD *thd, MYSQL_ERROR::enum_warning_level level,
if
(
thd
->
query_id
!=
thd
->
warn_id
)
if
(
thd
->
query_id
!=
thd
->
warn_id
)
mysql_reset_errors
(
thd
,
0
);
mysql_reset_errors
(
thd
,
0
);
thd
->
got_warning
=
1
;
thd
->
got_warning
=
1
;
if
(
thd
->
spcont
&&
thd
->
spcont
->
find_handler
(
code
,
((
int
)
level
>=
(
int
)
MYSQL_ERROR
::
WARN_LEVEL_WARN
&&
thd
->
really_abort_on_warning
())
?
MYSQL_ERROR
::
WARN_LEVEL_ERROR
:
level
))
{
DBUG_RETURN
(
NULL
);
}
/* Abort if we are using strict mode and we are not using IGNORE */
/* Abort if we are using strict mode and we are not using IGNORE */
if
((
int
)
level
>=
(
int
)
MYSQL_ERROR
::
WARN_LEVEL_WARN
&&
if
((
int
)
level
>=
(
int
)
MYSQL_ERROR
::
WARN_LEVEL_WARN
&&
...
@@ -132,14 +123,30 @@ MYSQL_ERROR *push_warning(THD *thd, MYSQL_ERROR::enum_warning_level level,
...
@@ -132,14 +123,30 @@ MYSQL_ERROR *push_warning(THD *thd, MYSQL_ERROR::enum_warning_level level,
{
{
/* Avoid my_message() calling push_warning */
/* Avoid my_message() calling push_warning */
bool
no_warnings_for_error
=
thd
->
no_warnings_for_error
;
bool
no_warnings_for_error
=
thd
->
no_warnings_for_error
;
sp_rcontext
*
spcont
=
thd
->
spcont
;
thd
->
no_warnings_for_error
=
1
;
thd
->
no_warnings_for_error
=
1
;
thd
->
spcont
=
0
;
thd
->
killed
=
THD
::
KILL_BAD_DATA
;
thd
->
killed
=
THD
::
KILL_BAD_DATA
;
my_message
(
code
,
msg
,
MYF
(
0
));
my_message
(
code
,
msg
,
MYF
(
0
));
thd
->
spcont
=
spcont
;
thd
->
no_warnings_for_error
=
no_warnings_for_error
;
thd
->
no_warnings_for_error
=
no_warnings_for_error
;
/* Store error in error list (as my_message() didn't do it
in this case
*/
/* Store error in error list (as my_message() didn't do it
)
*/
level
=
MYSQL_ERROR
::
WARN_LEVEL_ERROR
;
level
=
MYSQL_ERROR
::
WARN_LEVEL_ERROR
;
}
}
if
(
thd
->
spcont
&&
thd
->
spcont
->
find_handler
(
code
,
((
int
)
level
>=
(
int
)
MYSQL_ERROR
::
WARN_LEVEL_WARN
&&
thd
->
really_abort_on_warning
())
?
MYSQL_ERROR
::
WARN_LEVEL_ERROR
:
level
))
{
DBUG_RETURN
(
NULL
);
}
if
(
thd
->
warn_list
.
elements
<
thd
->
variables
.
max_error_count
)
if
(
thd
->
warn_list
.
elements
<
thd
->
variables
.
max_error_count
)
{
{
/*
/*
...
...
sql/sql_table.cc
View file @
e9e64527
...
@@ -3740,9 +3740,11 @@ copy_data_between_tables(TABLE *from,TABLE *to,
...
@@ -3740,9 +3740,11 @@ copy_data_between_tables(TABLE *from,TABLE *to,
goto
err
;
goto
err
;
};
};
/* Handler must be told explicitly to retrieve all columns, because
/*
this function does not set field->query_id in the columns to the
Handler must be told explicitly to retrieve all columns, because
current query id */
this function does not set field->query_id in the columns to the
current query id
*/
from
->
file
->
extra
(
HA_EXTRA_RETRIEVE_ALL_COLS
);
from
->
file
->
extra
(
HA_EXTRA_RETRIEVE_ALL_COLS
);
init_read_record
(
&
info
,
thd
,
from
,
(
SQL_SELECT
*
)
0
,
1
,
1
);
init_read_record
(
&
info
,
thd
,
from
,
(
SQL_SELECT
*
)
0
,
1
,
1
);
if
(
ignore
||
if
(
ignore
||
...
...
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