Commit eb67909b authored by hf@deer.(none)'s avatar hf@deer.(none)

WL#1600 (Warn if result is truncatet due to max_allowed_packet)

parent 6acd105b
...@@ -316,4 +316,5 @@ ...@@ -316,4 +316,5 @@
#define ER_GET_TEMPORARY_ERRMSG 1297 #define ER_GET_TEMPORARY_ERRMSG 1297
#define ER_UNKNOWN_TIME_ZONE 1298 #define ER_UNKNOWN_TIME_ZONE 1298
#define ER_WARN_INVALID_TIMESTAMP 1299 #define ER_WARN_INVALID_TIMESTAMP 1299
#define ER_ERROR_MESSAGES 300 #define ER_WARN_ALLOWED_PACKET_OVERFLOWED 1300
#define ER_ERROR_MESSAGES 301
...@@ -225,6 +225,8 @@ substring_index("www.tcx.se","",3) ...@@ -225,6 +225,8 @@ substring_index("www.tcx.se","",3)
select length(repeat("a",100000000)),length(repeat("a",1000*64)); select length(repeat("a",100000000)),length(repeat("a",1000*64));
length(repeat("a",100000000)) length(repeat("a",1000*64)) length(repeat("a",100000000)) length(repeat("a",1000*64))
NULL 64000 NULL 64000
Warnings:
Warning 1300 Data truncated by function 'repeat' do to max_allowed_packet
select position("0" in "baaa" in (1)),position("0" in "1" in (1,2,3)),position("sql" in ("mysql")); select position("0" in "baaa" in (1)),position("0" in "1" in (1,2,3)),position("sql" in ("mysql"));
position("0" in "baaa" in (1)) position("0" in "1" in (1,2,3)) position("sql" in ("mysql")) position("0" in "baaa" in (1)) position("0" in "1" in (1,2,3)) position("sql" in ("mysql"))
1 0 3 1 0 3
......
...@@ -8,6 +8,8 @@ len ...@@ -8,6 +8,8 @@ len
select repeat('a',2000); select repeat('a',2000);
repeat('a',2000) repeat('a',2000)
NULL NULL
Warnings:
Warning 1300 Data truncated by function 'repeat' do to max_allowed_packet
select @@net_buffer_length, @@max_allowed_packet; select @@net_buffer_length, @@max_allowed_packet;
@@net_buffer_length @@max_allowed_packet @@net_buffer_length @@max_allowed_packet
1024 1024 1024 1024
......
...@@ -446,7 +446,12 @@ String *Item_func_spatial_collection::val_str(String *str) ...@@ -446,7 +446,12 @@ String *Item_func_spatial_collection::val_str(String *str)
} }
} }
if (str->length() > current_thd->variables.max_allowed_packet) if (str->length() > current_thd->variables.max_allowed_packet)
{
push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
ER_WARN_ALLOWED_PACKET_OVERFLOWED,
ER(ER_WARN_ALLOWED_PACKET_OVERFLOWED), func_name());
goto err; goto err;
}
null_value = 0; null_value = 0;
return str; return str;
......
...@@ -266,7 +266,12 @@ String *Item_func_concat::val_str(String *str) ...@@ -266,7 +266,12 @@ String *Item_func_concat::val_str(String *str)
continue; continue;
if (res->length()+res2->length() > if (res->length()+res2->length() >
current_thd->variables.max_allowed_packet) current_thd->variables.max_allowed_packet)
goto null; // Error check {
push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
ER_WARN_ALLOWED_PACKET_OVERFLOWED,
ER(ER_WARN_ALLOWED_PACKET_OVERFLOWED), func_name());
goto null;
}
if (res->alloced_length() >= res->length()+res2->length()) if (res->alloced_length() >= res->length()+res2->length())
{ // Use old buffer { // Use old buffer
res->append(*res2); res->append(*res2);
...@@ -544,7 +549,12 @@ String *Item_func_concat_ws::val_str(String *str) ...@@ -544,7 +549,12 @@ String *Item_func_concat_ws::val_str(String *str)
if (res->length() + sep_str->length() + res2->length() > if (res->length() + sep_str->length() + res2->length() >
current_thd->variables.max_allowed_packet) current_thd->variables.max_allowed_packet)
goto null; // Error check {
push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
ER_WARN_ALLOWED_PACKET_OVERFLOWED,
ER(ER_WARN_ALLOWED_PACKET_OVERFLOWED), func_name());
goto null;
}
if (res->alloced_length() >= if (res->alloced_length() >=
res->length() + sep_str->length() + res2->length()) res->length() + sep_str->length() + res2->length())
{ // Use old buffer { // Use old buffer
...@@ -801,7 +811,14 @@ redo: ...@@ -801,7 +811,14 @@ redo:
offset= (int) (ptr-res->ptr()); offset= (int) (ptr-res->ptr());
if (res->length()-from_length + to_length > if (res->length()-from_length + to_length >
current_thd->variables.max_allowed_packet) current_thd->variables.max_allowed_packet)
{
push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
ER_WARN_ALLOWED_PACKET_OVERFLOWED,
ER(ER_WARN_ALLOWED_PACKET_OVERFLOWED),
func_name());
goto null; goto null;
}
if (!alloced) if (!alloced)
{ {
alloced=1; alloced=1;
...@@ -822,7 +839,12 @@ skip: ...@@ -822,7 +839,12 @@ skip:
{ {
if (res->length()-from_length + to_length > if (res->length()-from_length + to_length >
current_thd->variables.max_allowed_packet) current_thd->variables.max_allowed_packet)
{
push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
ER_WARN_ALLOWED_PACKET_OVERFLOWED,
ER(ER_WARN_ALLOWED_PACKET_OVERFLOWED), func_name());
goto null; goto null;
}
if (!alloced) if (!alloced)
{ {
alloced=1; alloced=1;
...@@ -882,7 +904,12 @@ String *Item_func_insert::val_str(String *str) ...@@ -882,7 +904,12 @@ String *Item_func_insert::val_str(String *str)
length=res->length()-start; length=res->length()-start;
if (res->length() - length + res2->length() > if (res->length() - length + res2->length() >
current_thd->variables.max_allowed_packet) current_thd->variables.max_allowed_packet)
goto null; // OOM check {
push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
ER_WARN_ALLOWED_PACKET_OVERFLOWED,
ER(ER_WARN_ALLOWED_PACKET_OVERFLOWED), func_name());
goto null;
}
res=copy_if_not_alloced(str,res,res->length()); res=copy_if_not_alloced(str,res,res->length());
res->replace(start,length,*res2); res->replace(start,length,*res2);
return res; return res;
...@@ -1934,7 +1961,12 @@ String *Item_func_repeat::val_str(String *str) ...@@ -1934,7 +1961,12 @@ String *Item_func_repeat::val_str(String *str)
length=res->length(); length=res->length();
// Safe length check // Safe length check
if (length > current_thd->variables.max_allowed_packet/count) if (length > current_thd->variables.max_allowed_packet/count)
goto err; // Probably an error {
push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
ER_WARN_ALLOWED_PACKET_OVERFLOWED,
ER(ER_WARN_ALLOWED_PACKET_OVERFLOWED), func_name());
goto err;
}
tot_length= length*(uint) count; tot_length= length*(uint) count;
if (!(res= alloc_buffer(res,str,&tmp_value,tot_length))) if (!(res= alloc_buffer(res,str,&tmp_value,tot_length)))
goto err; goto err;
...@@ -1999,8 +2031,14 @@ String *Item_func_rpad::val_str(String *str) ...@@ -1999,8 +2031,14 @@ String *Item_func_rpad::val_str(String *str)
return (res); return (res);
} }
pad_char_length= rpad->numchars(); pad_char_length= rpad->numchars();
if ((ulong) byte_count > current_thd->variables.max_allowed_packet || if ((ulong) byte_count > current_thd->variables.max_allowed_packet)
args[2]->null_value || !pad_char_length) {
push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
ER_WARN_ALLOWED_PACKET_OVERFLOWED,
ER(ER_WARN_ALLOWED_PACKET_OVERFLOWED), func_name());
goto err;
}
if(args[2]->null_value || !pad_char_length)
goto err; goto err;
res_byte_length= res->length(); /* Must be done before alloc_buffer */ res_byte_length= res->length(); /* Must be done before alloc_buffer */
if (!(res= alloc_buffer(res,str,&tmp_value,byte_count))) if (!(res= alloc_buffer(res,str,&tmp_value,byte_count)))
...@@ -2079,8 +2117,15 @@ String *Item_func_lpad::val_str(String *str) ...@@ -2079,8 +2117,15 @@ String *Item_func_lpad::val_str(String *str)
pad_char_length= pad->numchars(); pad_char_length= pad->numchars();
byte_count= count * collation.collation->mbmaxlen; byte_count= count * collation.collation->mbmaxlen;
if (byte_count > current_thd->variables.max_allowed_packet || if (byte_count > current_thd->variables.max_allowed_packet)
args[2]->null_value || !pad_char_length || str->alloc(byte_count)) {
push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
ER_WARN_ALLOWED_PACKET_OVERFLOWED,
ER(ER_WARN_ALLOWED_PACKET_OVERFLOWED), func_name());
goto err;
}
if (args[2]->null_value || !pad_char_length || str->alloc(byte_count))
goto err; goto err;
str->length(0); str->length(0);
...@@ -2359,7 +2404,9 @@ String *Item_load_file::val_str(String *str) ...@@ -2359,7 +2404,9 @@ String *Item_load_file::val_str(String *str)
} }
if (stat_info.st_size > (long) current_thd->variables.max_allowed_packet) if (stat_info.st_size > (long) current_thd->variables.max_allowed_packet)
{ {
/* my_error(ER_TOO_LONG_STRING, MYF(0), file_name->c_ptr()); */ push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
ER_WARN_ALLOWED_PACKET_OVERFLOWED,
ER(ER_WARN_ALLOWED_PACKET_OVERFLOWED), func_name());
goto err; goto err;
} }
if (tmp_value.alloc(stat_info.st_size)) if (tmp_value.alloc(stat_info.st_size))
......
...@@ -312,3 +312,4 @@ character-set=latin2 ...@@ -312,3 +312,4 @@ character-set=latin2
"Got temporary error %d '%-.100s' from %s", "Got temporary error %d '%-.100s' from %s",
"Unknown or incorrect time zone: '%-.64s'", "Unknown or incorrect time zone: '%-.64s'",
"Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid TIMESTAMP value in column '%s' at row %ld",
"Data truncated by function '%s' do to max_allowed_packet"
...@@ -306,3 +306,4 @@ character-set=latin1 ...@@ -306,3 +306,4 @@ character-set=latin1
"Modtog temporary fejl %d '%-.100s' fra %s", "Modtog temporary fejl %d '%-.100s' fra %s",
"Unknown or incorrect time zone: '%-.64s'", "Unknown or incorrect time zone: '%-.64s'",
"Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid TIMESTAMP value in column '%s' at row %ld",
"Data truncated by function '%s' do to max_allowed_packet"
...@@ -314,3 +314,4 @@ character-set=latin1 ...@@ -314,3 +314,4 @@ character-set=latin1
"Got temporary error %d '%-.100s' from %s", "Got temporary error %d '%-.100s' from %s",
"Unknown or incorrect time zone: '%-.64s'", "Unknown or incorrect time zone: '%-.64s'",
"Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid TIMESTAMP value in column '%s' at row %ld",
"Data truncated by function '%s' do to max_allowed_packet"
...@@ -303,3 +303,4 @@ character-set=latin1 ...@@ -303,3 +303,4 @@ character-set=latin1
"Got temporary error %d '%-.100s' from %s", "Got temporary error %d '%-.100s' from %s",
"Unknown or incorrect time zone: '%-.64s'", "Unknown or incorrect time zone: '%-.64s'",
"Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid TIMESTAMP value in column '%s' at row %ld",
"Data truncated by function '%s' do to max_allowed_packet"
...@@ -308,3 +308,4 @@ character-set=latin7 ...@@ -308,3 +308,4 @@ character-set=latin7
"Got temporary error %d '%-.100s' from %s", "Got temporary error %d '%-.100s' from %s",
"Unknown or incorrect time zone: '%-.64s'", "Unknown or incorrect time zone: '%-.64s'",
"Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid TIMESTAMP value in column '%s' at row %ld",
"Data truncated by function '%s' do to max_allowed_packet"
...@@ -303,3 +303,4 @@ character-set=latin1 ...@@ -303,3 +303,4 @@ character-set=latin1
"Got temporary error %d '%-.100s' from %s", "Got temporary error %d '%-.100s' from %s",
"Unknown or incorrect time zone: '%-.64s'", "Unknown or incorrect time zone: '%-.64s'",
"Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid TIMESTAMP value in column '%s' at row %ld",
"Data truncated by function '%s' do to max_allowed_packet"
...@@ -315,3 +315,4 @@ character-set=latin1 ...@@ -315,3 +315,4 @@ character-set=latin1
"Got temporary error %d '%-.100s' from %s", "Got temporary error %d '%-.100s' from %s",
"Unknown or incorrect time zone: '%-.64s'", "Unknown or incorrect time zone: '%-.64s'",
"Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid TIMESTAMP value in column '%s' at row %ld",
"Data truncated by function '%s' do to max_allowed_packet"
...@@ -303,3 +303,4 @@ character-set=greek ...@@ -303,3 +303,4 @@ character-set=greek
"Got temporary error %d '%-.100s' from %s", "Got temporary error %d '%-.100s' from %s",
"Unknown or incorrect time zone: '%-.64s'", "Unknown or incorrect time zone: '%-.64s'",
"Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid TIMESTAMP value in column '%s' at row %ld",
"Data truncated by function '%s' do to max_allowed_packet"
...@@ -305,3 +305,4 @@ character-set=latin2 ...@@ -305,3 +305,4 @@ character-set=latin2
"Got temporary error %d '%-.100s' from %s", "Got temporary error %d '%-.100s' from %s",
"Unknown or incorrect time zone: '%-.64s'", "Unknown or incorrect time zone: '%-.64s'",
"Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid TIMESTAMP value in column '%s' at row %ld",
"Data truncated by function '%s' do to max_allowed_packet"
...@@ -303,3 +303,4 @@ character-set=latin1 ...@@ -303,3 +303,4 @@ character-set=latin1
"Got temporary error %d '%-.100s' from %s", "Got temporary error %d '%-.100s' from %s",
"Unknown or incorrect time zone: '%-.64s'", "Unknown or incorrect time zone: '%-.64s'",
"Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid TIMESTAMP value in column '%s' at row %ld",
"Data truncated by function '%s' do to max_allowed_packet"
...@@ -305,3 +305,4 @@ character-set=ujis ...@@ -305,3 +305,4 @@ character-set=ujis
"Got temporary NDB error %d '%-.100s'", "Got temporary NDB error %d '%-.100s'",
"Unknown or incorrect time zone: '%-.64s'", "Unknown or incorrect time zone: '%-.64s'",
"Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid TIMESTAMP value in column '%s' at row %ld",
"Data truncated by function '%s' do to max_allowed_packet"
...@@ -303,3 +303,4 @@ character-set=euckr ...@@ -303,3 +303,4 @@ character-set=euckr
"Got temporary error %d '%-.100s' from %s", "Got temporary error %d '%-.100s' from %s",
"Unknown or incorrect time zone: '%-.64s'", "Unknown or incorrect time zone: '%-.64s'",
"Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid TIMESTAMP value in column '%s' at row %ld",
"Data truncated by function '%s' do to max_allowed_packet"
...@@ -305,3 +305,4 @@ character-set=latin1 ...@@ -305,3 +305,4 @@ character-set=latin1
"Mottok temporary feil %d '%-.100s' fra %s", "Mottok temporary feil %d '%-.100s' fra %s",
"Unknown or incorrect time zone: '%-.64s'", "Unknown or incorrect time zone: '%-.64s'",
"Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid TIMESTAMP value in column '%s' at row %ld",
"Data truncated by function '%s' do to max_allowed_packet"
...@@ -305,3 +305,4 @@ character-set=latin1 ...@@ -305,3 +305,4 @@ character-set=latin1
"Mottok temporary feil %d '%-.100s' fra %s", "Mottok temporary feil %d '%-.100s' fra %s",
"Unknown or incorrect time zone: '%-.64s'", "Unknown or incorrect time zone: '%-.64s'",
"Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid TIMESTAMP value in column '%s' at row %ld",
"Data truncated by function '%s' do to max_allowed_packet"
...@@ -307,3 +307,4 @@ character-set=latin2 ...@@ -307,3 +307,4 @@ character-set=latin2
"Got temporary error %d '%-.100s' from %s", "Got temporary error %d '%-.100s' from %s",
"Unknown or incorrect time zone: '%-.64s'", "Unknown or incorrect time zone: '%-.64s'",
"Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid TIMESTAMP value in column '%s' at row %ld",
"Data truncated by function '%s' do to max_allowed_packet"
...@@ -304,3 +304,4 @@ character-set=latin1 ...@@ -304,3 +304,4 @@ character-set=latin1
"Got temporary error %d '%-.100s' from %s", "Got temporary error %d '%-.100s' from %s",
"Unknown or incorrect time zone: '%-.64s'", "Unknown or incorrect time zone: '%-.64s'",
"Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid TIMESTAMP value in column '%s' at row %ld",
"Data truncated by function '%s' do to max_allowed_packet"
...@@ -307,3 +307,4 @@ character-set=latin2 ...@@ -307,3 +307,4 @@ character-set=latin2
"Got temporary error %d '%-.100s' from %s", "Got temporary error %d '%-.100s' from %s",
"Unknown or incorrect time zone: '%-.64s'", "Unknown or incorrect time zone: '%-.64s'",
"Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid TIMESTAMP value in column '%s' at row %ld",
"Data truncated by function '%s' do to max_allowed_packet"
...@@ -305,3 +305,4 @@ character-set=koi8r ...@@ -305,3 +305,4 @@ character-set=koi8r
"Got temporary error %d '%-.100s' from %s", "Got temporary error %d '%-.100s' from %s",
"Unknown or incorrect time zone: '%-.64s'", "Unknown or incorrect time zone: '%-.64s'",
"Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid TIMESTAMP value in column '%s' at row %ld",
"Data truncated by function '%s' do to max_allowed_packet"
...@@ -309,3 +309,4 @@ character-set=cp1250 ...@@ -309,3 +309,4 @@ character-set=cp1250
"Got temporary error %d '%-.100s' from %s", "Got temporary error %d '%-.100s' from %s",
"Unknown or incorrect time zone: '%-.64s'", "Unknown or incorrect time zone: '%-.64s'",
"Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid TIMESTAMP value in column '%s' at row %ld",
"Data truncated by function '%s' do to max_allowed_packet"
...@@ -311,3 +311,4 @@ character-set=latin2 ...@@ -311,3 +311,4 @@ character-set=latin2
"Got temporary error %d '%-.100s' from %s", "Got temporary error %d '%-.100s' from %s",
"Unknown or incorrect time zone: '%-.64s'", "Unknown or incorrect time zone: '%-.64s'",
"Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid TIMESTAMP value in column '%s' at row %ld",
"Data truncated by function '%s' do to max_allowed_packet"
...@@ -305,3 +305,4 @@ character-set=latin1 ...@@ -305,3 +305,4 @@ character-set=latin1
"Got temporary error %d '%-.100s' from %s", "Got temporary error %d '%-.100s' from %s",
"Unknown or incorrect time zone: '%-.64s'", "Unknown or incorrect time zone: '%-.64s'",
"Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid TIMESTAMP value in column '%s' at row %ld",
"Data truncated by function '%s' do to max_allowed_packet"
...@@ -303,3 +303,4 @@ character-set=latin1 ...@@ -303,3 +303,4 @@ character-set=latin1
"Fick tilfällig felkod %d '%-.100s' från %s", "Fick tilfällig felkod %d '%-.100s' från %s",
"Unknown or incorrect time zone: '%-.64s'", "Unknown or incorrect time zone: '%-.64s'",
"Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid TIMESTAMP value in column '%s' at row %ld",
"Data truncated by function '%s' do to max_allowed_packet"
...@@ -308,3 +308,4 @@ character-set=koi8u ...@@ -308,3 +308,4 @@ character-set=koi8u
"Got temporary error %d '%-.100s' from %s", "Got temporary error %d '%-.100s' from %s",
"Unknown or incorrect time zone: '%-.64s'", "Unknown or incorrect time zone: '%-.64s'",
"Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid TIMESTAMP value in column '%s' at row %ld",
"Data truncated by function '%s' do to max_allowed_packet"
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment