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
Show 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,
if
(
str
==
int_end
||
error
==
MY_ERRNO_EDOM
)
{
ErrConvString
err
(
str
,
length
,
cs
);
push_warning_printf
(
get_thd
(),
Sql_condition
::
WARN_LEVEL_WARN
,
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
());
set_warning_truncated_wrong_value
(
"integer"
,
err
.
ptr
());
return
1
;
}
/* Test if we have garbage at the end of the given string. */
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
0
;
...
...
@@ -1387,7 +1382,7 @@ bool Field_num::get_int(CHARSET_INFO *cs, const char *from, uint len,
return
0
;
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
;
}
...
...
@@ -1408,12 +1403,12 @@ int Field::warn_if_overflow(int op_result)
{
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
;
}
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 */
}
return
0
;
...
...
@@ -1739,7 +1734,7 @@ longlong Field::convert_decimal2longlong(const my_decimal *val,
{
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
;
*
err
=
1
;
}
...
...
@@ -2047,7 +2042,7 @@ void Field_decimal::overflow(bool negative)
uint
len
=
field_length
;
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
(
!
unsigned_flag
)
...
...
@@ -2155,7 +2150,7 @@ int Field_decimal::store(const char *from_arg, uint len, CHARSET_INFO *cs)
from
++
;
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
;
}
else
if
(
*
from
==
'+'
||
*
from
==
'-'
)
// Found some sign ?
...
...
@@ -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
++
)
;
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
;
}
}
...
...
@@ -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
(
!
is_cuted_fields_incr
)
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
WARN_DATA_TRUNCATED
,
1
);
set_warning
(
WARN_DATA_TRUNCATED
,
1
);
return
0
;
}
continue
;
...
...
@@ -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
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
;
}
...
...
@@ -2782,7 +2776,7 @@ bool Field_new_decimal::store_value(const my_decimal *decimal_value)
if
(
unsigned_flag
&&
decimal_value
->
sign
())
{
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
;
decimal_value
=
&
decimal_zero
;
}
...
...
@@ -2826,32 +2820,22 @@ int Field_new_decimal::store(const char *from, uint length,
thd
->
abort_on_warning
)
{
ErrConvString
errmsg
(
from
,
length
,
charset_arg
);
push_warning_printf
(
thd
,
Sql_condition
::
WARN_LEVEL_WARN
,
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
()));
set_warning_truncated_wrong_value
(
"decimal"
,
errmsg
.
ptr
());
DBUG_RETURN
(
err
);
}
switch
(
err
)
{
case
E_DEC_TRUNCATED
:
set_
warning
(
Sql_condition
::
WARN_LEVEL_NOTE
,
WARN_DATA_TRUNCATED
,
1
);
set_
note
(
WARN_DATA_TRUNCATED
,
1
);
break
;
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
());
break
;
case
E_DEC_BAD_NUM
:
{
ErrConvString
errmsg
(
from
,
length
,
charset_arg
);
push_warning_printf
(
thd
,
Sql_condition
::
WARN_LEVEL_WARN
,
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
()));
set_warning_truncated_wrong_value
(
"decimal"
,
errmsg
.
ptr
());
my_decimal_set_zero
(
&
decimal_value
);
break
;
}
...
...
@@ -3158,13 +3142,13 @@ int Field_tiny::store(double nr)
if
(
nr
<
0.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
;
}
else
if
(
nr
>
255.0
)
{
*
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
;
}
else
...
...
@@ -3175,13 +3159,13 @@ int Field_tiny::store(double nr)
if
(
nr
<
-
128.0
)
{
*
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
;
}
else
if
(
nr
>
127.0
)
{
*
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
;
}
else
...
...
@@ -3201,13 +3185,13 @@ int Field_tiny::store(longlong nr, bool unsigned_val)
if
(
nr
<
0
&&
!
unsigned_val
)
{
*
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
;
}
else
if
((
ulonglong
)
nr
>
(
ulonglong
)
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
;
}
else
...
...
@@ -3220,13 +3204,13 @@ int Field_tiny::store(longlong nr, bool unsigned_val)
if
(
nr
<
-
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
;
}
else
if
(
nr
>
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
;
}
else
...
...
@@ -3337,13 +3321,13 @@ int Field_short::store(double nr)
if
(
nr
<
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
;
}
else
if
(
nr
>
(
double
)
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
;
}
else
...
...
@@ -3354,13 +3338,13 @@ int Field_short::store(double nr)
if
(
nr
<
(
double
)
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
;
}
else
if
(
nr
>
(
double
)
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
;
}
else
...
...
@@ -3382,13 +3366,13 @@ int Field_short::store(longlong nr, bool unsigned_val)
if
(
nr
<
0L
&&
!
unsigned_val
)
{
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
;
}
else
if
((
ulonglong
)
nr
>
(
ulonglong
)
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
;
}
else
...
...
@@ -3402,13 +3386,13 @@ int Field_short::store(longlong nr, bool unsigned_val)
if
(
nr
<
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
;
}
else
if
(
nr
>
(
longlong
)
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
;
}
else
...
...
@@ -3525,14 +3509,14 @@ int Field_medium::store(double nr)
if
(
nr
<
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
;
}
else
if
(
nr
>=
(
double
)
(
long
)
(
1L
<<
24
))
{
uint32
tmp
=
(
uint32
)
(
1L
<<
24
)
-
1L
;
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
;
}
else
...
...
@@ -3544,14 +3528,14 @@ int Field_medium::store(double nr)
{
long
tmp
=
(
long
)
INT_MIN24
;
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
;
}
else
if
(
nr
>
(
double
)
INT_MAX24
)
{
long
tmp
=
(
long
)
INT_MAX24
;
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
;
}
else
...
...
@@ -3571,14 +3555,14 @@ int Field_medium::store(longlong nr, bool unsigned_val)
if
(
nr
<
0
&&
!
unsigned_val
)
{
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
;
}
else
if
((
ulonglong
)
nr
>=
(
ulonglong
)
(
long
)
(
1L
<<
24
))
{
long
tmp
=
(
long
)
(
1L
<<
24
)
-
1L
;
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
;
}
else
...
...
@@ -3593,14 +3577,14 @@ int Field_medium::store(longlong nr, bool unsigned_val)
{
long
tmp
=
(
long
)
INT_MIN24
;
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
;
}
else
if
(
nr
>
(
longlong
)
INT_MAX24
)
{
long
tmp
=
(
long
)
INT_MAX24
;
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
;
}
else
...
...
@@ -3722,7 +3706,7 @@ int Field_long::store(double nr)
else
if
(
nr
>
(
double
)
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
;
}
else
...
...
@@ -3744,7 +3728,7 @@ int Field_long::store(double nr)
res
=
(
int32
)
(
longlong
)
nr
;
}
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
);
return
error
;
...
...
@@ -3790,7 +3774,7 @@ int Field_long::store(longlong nr, bool unsigned_val)
res
=
(
int32
)
nr
;
}
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
);
return
error
;
...
...
@@ -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
);
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
;
}
else
if
(
get_thd
()
->
count_cuted_fields
&&
...
...
@@ -3911,7 +3895,7 @@ int Field_longlong::store(double nr)
res
=
double_to_longlong
(
nr
,
unsigned_flag
,
&
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
);
return
error
;
...
...
@@ -3932,7 +3916,7 @@ int Field_longlong::store(longlong nr, bool unsigned_val)
if
(
unsigned_flag
!=
unsigned_val
)
{
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
;
}
}
...
...
@@ -4046,8 +4030,7 @@ int Field_float::store(const char *from,uint len,CHARSET_INFO *cs)
if
(
error
||
(
!
len
||
((
uint
)
(
end
-
from
)
!=
len
&&
get_thd
()
->
count_cuted_fields
)))
{
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
(
error
?
ER_WARN_DATA_OUT_OF_RANGE
:
WARN_DATA_TRUNCATED
),
1
);
set_warning
(
error
?
ER_WARN_DATA_OUT_OF_RANGE
:
WARN_DATA_TRUNCATED
,
1
);
error
=
error
?
1
:
2
;
}
Field_float
::
store
(
nr
);
...
...
@@ -4063,7 +4046,7 @@ int Field_float::store(double nr)
unsigned_flag
,
FLT_MAX
);
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
{
error
=
1
;
...
...
@@ -4234,8 +4217,7 @@ int Field_double::store(const char *from,uint len,CHARSET_INFO *cs)
if
(
error
||
(
!
len
||
((
uint
)
(
end
-
from
)
!=
len
&&
get_thd
()
->
count_cuted_fields
)))
{
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
(
error
?
ER_WARN_DATA_OUT_OF_RANGE
:
WARN_DATA_TRUNCATED
),
1
);
set_warning
(
error
?
ER_WARN_DATA_OUT_OF_RANGE
:
WARN_DATA_TRUNCATED
,
1
);
error
=
error
?
1
:
2
;
}
Field_double
::
store
(
nr
);
...
...
@@ -4251,7 +4233,7 @@ int Field_double::store(double nr)
unsigned_flag
,
DBL_MAX
);
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
{
error
=
1
;
...
...
@@ -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
)
{
error
=
1
;
set_datetime_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
WARN_DATA_TRUNCATED
,
set_datetime_warning
(
WARN_DATA_TRUNCATED
,
str
,
MYSQL_TIMESTAMP_DATETIME
,
1
);
}
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,
conversion_error
=
ER_WARN_DATA_OUT_OF_RANGE
;
if
(
conversion_error
)
{
set_datetime_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
conversion_error
,
set_datetime_warning
(
conversion_error
,
str
,
MYSQL_TIMESTAMP_DATETIME
,
!
error
);
error
=
1
;
}
...
...
@@ -5128,7 +5110,7 @@ void Field_temporal::set_warnings(Sql_condition::enum_warning_level trunc_level,
set_datetime_warning
(
trunc_level
,
WARN_DATA_TRUNCATED
,
str
,
mysql_type_to_time_type
(
type
()),
1
);
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
);
}
...
...
@@ -5656,7 +5638,7 @@ int Field_year::store(const char *from, uint len,CHARSET_INFO *cs)
error
==
MY_ERRNO_ERANGE
)
{
*
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
;
}
if
(
get_thd
()
->
count_cuted_fields
&&
...
...
@@ -5699,7 +5681,7 @@ int Field_year::store(longlong nr, bool unsigned_val)
if
(
nr
<
0
||
(
nr
>=
100
&&
nr
<=
1900
)
||
nr
>
2155
)
{
*
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
;
}
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)
if
(
Field_year
::
store
(
ltime
->
year
,
0
))
return
1
;
set_datetime_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
WARN_DATA_TRUNCATED
,
&
str
,
ltime
->
time_type
,
1
);
set_datetime_warning
(
WARN_DATA_TRUNCATED
,
&
str
,
ltime
->
time_type
,
1
);
return
0
;
}
...
...
@@ -6281,31 +6262,21 @@ bool Field_datetimef::get_date(MYSQL_TIME *ltime, ulonglong fuzzydate)
TRUE - If an error happened
*/
static
bool
check_string_copy_error
(
Field_str
*
field
,
const
char
*
well_formed_error_pos
,
bool
Field_longstr
::
check_string_copy_error
(
const
char
*
well_formed_error_pos
,
const
char
*
cannot_convert_error_pos
,
const
char
*
end
,
CHARSET_INFO
*
cs
)
{
const
char
*
pos
;
char
tmp
[
32
];
THD
*
thd
;
thd
=
field
->
get_thd
();
if
(
!
(
pos
=
well_formed_error_pos
)
&&
!
(
pos
=
cannot_convert_error_pos
))
return
FALSE
;
convert_to_printable
(
tmp
,
sizeof
(
tmp
),
pos
,
(
end
-
pos
),
cs
,
6
);
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
());
set_warning_truncated_wrong_value
(
"string"
,
tmp
);
return
TRUE
;
}
...
...
@@ -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
(
thd
->
abort_on_warning
)
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
ER_DATA_TOO_LONG
,
1
);
set_warning
(
ER_DATA_TOO_LONG
,
1
);
else
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
WARN_DATA_TRUNCATED
,
1
);
set_warning
(
WARN_DATA_TRUNCATED
,
1
);
return
2
;
}
else
if
(
count_spaces
)
{
/* 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
;
}
}
...
...
@@ -6382,7 +6353,7 @@ int Field_string::store(const char *from,uint length,CHARSET_INFO *cs)
field_length
-
copy_length
,
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
))
return
2
;
...
...
@@ -6413,9 +6384,9 @@ int Field_str::store(double nr)
if
(
error
)
{
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
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
WARN_DATA_TRUNCATED
,
1
);
set_warning
(
WARN_DATA_TRUNCATED
,
1
);
}
return
store
(
buff
,
length
,
&
my_charset_numeric
);
}
...
...
@@ -6891,7 +6862,7 @@ int Field_varstring::store(const char *from,uint length,CHARSET_INFO *cs)
else
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
))
return
2
;
...
...
@@ -7417,7 +7388,7 @@ int Field_blob::store(const char *from,uint length,CHARSET_INFO *cs)
tmp
=
value
.
ptr
();
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
))
return
2
;
...
...
@@ -7983,13 +7954,13 @@ int Field_enum::store(const char *from,uint length,CHARSET_INFO *cs)
if
(
err
||
end
!=
from
+
length
||
tmp
>
typelib
->
count
)
{
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
)
err
=
0
;
}
else
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
WARN_DATA_TRUNCATED
,
1
);
set_warning
(
WARN_DATA_TRUNCATED
,
1
);
}
store_type
((
ulonglong
)
tmp
);
return
err
;
...
...
@@ -8008,7 +7979,7 @@ int Field_enum::store(longlong nr, bool unsigned_val)
int
error
=
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
)
{
nr
=
0
;
...
...
@@ -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
=
0
;
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
WARN_DATA_TRUNCATED
,
1
);
set_warning
(
WARN_DATA_TRUNCATED
,
1
);
}
}
else
if
(
got_warning
)
set_warning
(
Sql_condition
::
WARN_LEVEL_WARN
,
WARN_DATA_TRUNCATED
,
1
);
set_warning
(
WARN_DATA_TRUNCATED
,
1
);
store_type
(
tmp
);
return
err
;
}
...
...
@@ -8185,7 +8156,7 @@ int Field_set::store(longlong nr, bool unsigned_val)
if
((
ulonglong
)
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
;
}
store_type
((
ulonglong
)
nr
);
...
...
@@ -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
);
memset
(
ptr
,
0xff
,
bytes_in_rec
);
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
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
;
}
/* delta is >= -1 here */
...
...
@@ -8974,9 +8945,9 @@ int Field_bit_as_char::store(const char *from, uint length, CHARSET_INFO *cs)
if
(
bits
)
*
ptr
&=
((
1
<<
bits
)
-
1
);
/* set first uchar */
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
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
;
}
bzero
(
ptr
,
delta
);
...
...
@@ -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
Return possible keys for a field
...
...
sql/field.h
View file @
d437c35d
...
...
@@ -885,14 +885,32 @@ public:
virtual
int
set_time
()
{
return
1
;
}
bool
set_warning
(
Sql_condition
::
enum_warning_level
,
unsigned
int
code
,
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
,
const
ErrConv
*
str
,
timestamp_type
ts_type
,
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
)
{
return
(
op_result
==
E_DEC_OVERFLOW
);
}
int
warn_if_overflow
(
int
op_result
);
public:
void
set_table_name
(
String
*
alias
)
{
table_name
=
&
alias
->
Ptr
;
...
...
@@ -1139,6 +1157,10 @@ class Field_longstr :public Field_str
protected:
int
report_if_important_data
(
const
char
*
ptr
,
const
char
*
end
,
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:
Field_longstr
(
uchar
*
ptr_arg
,
uint32
len_arg
,
uchar
*
null_ptr_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