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
d437c35d
Commit
d437c35d
authored
Jun 11, 2015
by
Alexander Barkov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Adding a few warning related protected methods in Field and reducing
some duplicate code.
parent
36f37a48
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
115 additions
and
109 deletions
+115
-109
sql/field.cc
sql/field.cc
+93
-109
sql/field.h
sql/field.h
+22
-0
No files found.
sql/field.cc
View file @
d437c35d
...
@@ -1307,18 +1307,13 @@ int Field_num::check_int(CHARSET_INFO *cs, const char *str, int length,
...
@@ -1307,18 +1307,13 @@ int Field_num::check_int(CHARSET_INFO *cs, const char *str, int length,
if
(
str
==
int_end
||
error
==
MY_ERRNO_EDOM
)
if
(
str
==
int_end
||
error
==
MY_ERRNO_EDOM
)
{
{
ErrConvString
err
(
str
,
length
,
cs
);
ErrConvString
err
(
str
,
length
,
cs
);
push_warning_printf
(
get_thd
(),
Sql_condition
::
WARN_LEVEL_WARN
,
set_warning_truncated_wrong_value
(
"integer"
,
err
.
ptr
());
ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
,
ER
(
ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
),
"integer"
,
err
.
ptr
(),
field_name
,
(
ulong
)
table
->
in_use
->
get_stmt_da
()
->
current_row_for_warning
());
return
1
;
return
1
;
}
}
/* Test if we have garbage at the end of the given string. */
/* Test if we have garbage at the end of the given string. */
if
(
test_if_important_data
(
cs
,
int_end
,
str
+
length
))
if
(
test_if_important_data
(
cs
,
int_end
,
str
+
length
))
{
{
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
WARN_DATA_TRUNCATED
,
1
);
set_warning
(
WARN_DATA_TRUNCATED
,
1
);
return
2
;
return
2
;
}
}
return
0
;
return
0
;
...
@@ -1387,7 +1382,7 @@ bool Field_num::get_int(CHARSET_INFO *cs, const char *from, uint len,
...
@@ -1387,7 +1382,7 @@ bool Field_num::get_int(CHARSET_INFO *cs, const char *from, uint len,
return
0
;
return
0
;
out_of_range:
out_of_range:
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
return
1
;
return
1
;
}
}
...
@@ -1408,12 +1403,12 @@ int Field::warn_if_overflow(int op_result)
...
@@ -1408,12 +1403,12 @@ int Field::warn_if_overflow(int op_result)
{
{
if
(
op_result
==
E_DEC_OVERFLOW
)
if
(
op_result
==
E_DEC_OVERFLOW
)
{
{
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
return
1
;
return
1
;
}
}
if
(
op_result
==
E_DEC_TRUNCATED
)
if
(
op_result
==
E_DEC_TRUNCATED
)
{
{
set_
warning
(
Sql_condition
::
WARN_LEVEL_NOTE
,
WARN_DATA_TRUNCATED
,
1
);
set_
note
(
WARN_DATA_TRUNCATED
,
1
);
/* We return 0 here as this is not a critical issue */
/* We return 0 here as this is not a critical issue */
}
}
return
0
;
return
0
;
...
@@ -1739,7 +1734,7 @@ longlong Field::convert_decimal2longlong(const my_decimal *val,
...
@@ -1739,7 +1734,7 @@ longlong Field::convert_decimal2longlong(const my_decimal *val,
{
{
if
(
val
->
sign
())
if
(
val
->
sign
())
{
{
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
i
=
0
;
i
=
0
;
*
err
=
1
;
*
err
=
1
;
}
}
...
@@ -2047,7 +2042,7 @@ void Field_decimal::overflow(bool negative)
...
@@ -2047,7 +2042,7 @@ void Field_decimal::overflow(bool negative)
uint
len
=
field_length
;
uint
len
=
field_length
;
uchar
*
to
=
ptr
,
filler
=
'9'
;
uchar
*
to
=
ptr
,
filler
=
'9'
;
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
if
(
negative
)
if
(
negative
)
{
{
if
(
!
unsigned_flag
)
if
(
!
unsigned_flag
)
...
@@ -2155,7 +2150,7 @@ int Field_decimal::store(const char *from_arg, uint len, CHARSET_INFO *cs)
...
@@ -2155,7 +2150,7 @@ int Field_decimal::store(const char *from_arg, uint len, CHARSET_INFO *cs)
from
++
;
from
++
;
if
(
from
==
end
)
if
(
from
==
end
)
{
{
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
WARN_DATA_TRUNCATED
,
1
);
set_warning
(
WARN_DATA_TRUNCATED
,
1
);
is_cuted_fields_incr
=
1
;
is_cuted_fields_incr
=
1
;
}
}
else
if
(
*
from
==
'+'
||
*
from
==
'-'
)
// Found some sign ?
else
if
(
*
from
==
'+'
||
*
from
==
'-'
)
// Found some sign ?
...
@@ -2231,7 +2226,7 @@ int Field_decimal::store(const char *from_arg, uint len, CHARSET_INFO *cs)
...
@@ -2231,7 +2226,7 @@ int Field_decimal::store(const char *from_arg, uint len, CHARSET_INFO *cs)
for
(;
from
!=
end
&&
my_isspace
(
&
my_charset_bin
,
*
from
);
from
++
)
;
for
(;
from
!=
end
&&
my_isspace
(
&
my_charset_bin
,
*
from
);
from
++
)
;
if
(
from
!=
end
)
// If still something left, warn
if
(
from
!=
end
)
// If still something left, warn
{
{
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
WARN_DATA_TRUNCATED
,
1
);
set_warning
(
WARN_DATA_TRUNCATED
,
1
);
is_cuted_fields_incr
=
1
;
is_cuted_fields_incr
=
1
;
}
}
}
}
...
@@ -2409,8 +2404,7 @@ int Field_decimal::store(const char *from_arg, uint len, CHARSET_INFO *cs)
...
@@ -2409,8 +2404,7 @@ int Field_decimal::store(const char *from_arg, uint len, CHARSET_INFO *cs)
if
(
tmp_char
!=
'0'
)
// Losing a non zero digit ?
if
(
tmp_char
!=
'0'
)
// Losing a non zero digit ?
{
{
if
(
!
is_cuted_fields_incr
)
if
(
!
is_cuted_fields_incr
)
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
set_warning
(
WARN_DATA_TRUNCATED
,
1
);
WARN_DATA_TRUNCATED
,
1
);
return
0
;
return
0
;
}
}
continue
;
continue
;
...
@@ -2432,7 +2426,7 @@ int Field_decimal::store(const char *from_arg, uint len, CHARSET_INFO *cs)
...
@@ -2432,7 +2426,7 @@ int Field_decimal::store(const char *from_arg, uint len, CHARSET_INFO *cs)
This is a note, not a warning, as we don't want to abort
This is a note, not a warning, as we don't want to abort
when we cut decimals in strict mode
when we cut decimals in strict mode
*/
*/
set_
warning
(
Sql_condition
::
WARN_LEVEL_NOTE
,
WARN_DATA_TRUNCATED
,
1
);
set_
note
(
WARN_DATA_TRUNCATED
,
1
);
}
}
return
0
;
return
0
;
}
}
...
@@ -2782,7 +2776,7 @@ bool Field_new_decimal::store_value(const my_decimal *decimal_value)
...
@@ -2782,7 +2776,7 @@ bool Field_new_decimal::store_value(const my_decimal *decimal_value)
if
(
unsigned_flag
&&
decimal_value
->
sign
())
if
(
unsigned_flag
&&
decimal_value
->
sign
())
{
{
DBUG_PRINT
(
"info"
,
(
"unsigned overflow"
));
DBUG_PRINT
(
"info"
,
(
"unsigned overflow"
));
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
error
=
1
;
error
=
1
;
decimal_value
=
&
decimal_zero
;
decimal_value
=
&
decimal_zero
;
}
}
...
@@ -2826,32 +2820,22 @@ int Field_new_decimal::store(const char *from, uint length,
...
@@ -2826,32 +2820,22 @@ int Field_new_decimal::store(const char *from, uint length,
thd
->
abort_on_warning
)
thd
->
abort_on_warning
)
{
{
ErrConvString
errmsg
(
from
,
length
,
charset_arg
);
ErrConvString
errmsg
(
from
,
length
,
charset_arg
);
push_warning_printf
(
thd
,
Sql_condition
::
WARN_LEVEL_WARN
,
set_warning_truncated_wrong_value
(
"decimal"
,
errmsg
.
ptr
());
ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
,
ER
(
ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
),
"decimal"
,
errmsg
.
ptr
(),
field_name
,
static_cast
<
ulong
>
(
thd
->
get_stmt_da
()
->
current_row_for_warning
()));
DBUG_RETURN
(
err
);
DBUG_RETURN
(
err
);
}
}
switch
(
err
)
{
switch
(
err
)
{
case
E_DEC_TRUNCATED
:
case
E_DEC_TRUNCATED
:
set_
warning
(
Sql_condition
::
WARN_LEVEL_NOTE
,
WARN_DATA_TRUNCATED
,
1
);
set_
note
(
WARN_DATA_TRUNCATED
,
1
);
break
;
break
;
case
E_DEC_OVERFLOW
:
case
E_DEC_OVERFLOW
:
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_value_on_overflow
(
&
decimal_value
,
decimal_value
.
sign
());
set_value_on_overflow
(
&
decimal_value
,
decimal_value
.
sign
());
break
;
break
;
case
E_DEC_BAD_NUM
:
case
E_DEC_BAD_NUM
:
{
{
ErrConvString
errmsg
(
from
,
length
,
charset_arg
);
ErrConvString
errmsg
(
from
,
length
,
charset_arg
);
push_warning_printf
(
thd
,
Sql_condition
::
WARN_LEVEL_WARN
,
set_warning_truncated_wrong_value
(
"decimal"
,
errmsg
.
ptr
());
ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
,
ER
(
ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
),
"decimal"
,
errmsg
.
ptr
(),
field_name
,
static_cast
<
ulong
>
(
thd
->
get_stmt_da
()
->
current_row_for_warning
()));
my_decimal_set_zero
(
&
decimal_value
);
my_decimal_set_zero
(
&
decimal_value
);
break
;
break
;
}
}
...
@@ -3158,13 +3142,13 @@ int Field_tiny::store(double nr)
...
@@ -3158,13 +3142,13 @@ int Field_tiny::store(double nr)
if
(
nr
<
0.0
)
if
(
nr
<
0.0
)
{
{
*
ptr
=
0
;
*
ptr
=
0
;
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
error
=
1
;
error
=
1
;
}
}
else
if
(
nr
>
255.0
)
else
if
(
nr
>
255.0
)
{
{
*
ptr
=
(
uchar
)
255
;
*
ptr
=
(
uchar
)
255
;
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
error
=
1
;
error
=
1
;
}
}
else
else
...
@@ -3175,13 +3159,13 @@ int Field_tiny::store(double nr)
...
@@ -3175,13 +3159,13 @@ int Field_tiny::store(double nr)
if
(
nr
<
-
128.0
)
if
(
nr
<
-
128.0
)
{
{
*
ptr
=
(
uchar
)
-
128
;
*
ptr
=
(
uchar
)
-
128
;
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
error
=
1
;
error
=
1
;
}
}
else
if
(
nr
>
127.0
)
else
if
(
nr
>
127.0
)
{
{
*
ptr
=
127
;
*
ptr
=
127
;
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
error
=
1
;
error
=
1
;
}
}
else
else
...
@@ -3201,13 +3185,13 @@ int Field_tiny::store(longlong nr, bool unsigned_val)
...
@@ -3201,13 +3185,13 @@ int Field_tiny::store(longlong nr, bool unsigned_val)
if
(
nr
<
0
&&
!
unsigned_val
)
if
(
nr
<
0
&&
!
unsigned_val
)
{
{
*
ptr
=
0
;
*
ptr
=
0
;
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
error
=
1
;
error
=
1
;
}
}
else
if
((
ulonglong
)
nr
>
(
ulonglong
)
255
)
else
if
((
ulonglong
)
nr
>
(
ulonglong
)
255
)
{
{
*
ptr
=
(
char
)
255
;
*
ptr
=
(
char
)
255
;
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
error
=
1
;
error
=
1
;
}
}
else
else
...
@@ -3220,13 +3204,13 @@ int Field_tiny::store(longlong nr, bool unsigned_val)
...
@@ -3220,13 +3204,13 @@ int Field_tiny::store(longlong nr, bool unsigned_val)
if
(
nr
<
-
128
)
if
(
nr
<
-
128
)
{
{
*
ptr
=
(
char
)
-
128
;
*
ptr
=
(
char
)
-
128
;
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
error
=
1
;
error
=
1
;
}
}
else
if
(
nr
>
127
)
else
if
(
nr
>
127
)
{
{
*
ptr
=
127
;
*
ptr
=
127
;
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
error
=
1
;
error
=
1
;
}
}
else
else
...
@@ -3337,13 +3321,13 @@ int Field_short::store(double nr)
...
@@ -3337,13 +3321,13 @@ int Field_short::store(double nr)
if
(
nr
<
0
)
if
(
nr
<
0
)
{
{
res
=
0
;
res
=
0
;
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
error
=
1
;
error
=
1
;
}
}
else
if
(
nr
>
(
double
)
UINT_MAX16
)
else
if
(
nr
>
(
double
)
UINT_MAX16
)
{
{
res
=
(
int16
)
UINT_MAX16
;
res
=
(
int16
)
UINT_MAX16
;
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
error
=
1
;
error
=
1
;
}
}
else
else
...
@@ -3354,13 +3338,13 @@ int Field_short::store(double nr)
...
@@ -3354,13 +3338,13 @@ int Field_short::store(double nr)
if
(
nr
<
(
double
)
INT_MIN16
)
if
(
nr
<
(
double
)
INT_MIN16
)
{
{
res
=
INT_MIN16
;
res
=
INT_MIN16
;
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
error
=
1
;
error
=
1
;
}
}
else
if
(
nr
>
(
double
)
INT_MAX16
)
else
if
(
nr
>
(
double
)
INT_MAX16
)
{
{
res
=
INT_MAX16
;
res
=
INT_MAX16
;
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
error
=
1
;
error
=
1
;
}
}
else
else
...
@@ -3382,13 +3366,13 @@ int Field_short::store(longlong nr, bool unsigned_val)
...
@@ -3382,13 +3366,13 @@ int Field_short::store(longlong nr, bool unsigned_val)
if
(
nr
<
0L
&&
!
unsigned_val
)
if
(
nr
<
0L
&&
!
unsigned_val
)
{
{
res
=
0
;
res
=
0
;
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
error
=
1
;
error
=
1
;
}
}
else
if
((
ulonglong
)
nr
>
(
ulonglong
)
UINT_MAX16
)
else
if
((
ulonglong
)
nr
>
(
ulonglong
)
UINT_MAX16
)
{
{
res
=
(
int16
)
UINT_MAX16
;
res
=
(
int16
)
UINT_MAX16
;
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
error
=
1
;
error
=
1
;
}
}
else
else
...
@@ -3402,13 +3386,13 @@ int Field_short::store(longlong nr, bool unsigned_val)
...
@@ -3402,13 +3386,13 @@ int Field_short::store(longlong nr, bool unsigned_val)
if
(
nr
<
INT_MIN16
)
if
(
nr
<
INT_MIN16
)
{
{
res
=
INT_MIN16
;
res
=
INT_MIN16
;
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
error
=
1
;
error
=
1
;
}
}
else
if
(
nr
>
(
longlong
)
INT_MAX16
)
else
if
(
nr
>
(
longlong
)
INT_MAX16
)
{
{
res
=
INT_MAX16
;
res
=
INT_MAX16
;
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
error
=
1
;
error
=
1
;
}
}
else
else
...
@@ -3525,14 +3509,14 @@ int Field_medium::store(double nr)
...
@@ -3525,14 +3509,14 @@ int Field_medium::store(double nr)
if
(
nr
<
0
)
if
(
nr
<
0
)
{
{
int3store
(
ptr
,
0
);
int3store
(
ptr
,
0
);
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
error
=
1
;
error
=
1
;
}
}
else
if
(
nr
>=
(
double
)
(
long
)
(
1L
<<
24
))
else
if
(
nr
>=
(
double
)
(
long
)
(
1L
<<
24
))
{
{
uint32
tmp
=
(
uint32
)
(
1L
<<
24
)
-
1L
;
uint32
tmp
=
(
uint32
)
(
1L
<<
24
)
-
1L
;
int3store
(
ptr
,
tmp
);
int3store
(
ptr
,
tmp
);
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
error
=
1
;
error
=
1
;
}
}
else
else
...
@@ -3544,14 +3528,14 @@ int Field_medium::store(double nr)
...
@@ -3544,14 +3528,14 @@ int Field_medium::store(double nr)
{
{
long
tmp
=
(
long
)
INT_MIN24
;
long
tmp
=
(
long
)
INT_MIN24
;
int3store
(
ptr
,
tmp
);
int3store
(
ptr
,
tmp
);
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
error
=
1
;
error
=
1
;
}
}
else
if
(
nr
>
(
double
)
INT_MAX24
)
else
if
(
nr
>
(
double
)
INT_MAX24
)
{
{
long
tmp
=
(
long
)
INT_MAX24
;
long
tmp
=
(
long
)
INT_MAX24
;
int3store
(
ptr
,
tmp
);
int3store
(
ptr
,
tmp
);
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
error
=
1
;
error
=
1
;
}
}
else
else
...
@@ -3571,14 +3555,14 @@ int Field_medium::store(longlong nr, bool unsigned_val)
...
@@ -3571,14 +3555,14 @@ int Field_medium::store(longlong nr, bool unsigned_val)
if
(
nr
<
0
&&
!
unsigned_val
)
if
(
nr
<
0
&&
!
unsigned_val
)
{
{
int3store
(
ptr
,
0
);
int3store
(
ptr
,
0
);
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
error
=
1
;
error
=
1
;
}
}
else
if
((
ulonglong
)
nr
>=
(
ulonglong
)
(
long
)
(
1L
<<
24
))
else
if
((
ulonglong
)
nr
>=
(
ulonglong
)
(
long
)
(
1L
<<
24
))
{
{
long
tmp
=
(
long
)
(
1L
<<
24
)
-
1L
;
long
tmp
=
(
long
)
(
1L
<<
24
)
-
1L
;
int3store
(
ptr
,
tmp
);
int3store
(
ptr
,
tmp
);
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
error
=
1
;
error
=
1
;
}
}
else
else
...
@@ -3593,14 +3577,14 @@ int Field_medium::store(longlong nr, bool unsigned_val)
...
@@ -3593,14 +3577,14 @@ int Field_medium::store(longlong nr, bool unsigned_val)
{
{
long
tmp
=
(
long
)
INT_MIN24
;
long
tmp
=
(
long
)
INT_MIN24
;
int3store
(
ptr
,
tmp
);
int3store
(
ptr
,
tmp
);
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
error
=
1
;
error
=
1
;
}
}
else
if
(
nr
>
(
longlong
)
INT_MAX24
)
else
if
(
nr
>
(
longlong
)
INT_MAX24
)
{
{
long
tmp
=
(
long
)
INT_MAX24
;
long
tmp
=
(
long
)
INT_MAX24
;
int3store
(
ptr
,
tmp
);
int3store
(
ptr
,
tmp
);
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
error
=
1
;
error
=
1
;
}
}
else
else
...
@@ -3722,7 +3706,7 @@ int Field_long::store(double nr)
...
@@ -3722,7 +3706,7 @@ int Field_long::store(double nr)
else
if
(
nr
>
(
double
)
UINT_MAX32
)
else
if
(
nr
>
(
double
)
UINT_MAX32
)
{
{
res
=
UINT_MAX32
;
res
=
UINT_MAX32
;
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
error
=
1
;
error
=
1
;
}
}
else
else
...
@@ -3744,7 +3728,7 @@ int Field_long::store(double nr)
...
@@ -3744,7 +3728,7 @@ int Field_long::store(double nr)
res
=
(
int32
)
(
longlong
)
nr
;
res
=
(
int32
)
(
longlong
)
nr
;
}
}
if
(
error
)
if
(
error
)
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
int4store
(
ptr
,
res
);
int4store
(
ptr
,
res
);
return
error
;
return
error
;
...
@@ -3790,7 +3774,7 @@ int Field_long::store(longlong nr, bool unsigned_val)
...
@@ -3790,7 +3774,7 @@ int Field_long::store(longlong nr, bool unsigned_val)
res
=
(
int32
)
nr
;
res
=
(
int32
)
nr
;
}
}
if
(
error
)
if
(
error
)
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
int4store
(
ptr
,
res
);
int4store
(
ptr
,
res
);
return
error
;
return
error
;
...
@@ -3889,7 +3873,7 @@ int Field_longlong::store(const char *from,uint len,CHARSET_INFO *cs)
...
@@ -3889,7 +3873,7 @@ int Field_longlong::store(const char *from,uint len,CHARSET_INFO *cs)
tmp
=
cs
->
cset
->
strntoull10rnd
(
cs
,
from
,
len
,
unsigned_flag
,
&
end
,
&
error
);
tmp
=
cs
->
cset
->
strntoull10rnd
(
cs
,
from
,
len
,
unsigned_flag
,
&
end
,
&
error
);
if
(
error
==
MY_ERRNO_ERANGE
)
if
(
error
==
MY_ERRNO_ERANGE
)
{
{
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
error
=
1
;
error
=
1
;
}
}
else
if
(
get_thd
()
->
count_cuted_fields
&&
else
if
(
get_thd
()
->
count_cuted_fields
&&
...
@@ -3911,7 +3895,7 @@ int Field_longlong::store(double nr)
...
@@ -3911,7 +3895,7 @@ int Field_longlong::store(double nr)
res
=
double_to_longlong
(
nr
,
unsigned_flag
,
&
error
);
res
=
double_to_longlong
(
nr
,
unsigned_flag
,
&
error
);
if
(
error
)
if
(
error
)
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
int8store
(
ptr
,
res
);
int8store
(
ptr
,
res
);
return
error
;
return
error
;
...
@@ -3932,7 +3916,7 @@ int Field_longlong::store(longlong nr, bool unsigned_val)
...
@@ -3932,7 +3916,7 @@ int Field_longlong::store(longlong nr, bool unsigned_val)
if
(
unsigned_flag
!=
unsigned_val
)
if
(
unsigned_flag
!=
unsigned_val
)
{
{
nr
=
unsigned_flag
?
(
ulonglong
)
0
:
(
ulonglong
)
LONGLONG_MAX
;
nr
=
unsigned_flag
?
(
ulonglong
)
0
:
(
ulonglong
)
LONGLONG_MAX
;
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
error
=
1
;
error
=
1
;
}
}
}
}
...
@@ -4046,8 +4030,7 @@ int Field_float::store(const char *from,uint len,CHARSET_INFO *cs)
...
@@ -4046,8 +4030,7 @@ int Field_float::store(const char *from,uint len,CHARSET_INFO *cs)
if
(
error
||
(
!
len
||
((
uint
)
(
end
-
from
)
!=
len
&&
if
(
error
||
(
!
len
||
((
uint
)
(
end
-
from
)
!=
len
&&
get_thd
()
->
count_cuted_fields
)))
get_thd
()
->
count_cuted_fields
)))
{
{
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
set_warning
(
error
?
ER_WARN_DATA_OUT_OF_RANGE
:
WARN_DATA_TRUNCATED
,
1
);
(
error
?
ER_WARN_DATA_OUT_OF_RANGE
:
WARN_DATA_TRUNCATED
),
1
);
error
=
error
?
1
:
2
;
error
=
error
?
1
:
2
;
}
}
Field_float
::
store
(
nr
);
Field_float
::
store
(
nr
);
...
@@ -4063,7 +4046,7 @@ int Field_float::store(double nr)
...
@@ -4063,7 +4046,7 @@ int Field_float::store(double nr)
unsigned_flag
,
FLT_MAX
);
unsigned_flag
,
FLT_MAX
);
if
(
error
)
if
(
error
)
{
{
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
if
(
error
<
0
)
// Wrong double value
if
(
error
<
0
)
// Wrong double value
{
{
error
=
1
;
error
=
1
;
...
@@ -4234,8 +4217,7 @@ int Field_double::store(const char *from,uint len,CHARSET_INFO *cs)
...
@@ -4234,8 +4217,7 @@ int Field_double::store(const char *from,uint len,CHARSET_INFO *cs)
if
(
error
||
(
!
len
||
((
uint
)
(
end
-
from
)
!=
len
&&
if
(
error
||
(
!
len
||
((
uint
)
(
end
-
from
)
!=
len
&&
get_thd
()
->
count_cuted_fields
)))
get_thd
()
->
count_cuted_fields
)))
{
{
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
set_warning
(
error
?
ER_WARN_DATA_OUT_OF_RANGE
:
WARN_DATA_TRUNCATED
,
1
);
(
error
?
ER_WARN_DATA_OUT_OF_RANGE
:
WARN_DATA_TRUNCATED
),
1
);
error
=
error
?
1
:
2
;
error
=
error
?
1
:
2
;
}
}
Field_double
::
store
(
nr
);
Field_double
::
store
(
nr
);
...
@@ -4251,7 +4233,7 @@ int Field_double::store(double nr)
...
@@ -4251,7 +4233,7 @@ int Field_double::store(double nr)
unsigned_flag
,
DBL_MAX
);
unsigned_flag
,
DBL_MAX
);
if
(
error
)
if
(
error
)
{
{
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
if
(
error
<
0
)
// Wrong double value
if
(
error
<
0
)
// Wrong double value
{
{
error
=
1
;
error
=
1
;
...
@@ -4612,7 +4594,7 @@ int Field_timestamp::store_TIME_with_warning(THD *thd, MYSQL_TIME *l_time,
...
@@ -4612,7 +4594,7 @@ int Field_timestamp::store_TIME_with_warning(THD *thd, MYSQL_TIME *l_time,
if
(
MYSQL_TIME_WARN_HAVE_WARNINGS
(
was_cut
)
||
!
have_smth_to_conv
)
if
(
MYSQL_TIME_WARN_HAVE_WARNINGS
(
was_cut
)
||
!
have_smth_to_conv
)
{
{
error
=
1
;
error
=
1
;
set_datetime_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
WARN_DATA_TRUNCATED
,
set_datetime_warning
(
WARN_DATA_TRUNCATED
,
str
,
MYSQL_TIMESTAMP_DATETIME
,
1
);
str
,
MYSQL_TIMESTAMP_DATETIME
,
1
);
}
}
else
if
(
MYSQL_TIME_WARN_HAVE_NOTES
(
was_cut
))
else
if
(
MYSQL_TIME_WARN_HAVE_NOTES
(
was_cut
))
...
@@ -4630,7 +4612,7 @@ int Field_timestamp::store_TIME_with_warning(THD *thd, MYSQL_TIME *l_time,
...
@@ -4630,7 +4612,7 @@ int Field_timestamp::store_TIME_with_warning(THD *thd, MYSQL_TIME *l_time,
conversion_error
=
ER_WARN_DATA_OUT_OF_RANGE
;
conversion_error
=
ER_WARN_DATA_OUT_OF_RANGE
;
if
(
conversion_error
)
if
(
conversion_error
)
{
{
set_datetime_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
conversion_error
,
set_datetime_warning
(
conversion_error
,
str
,
MYSQL_TIMESTAMP_DATETIME
,
!
error
);
str
,
MYSQL_TIMESTAMP_DATETIME
,
!
error
);
error
=
1
;
error
=
1
;
}
}
...
@@ -5128,7 +5110,7 @@ void Field_temporal::set_warnings(Sql_condition::enum_warning_level trunc_level,
...
@@ -5128,7 +5110,7 @@ void Field_temporal::set_warnings(Sql_condition::enum_warning_level trunc_level,
set_datetime_warning
(
trunc_level
,
WARN_DATA_TRUNCATED
,
set_datetime_warning
(
trunc_level
,
WARN_DATA_TRUNCATED
,
str
,
mysql_type_to_time_type
(
type
()),
1
);
str
,
mysql_type_to_time_type
(
type
()),
1
);
if
(
was_cut
&
MYSQL_TIME_WARN_OUT_OF_RANGE
)
if
(
was_cut
&
MYSQL_TIME_WARN_OUT_OF_RANGE
)
set_datetime_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
set_datetime_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
str
,
mysql_type_to_time_type
(
type
()),
1
);
str
,
mysql_type_to_time_type
(
type
()),
1
);
}
}
...
@@ -5656,7 +5638,7 @@ int Field_year::store(const char *from, uint len,CHARSET_INFO *cs)
...
@@ -5656,7 +5638,7 @@ int Field_year::store(const char *from, uint len,CHARSET_INFO *cs)
error
==
MY_ERRNO_ERANGE
)
error
==
MY_ERRNO_ERANGE
)
{
{
*
ptr
=
0
;
*
ptr
=
0
;
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
return
1
;
return
1
;
}
}
if
(
get_thd
()
->
count_cuted_fields
&&
if
(
get_thd
()
->
count_cuted_fields
&&
...
@@ -5699,7 +5681,7 @@ int Field_year::store(longlong nr, bool unsigned_val)
...
@@ -5699,7 +5681,7 @@ int Field_year::store(longlong nr, bool unsigned_val)
if
(
nr
<
0
||
(
nr
>=
100
&&
nr
<=
1900
)
||
nr
>
2155
)
if
(
nr
<
0
||
(
nr
>=
100
&&
nr
<=
1900
)
||
nr
>
2155
)
{
{
*
ptr
=
0
;
*
ptr
=
0
;
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
return
1
;
return
1
;
}
}
if
(
nr
!=
0
||
field_length
!=
4
)
// 0000 -> 0; 00 -> 2000
if
(
nr
!=
0
||
field_length
!=
4
)
// 0000 -> 0; 00 -> 2000
...
@@ -5720,8 +5702,7 @@ int Field_year::store_time_dec(MYSQL_TIME *ltime, uint dec)
...
@@ -5720,8 +5702,7 @@ int Field_year::store_time_dec(MYSQL_TIME *ltime, uint dec)
if
(
Field_year
::
store
(
ltime
->
year
,
0
))
if
(
Field_year
::
store
(
ltime
->
year
,
0
))
return
1
;
return
1
;
set_datetime_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
WARN_DATA_TRUNCATED
,
set_datetime_warning
(
WARN_DATA_TRUNCATED
,
&
str
,
ltime
->
time_type
,
1
);
&
str
,
ltime
->
time_type
,
1
);
return
0
;
return
0
;
}
}
...
@@ -6281,31 +6262,21 @@ bool Field_datetimef::get_date(MYSQL_TIME *ltime, ulonglong fuzzydate)
...
@@ -6281,31 +6262,21 @@ bool Field_datetimef::get_date(MYSQL_TIME *ltime, ulonglong fuzzydate)
TRUE - If an error happened
TRUE - If an error happened
*/
*/
static
bool
bool
check_string_copy_error
(
Field_str
*
field
,
Field_longstr
::
check_string_copy_error
(
const
char
*
well_formed_error_pos
,
const
char
*
well_formed_error_pos
,
const
char
*
cannot_convert_error_pos
,
const
char
*
cannot_convert_error_pos
,
const
char
*
end
,
const
char
*
end
,
CHARSET_INFO
*
cs
)
CHARSET_INFO
*
cs
)
{
{
const
char
*
pos
;
const
char
*
pos
;
char
tmp
[
32
];
char
tmp
[
32
];
THD
*
thd
;
thd
=
field
->
get_thd
();
if
(
!
(
pos
=
well_formed_error_pos
)
&&
if
(
!
(
pos
=
well_formed_error_pos
)
&&
!
(
pos
=
cannot_convert_error_pos
))
!
(
pos
=
cannot_convert_error_pos
))
return
FALSE
;
return
FALSE
;
convert_to_printable
(
tmp
,
sizeof
(
tmp
),
pos
,
(
end
-
pos
),
cs
,
6
);
convert_to_printable
(
tmp
,
sizeof
(
tmp
),
pos
,
(
end
-
pos
),
cs
,
6
);
set_warning_truncated_wrong_value
(
"string"
,
tmp
);
push_warning_printf
(
thd
,
Sql_condition
::
WARN_LEVEL_WARN
,
ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
,
ER
(
ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
),
"string"
,
tmp
,
field
->
field_name
,
thd
->
get_stmt_da
()
->
current_row_for_warning
());
return
TRUE
;
return
TRUE
;
}
}
...
@@ -6340,14 +6311,14 @@ Field_longstr::report_if_important_data(const char *pstr, const char *end,
...
@@ -6340,14 +6311,14 @@ Field_longstr::report_if_important_data(const char *pstr, const char *end,
if
(
test_if_important_data
(
field_charset
,
pstr
,
end
))
if
(
test_if_important_data
(
field_charset
,
pstr
,
end
))
{
{
if
(
thd
->
abort_on_warning
)
if
(
thd
->
abort_on_warning
)
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_DATA_TOO_LONG
,
1
);
set_warning
(
ER_DATA_TOO_LONG
,
1
);
else
else
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
WARN_DATA_TRUNCATED
,
1
);
set_warning
(
WARN_DATA_TRUNCATED
,
1
);
return
2
;
return
2
;
}
}
else
if
(
count_spaces
)
else
if
(
count_spaces
)
{
/* If we lost only spaces then produce a NOTE, not a WARNING */
{
/* If we lost only spaces then produce a NOTE, not a WARNING */
set_
warning
(
Sql_condition
::
WARN_LEVEL_NOTE
,
WARN_DATA_TRUNCATED
,
1
);
set_
note
(
WARN_DATA_TRUNCATED
,
1
);
return
2
;
return
2
;
}
}
}
}
...
@@ -6382,7 +6353,7 @@ int Field_string::store(const char *from,uint length,CHARSET_INFO *cs)
...
@@ -6382,7 +6353,7 @@ int Field_string::store(const char *from,uint length,CHARSET_INFO *cs)
field_length
-
copy_length
,
field_length
-
copy_length
,
field_charset
->
pad_char
);
field_charset
->
pad_char
);
if
(
check_string_copy_error
(
this
,
well_formed_error_pos
,
if
(
check_string_copy_error
(
well_formed_error_pos
,
cannot_convert_error_pos
,
from
+
length
,
cs
))
cannot_convert_error_pos
,
from
+
length
,
cs
))
return
2
;
return
2
;
...
@@ -6413,9 +6384,9 @@ int Field_str::store(double nr)
...
@@ -6413,9 +6384,9 @@ int Field_str::store(double nr)
if
(
error
)
if
(
error
)
{
{
if
(
get_thd
()
->
abort_on_warning
)
if
(
get_thd
()
->
abort_on_warning
)
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_DATA_TOO_LONG
,
1
);
set_warning
(
ER_DATA_TOO_LONG
,
1
);
else
else
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
WARN_DATA_TRUNCATED
,
1
);
set_warning
(
WARN_DATA_TRUNCATED
,
1
);
}
}
return
store
(
buff
,
length
,
&
my_charset_numeric
);
return
store
(
buff
,
length
,
&
my_charset_numeric
);
}
}
...
@@ -6891,7 +6862,7 @@ int Field_varstring::store(const char *from,uint length,CHARSET_INFO *cs)
...
@@ -6891,7 +6862,7 @@ int Field_varstring::store(const char *from,uint length,CHARSET_INFO *cs)
else
else
int2store
(
ptr
,
copy_length
);
int2store
(
ptr
,
copy_length
);
if
(
check_string_copy_error
(
this
,
well_formed_error_pos
,
if
(
check_string_copy_error
(
well_formed_error_pos
,
cannot_convert_error_pos
,
from
+
length
,
cs
))
cannot_convert_error_pos
,
from
+
length
,
cs
))
return
2
;
return
2
;
...
@@ -7417,7 +7388,7 @@ int Field_blob::store(const char *from,uint length,CHARSET_INFO *cs)
...
@@ -7417,7 +7388,7 @@ int Field_blob::store(const char *from,uint length,CHARSET_INFO *cs)
tmp
=
value
.
ptr
();
tmp
=
value
.
ptr
();
bmove
(
ptr
+
packlength
,(
uchar
*
)
&
tmp
,
sizeof
(
char
*
));
bmove
(
ptr
+
packlength
,(
uchar
*
)
&
tmp
,
sizeof
(
char
*
));
if
(
check_string_copy_error
(
this
,
well_formed_error_pos
,
if
(
check_string_copy_error
(
well_formed_error_pos
,
cannot_convert_error_pos
,
from
+
length
,
cs
))
cannot_convert_error_pos
,
from
+
length
,
cs
))
return
2
;
return
2
;
...
@@ -7983,13 +7954,13 @@ int Field_enum::store(const char *from,uint length,CHARSET_INFO *cs)
...
@@ -7983,13 +7954,13 @@ int Field_enum::store(const char *from,uint length,CHARSET_INFO *cs)
if
(
err
||
end
!=
from
+
length
||
tmp
>
typelib
->
count
)
if
(
err
||
end
!=
from
+
length
||
tmp
>
typelib
->
count
)
{
{
tmp
=
0
;
tmp
=
0
;
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
WARN_DATA_TRUNCATED
,
1
);
set_warning
(
WARN_DATA_TRUNCATED
,
1
);
}
}
if
(
!
get_thd
()
->
count_cuted_fields
)
if
(
!
get_thd
()
->
count_cuted_fields
)
err
=
0
;
err
=
0
;
}
}
else
else
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
WARN_DATA_TRUNCATED
,
1
);
set_warning
(
WARN_DATA_TRUNCATED
,
1
);
}
}
store_type
((
ulonglong
)
tmp
);
store_type
((
ulonglong
)
tmp
);
return
err
;
return
err
;
...
@@ -8008,7 +7979,7 @@ int Field_enum::store(longlong nr, bool unsigned_val)
...
@@ -8008,7 +7979,7 @@ int Field_enum::store(longlong nr, bool unsigned_val)
int
error
=
0
;
int
error
=
0
;
if
((
ulonglong
)
nr
>
typelib
->
count
||
nr
==
0
)
if
((
ulonglong
)
nr
>
typelib
->
count
||
nr
==
0
)
{
{
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
WARN_DATA_TRUNCATED
,
1
);
set_warning
(
WARN_DATA_TRUNCATED
,
1
);
if
(
nr
!=
0
||
get_thd
()
->
count_cuted_fields
)
if
(
nr
!=
0
||
get_thd
()
->
count_cuted_fields
)
{
{
nr
=
0
;
nr
=
0
;
...
@@ -8161,11 +8132,11 @@ int Field_set::store(const char *from,uint length,CHARSET_INFO *cs)
...
@@ -8161,11 +8132,11 @@ int Field_set::store(const char *from,uint length,CHARSET_INFO *cs)
tmp
>
(
ulonglong
)
(((
longlong
)
1
<<
typelib
->
count
)
-
(
longlong
)
1
))
tmp
>
(
ulonglong
)
(((
longlong
)
1
<<
typelib
->
count
)
-
(
longlong
)
1
))
{
{
tmp
=
0
;
tmp
=
0
;
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
WARN_DATA_TRUNCATED
,
1
);
set_warning
(
WARN_DATA_TRUNCATED
,
1
);
}
}
}
}
else
if
(
got_warning
)
else
if
(
got_warning
)
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
WARN_DATA_TRUNCATED
,
1
);
set_warning
(
WARN_DATA_TRUNCATED
,
1
);
store_type
(
tmp
);
store_type
(
tmp
);
return
err
;
return
err
;
}
}
...
@@ -8185,7 +8156,7 @@ int Field_set::store(longlong nr, bool unsigned_val)
...
@@ -8185,7 +8156,7 @@ int Field_set::store(longlong nr, bool unsigned_val)
if
((
ulonglong
)
nr
>
max_nr
)
if
((
ulonglong
)
nr
>
max_nr
)
{
{
nr
&=
max_nr
;
nr
&=
max_nr
;
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
WARN_DATA_TRUNCATED
,
1
);
set_warning
(
WARN_DATA_TRUNCATED
,
1
);
error
=
1
;
error
=
1
;
}
}
store_type
((
ulonglong
)
nr
);
store_type
((
ulonglong
)
nr
);
...
@@ -8537,9 +8508,9 @@ int Field_bit::store(const char *from, uint length, CHARSET_INFO *cs)
...
@@ -8537,9 +8508,9 @@ int Field_bit::store(const char *from, uint length, CHARSET_INFO *cs)
set_rec_bits
((
1
<<
bit_len
)
-
1
,
bit_ptr
,
bit_ofs
,
bit_len
);
set_rec_bits
((
1
<<
bit_len
)
-
1
,
bit_ptr
,
bit_ofs
,
bit_len
);
memset
(
ptr
,
0xff
,
bytes_in_rec
);
memset
(
ptr
,
0xff
,
bytes_in_rec
);
if
(
get_thd
()
->
really_abort_on_warning
())
if
(
get_thd
()
->
really_abort_on_warning
())
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_DATA_TOO_LONG
,
1
);
set_warning
(
ER_DATA_TOO_LONG
,
1
);
else
else
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
return
1
;
return
1
;
}
}
/* delta is >= -1 here */
/* delta is >= -1 here */
...
@@ -8974,9 +8945,9 @@ int Field_bit_as_char::store(const char *from, uint length, CHARSET_INFO *cs)
...
@@ -8974,9 +8945,9 @@ int Field_bit_as_char::store(const char *from, uint length, CHARSET_INFO *cs)
if
(
bits
)
if
(
bits
)
*
ptr
&=
((
1
<<
bits
)
-
1
);
/* set first uchar */
*
ptr
&=
((
1
<<
bits
)
-
1
);
/* set first uchar */
if
(
get_thd
()
->
really_abort_on_warning
())
if
(
get_thd
()
->
really_abort_on_warning
())
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_DATA_TOO_LONG
,
1
);
set_warning
(
ER_DATA_TOO_LONG
,
1
);
else
else
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
return
1
;
return
1
;
}
}
bzero
(
ptr
,
delta
);
bzero
(
ptr
,
delta
);
...
@@ -10119,6 +10090,19 @@ void Field::set_datetime_warning(Sql_condition::enum_warning_level level,
...
@@ -10119,6 +10090,19 @@ void Field::set_datetime_warning(Sql_condition::enum_warning_level level,
}
}
void
Field
::
set_warning_truncated_wrong_value
(
const
char
*
type
,
const
char
*
value
)
{
THD
*
thd
=
get_thd
();
push_warning_printf
(
thd
,
Sql_condition
::
WARN_LEVEL_WARN
,
ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
,
ER
(
ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
),
type
,
value
,
field_name
,
static_cast
<
ulong
>
(
thd
->
get_stmt_da
()
->
current_row_for_warning
()));
}
/*
/*
@brief
@brief
Return possible keys for a field
Return possible keys for a field
...
...
sql/field.h
View file @
d437c35d
...
@@ -885,14 +885,32 @@ public:
...
@@ -885,14 +885,32 @@ public:
virtual
int
set_time
()
{
return
1
;
}
virtual
int
set_time
()
{
return
1
;
}
bool
set_warning
(
Sql_condition
::
enum_warning_level
,
unsigned
int
code
,
bool
set_warning
(
Sql_condition
::
enum_warning_level
,
unsigned
int
code
,
int
cuted_increment
)
const
;
int
cuted_increment
)
const
;
protected:
bool
set_warning
(
unsigned
int
code
,
int
cuted_increment
)
const
{
return
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
code
,
cuted_increment
);
}
bool
set_note
(
unsigned
int
code
,
int
cuted_increment
)
const
{
return
set_warning
(
Sql_condition
::
WARN_LEVEL_NOTE
,
code
,
cuted_increment
);
}
void
set_datetime_warning
(
Sql_condition
::
enum_warning_level
,
uint
code
,
void
set_datetime_warning
(
Sql_condition
::
enum_warning_level
,
uint
code
,
const
ErrConv
*
str
,
timestamp_type
ts_type
,
const
ErrConv
*
str
,
timestamp_type
ts_type
,
int
cuted_increment
);
int
cuted_increment
);
void
set_datetime_warning
(
uint
code
,
const
ErrConv
*
str
,
timestamp_type
ts_type
,
int
cuted_increment
)
{
set_datetime_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
code
,
str
,
ts_type
,
cuted_increment
);
}
void
set_warning_truncated_wrong_value
(
const
char
*
type
,
const
char
*
value
);
inline
bool
check_overflow
(
int
op_result
)
inline
bool
check_overflow
(
int
op_result
)
{
{
return
(
op_result
==
E_DEC_OVERFLOW
);
return
(
op_result
==
E_DEC_OVERFLOW
);
}
}
int
warn_if_overflow
(
int
op_result
);
int
warn_if_overflow
(
int
op_result
);
public:
void
set_table_name
(
String
*
alias
)
void
set_table_name
(
String
*
alias
)
{
{
table_name
=
&
alias
->
Ptr
;
table_name
=
&
alias
->
Ptr
;
...
@@ -1139,6 +1157,10 @@ class Field_longstr :public Field_str
...
@@ -1139,6 +1157,10 @@ class Field_longstr :public Field_str
protected:
protected:
int
report_if_important_data
(
const
char
*
ptr
,
const
char
*
end
,
int
report_if_important_data
(
const
char
*
ptr
,
const
char
*
end
,
bool
count_spaces
);
bool
count_spaces
);
bool
check_string_copy_error
(
const
char
*
well_formed_error_pos
,
const
char
*
cannot_convert_error_pos
,
const
char
*
end
,
CHARSET_INFO
*
cs
);
public:
public:
Field_longstr
(
uchar
*
ptr_arg
,
uint32
len_arg
,
uchar
*
null_ptr_arg
,
Field_longstr
(
uchar
*
ptr_arg
,
uint32
len_arg
,
uchar
*
null_ptr_arg
,
uchar
null_bit_arg
,
utype
unireg_check_arg
,
uchar
null_bit_arg
,
utype
unireg_check_arg
,
...
...
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