From 58bdba5785313f89398231f796ba989a4de81a69 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 29 Jun 2004 19:55:13 +0500 Subject: [PATCH 1/7] WL#1600 (Warn if result is truncatet due to max_allowed_packet) include/mysqld_error.h: Warning added mysql-test/r/func_str.result: test result fixed mysql-test/r/packet.result: test resut fixed sql/item_geofunc.cc: warning issued sql/item_strfunc.cc: warning issued sql/share/czech/errmsg.txt: Warning added sql/share/danish/errmsg.txt: Warning added sql/share/dutch/errmsg.txt: Warning added sql/share/english/errmsg.txt: Warning added sql/share/estonian/errmsg.txt: Warning added sql/share/french/errmsg.txt: Warning added sql/share/german/errmsg.txt: Warning added sql/share/greek/errmsg.txt: Warning added sql/share/hungarian/errmsg.txt: Warning added sql/share/italian/errmsg.txt: Warning added sql/share/japanese/errmsg.txt: Warning added sql/share/korean/errmsg.txt: Warning added sql/share/norwegian-ny/errmsg.txt: Warning added sql/share/norwegian/errmsg.txt: Warning added sql/share/polish/errmsg.txt: Warning added sql/share/portuguese/errmsg.txt: Warning added sql/share/romanian/errmsg.txt: Warning added sql/share/russian/errmsg.txt: Warning added sql/share/serbian/errmsg.txt: Warning added sql/share/slovak/errmsg.txt: Warning added sql/share/spanish/errmsg.txt: Warning added sql/share/swedish/errmsg.txt: Warning added sql/share/ukrainian/errmsg.txt: Warning added --- include/mysqld_error.h | 3 +- mysql-test/r/func_str.result | 2 + mysql-test/r/packet.result | 2 + sql/item_geofunc.cc | 5 +++ sql/item_strfunc.cc | 65 ++++++++++++++++++++++++++----- sql/share/czech/errmsg.txt | 1 + sql/share/danish/errmsg.txt | 1 + sql/share/dutch/errmsg.txt | 1 + sql/share/english/errmsg.txt | 1 + sql/share/estonian/errmsg.txt | 1 + sql/share/french/errmsg.txt | 1 + sql/share/german/errmsg.txt | 1 + sql/share/greek/errmsg.txt | 1 + sql/share/hungarian/errmsg.txt | 1 + sql/share/italian/errmsg.txt | 1 + sql/share/japanese/errmsg.txt | 1 + sql/share/korean/errmsg.txt | 1 + sql/share/norwegian-ny/errmsg.txt | 1 + sql/share/norwegian/errmsg.txt | 1 + sql/share/polish/errmsg.txt | 1 + sql/share/portuguese/errmsg.txt | 1 + sql/share/romanian/errmsg.txt | 1 + sql/share/russian/errmsg.txt | 1 + sql/share/serbian/errmsg.txt | 1 + sql/share/slovak/errmsg.txt | 1 + sql/share/spanish/errmsg.txt | 1 + sql/share/swedish/errmsg.txt | 1 + sql/share/ukrainian/errmsg.txt | 1 + 28 files changed, 90 insertions(+), 10 deletions(-) diff --git a/include/mysqld_error.h b/include/mysqld_error.h index 0dcc09a173f..0dd56772e79 100644 --- a/include/mysqld_error.h +++ b/include/mysqld_error.h @@ -316,4 +316,5 @@ #define ER_GET_TEMPORARY_ERRMSG 1297 #define ER_UNKNOWN_TIME_ZONE 1298 #define ER_WARN_INVALID_TIMESTAMP 1299 -#define ER_ERROR_MESSAGES 300 +#define ER_WARN_ALLOWED_PACKET_OVERFLOWED 1300 +#define ER_ERROR_MESSAGES 301 diff --git a/mysql-test/r/func_str.result b/mysql-test/r/func_str.result index f91691853b9..9304e02a3dc 100644 --- a/mysql-test/r/func_str.result +++ b/mysql-test/r/func_str.result @@ -225,6 +225,8 @@ substring_index("www.tcx.se","",3) select length(repeat("a",100000000)),length(repeat("a",1000*64)); length(repeat("a",100000000)) length(repeat("a",1000*64)) 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")); position("0" in "baaa" in (1)) position("0" in "1" in (1,2,3)) position("sql" in ("mysql")) 1 0 3 diff --git a/mysql-test/r/packet.result b/mysql-test/r/packet.result index 29bbcf4466f..65b4bb1b6c3 100644 --- a/mysql-test/r/packet.result +++ b/mysql-test/r/packet.result @@ -8,6 +8,8 @@ len select repeat('a',2000); repeat('a',2000) NULL +Warnings: +Warning 1300 Data truncated by function 'repeat' do to max_allowed_packet select @@net_buffer_length, @@max_allowed_packet; @@net_buffer_length @@max_allowed_packet 1024 1024 diff --git a/sql/item_geofunc.cc b/sql/item_geofunc.cc index d95271a54bb..b9fc6a53b58 100644 --- a/sql/item_geofunc.cc +++ b/sql/item_geofunc.cc @@ -446,7 +446,12 @@ String *Item_func_spatial_collection::val_str(String *str) } } 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; + } null_value = 0; return str; diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index b0c685c1c46..e5fa5785fca 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -266,7 +266,12 @@ String *Item_func_concat::val_str(String *str) continue; if (res->length()+res2->length() > 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()) { // Use old buffer res->append(*res2); @@ -544,7 +549,12 @@ String *Item_func_concat_ws::val_str(String *str) if (res->length() + sep_str->length() + res2->length() > 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() + sep_str->length() + res2->length()) { // Use old buffer @@ -801,7 +811,14 @@ redo: offset= (int) (ptr-res->ptr()); if (res->length()-from_length + to_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 null; + } if (!alloced) { alloced=1; @@ -822,7 +839,12 @@ skip: { if (res->length()-from_length + to_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 null; + } if (!alloced) { alloced=1; @@ -882,7 +904,12 @@ String *Item_func_insert::val_str(String *str) length=res->length()-start; if (res->length() - length + res2->length() > 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->replace(start,length,*res2); return res; @@ -1934,7 +1961,12 @@ String *Item_func_repeat::val_str(String *str) length=res->length(); // Safe length check 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; if (!(res= alloc_buffer(res,str,&tmp_value,tot_length))) goto err; @@ -1999,8 +2031,14 @@ String *Item_func_rpad::val_str(String *str) return (res); } pad_char_length= rpad->numchars(); - if ((ulong) byte_count > current_thd->variables.max_allowed_packet || - args[2]->null_value || !pad_char_length) + if ((ulong) byte_count > 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; + } + if(args[2]->null_value || !pad_char_length) goto err; res_byte_length= res->length(); /* Must be done before alloc_buffer */ if (!(res= alloc_buffer(res,str,&tmp_value,byte_count))) @@ -2079,8 +2117,15 @@ String *Item_func_lpad::val_str(String *str) pad_char_length= pad->numchars(); byte_count= count * collation.collation->mbmaxlen; - if (byte_count > current_thd->variables.max_allowed_packet || - args[2]->null_value || !pad_char_length || str->alloc(byte_count)) + if (byte_count > 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; + } + + if (args[2]->null_value || !pad_char_length || str->alloc(byte_count)) goto err; str->length(0); @@ -2359,7 +2404,9 @@ String *Item_load_file::val_str(String *str) } 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; } if (tmp_value.alloc(stat_info.st_size)) diff --git a/sql/share/czech/errmsg.txt b/sql/share/czech/errmsg.txt index 2d377929229..2ab55e7dece 100644 --- a/sql/share/czech/errmsg.txt +++ b/sql/share/czech/errmsg.txt @@ -312,3 +312,4 @@ character-set=latin2 "Got temporary error %d '%-.100s' from %s", "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", +"Data truncated by function '%s' do to max_allowed_packet" diff --git a/sql/share/danish/errmsg.txt b/sql/share/danish/errmsg.txt index af7b8263e6b..c27fe536180 100644 --- a/sql/share/danish/errmsg.txt +++ b/sql/share/danish/errmsg.txt @@ -306,3 +306,4 @@ character-set=latin1 "Modtog temporary fejl %d '%-.100s' fra %s", "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", +"Data truncated by function '%s' do to max_allowed_packet" diff --git a/sql/share/dutch/errmsg.txt b/sql/share/dutch/errmsg.txt index aa20996680e..66f0202b8f2 100644 --- a/sql/share/dutch/errmsg.txt +++ b/sql/share/dutch/errmsg.txt @@ -314,3 +314,4 @@ character-set=latin1 "Got temporary error %d '%-.100s' from %s", "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", +"Data truncated by function '%s' do to max_allowed_packet" diff --git a/sql/share/english/errmsg.txt b/sql/share/english/errmsg.txt index b5a7f7962cf..97554ec54a3 100644 --- a/sql/share/english/errmsg.txt +++ b/sql/share/english/errmsg.txt @@ -303,3 +303,4 @@ character-set=latin1 "Got temporary error %d '%-.100s' from %s", "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", +"Data truncated by function '%s' do to max_allowed_packet" diff --git a/sql/share/estonian/errmsg.txt b/sql/share/estonian/errmsg.txt index 0cc6e06ab26..971cf9e90bf 100644 --- a/sql/share/estonian/errmsg.txt +++ b/sql/share/estonian/errmsg.txt @@ -308,3 +308,4 @@ character-set=latin7 "Got temporary error %d '%-.100s' from %s", "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", +"Data truncated by function '%s' do to max_allowed_packet" diff --git a/sql/share/french/errmsg.txt b/sql/share/french/errmsg.txt index 2e23db62ddb..f090bde40ad 100644 --- a/sql/share/french/errmsg.txt +++ b/sql/share/french/errmsg.txt @@ -303,3 +303,4 @@ character-set=latin1 "Got temporary error %d '%-.100s' from %s", "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", +"Data truncated by function '%s' do to max_allowed_packet" diff --git a/sql/share/german/errmsg.txt b/sql/share/german/errmsg.txt index c63162c84f6..5a3307248d1 100644 --- a/sql/share/german/errmsg.txt +++ b/sql/share/german/errmsg.txt @@ -315,3 +315,4 @@ character-set=latin1 "Got temporary error %d '%-.100s' from %s", "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", +"Data truncated by function '%s' do to max_allowed_packet" diff --git a/sql/share/greek/errmsg.txt b/sql/share/greek/errmsg.txt index fa94b0f5107..61e7beedfe1 100644 --- a/sql/share/greek/errmsg.txt +++ b/sql/share/greek/errmsg.txt @@ -303,3 +303,4 @@ character-set=greek "Got temporary error %d '%-.100s' from %s", "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", +"Data truncated by function '%s' do to max_allowed_packet" diff --git a/sql/share/hungarian/errmsg.txt b/sql/share/hungarian/errmsg.txt index 56fae82c438..dfd6c50c8d1 100644 --- a/sql/share/hungarian/errmsg.txt +++ b/sql/share/hungarian/errmsg.txt @@ -305,3 +305,4 @@ character-set=latin2 "Got temporary error %d '%-.100s' from %s", "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", +"Data truncated by function '%s' do to max_allowed_packet" diff --git a/sql/share/italian/errmsg.txt b/sql/share/italian/errmsg.txt index 31768f172b4..2629df66fbc 100644 --- a/sql/share/italian/errmsg.txt +++ b/sql/share/italian/errmsg.txt @@ -303,3 +303,4 @@ character-set=latin1 "Got temporary error %d '%-.100s' from %s", "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", +"Data truncated by function '%s' do to max_allowed_packet" diff --git a/sql/share/japanese/errmsg.txt b/sql/share/japanese/errmsg.txt index 4385f25c991..fdcbc784c93 100644 --- a/sql/share/japanese/errmsg.txt +++ b/sql/share/japanese/errmsg.txt @@ -305,3 +305,4 @@ character-set=ujis "Got temporary NDB error %d '%-.100s'", "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", +"Data truncated by function '%s' do to max_allowed_packet" diff --git a/sql/share/korean/errmsg.txt b/sql/share/korean/errmsg.txt index a6e84fad01e..b9bd73d444a 100644 --- a/sql/share/korean/errmsg.txt +++ b/sql/share/korean/errmsg.txt @@ -303,3 +303,4 @@ character-set=euckr "Got temporary error %d '%-.100s' from %s", "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", +"Data truncated by function '%s' do to max_allowed_packet" diff --git a/sql/share/norwegian-ny/errmsg.txt b/sql/share/norwegian-ny/errmsg.txt index eaf7b3482ee..bf15a6c8176 100644 --- a/sql/share/norwegian-ny/errmsg.txt +++ b/sql/share/norwegian-ny/errmsg.txt @@ -305,3 +305,4 @@ character-set=latin1 "Mottok temporary feil %d '%-.100s' fra %s", "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", +"Data truncated by function '%s' do to max_allowed_packet" diff --git a/sql/share/norwegian/errmsg.txt b/sql/share/norwegian/errmsg.txt index 692c10db58f..4ab2ed7c707 100644 --- a/sql/share/norwegian/errmsg.txt +++ b/sql/share/norwegian/errmsg.txt @@ -305,3 +305,4 @@ character-set=latin1 "Mottok temporary feil %d '%-.100s' fra %s", "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", +"Data truncated by function '%s' do to max_allowed_packet" diff --git a/sql/share/polish/errmsg.txt b/sql/share/polish/errmsg.txt index 19f2c1c6983..7c50a154d70 100644 --- a/sql/share/polish/errmsg.txt +++ b/sql/share/polish/errmsg.txt @@ -307,3 +307,4 @@ character-set=latin2 "Got temporary error %d '%-.100s' from %s", "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", +"Data truncated by function '%s' do to max_allowed_packet" diff --git a/sql/share/portuguese/errmsg.txt b/sql/share/portuguese/errmsg.txt index c77d10d83de..713bd0ef06b 100644 --- a/sql/share/portuguese/errmsg.txt +++ b/sql/share/portuguese/errmsg.txt @@ -304,3 +304,4 @@ character-set=latin1 "Got temporary error %d '%-.100s' from %s", "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", +"Data truncated by function '%s' do to max_allowed_packet" diff --git a/sql/share/romanian/errmsg.txt b/sql/share/romanian/errmsg.txt index 5ee4efd0063..377af99b1d9 100644 --- a/sql/share/romanian/errmsg.txt +++ b/sql/share/romanian/errmsg.txt @@ -307,3 +307,4 @@ character-set=latin2 "Got temporary error %d '%-.100s' from %s", "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", +"Data truncated by function '%s' do to max_allowed_packet" diff --git a/sql/share/russian/errmsg.txt b/sql/share/russian/errmsg.txt index 20188723f6d..23c315eade6 100644 --- a/sql/share/russian/errmsg.txt +++ b/sql/share/russian/errmsg.txt @@ -305,3 +305,4 @@ character-set=koi8r "Got temporary error %d '%-.100s' from %s", "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", +"Data truncated by function '%s' do to max_allowed_packet" diff --git a/sql/share/serbian/errmsg.txt b/sql/share/serbian/errmsg.txt index cc822431464..3360a98fab6 100644 --- a/sql/share/serbian/errmsg.txt +++ b/sql/share/serbian/errmsg.txt @@ -309,3 +309,4 @@ character-set=cp1250 "Got temporary error %d '%-.100s' from %s", "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", +"Data truncated by function '%s' do to max_allowed_packet" diff --git a/sql/share/slovak/errmsg.txt b/sql/share/slovak/errmsg.txt index ee6aac5081b..04db04cd15e 100644 --- a/sql/share/slovak/errmsg.txt +++ b/sql/share/slovak/errmsg.txt @@ -311,3 +311,4 @@ character-set=latin2 "Got temporary error %d '%-.100s' from %s", "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", +"Data truncated by function '%s' do to max_allowed_packet" diff --git a/sql/share/spanish/errmsg.txt b/sql/share/spanish/errmsg.txt index 483ec7068a2..8dd85f7f661 100644 --- a/sql/share/spanish/errmsg.txt +++ b/sql/share/spanish/errmsg.txt @@ -305,3 +305,4 @@ character-set=latin1 "Got temporary error %d '%-.100s' from %s", "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", +"Data truncated by function '%s' do to max_allowed_packet" diff --git a/sql/share/swedish/errmsg.txt b/sql/share/swedish/errmsg.txt index d9f3adf92d4..3c571169887 100644 --- a/sql/share/swedish/errmsg.txt +++ b/sql/share/swedish/errmsg.txt @@ -303,3 +303,4 @@ character-set=latin1 "Fick tilfällig felkod %d '%-.100s' från %s", "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", +"Data truncated by function '%s' do to max_allowed_packet" diff --git a/sql/share/ukrainian/errmsg.txt b/sql/share/ukrainian/errmsg.txt index acf6f5121e8..a36f07ef96c 100644 --- a/sql/share/ukrainian/errmsg.txt +++ b/sql/share/ukrainian/errmsg.txt @@ -308,3 +308,4 @@ character-set=koi8u "Got temporary error %d '%-.100s' from %s", "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", +"Data truncated by function '%s' do to max_allowed_packet" From f32eb83482f7e5e39ae6a2ba18a498f3ce86f0e9 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 20 Jul 2004 10:06:28 -0600 Subject: [PATCH 2/7] Get ps_1general test to pass (replace .result with .reject - some text was changed in the SHOW STORAGE ENGINES results) mysql-test/r/ps_1general.result: SHOW STORAGE ENGINES now has different text ("type" -> "engine", etc.) --- mysql-test/r/ps_1general.result | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/mysql-test/r/ps_1general.result b/mysql-test/r/ps_1general.result index b9df6187a09..e0a2a364e45 100644 --- a/mysql-test/r/ps_1general.result +++ b/mysql-test/r/ps_1general.result @@ -302,18 +302,18 @@ ERROR HY000: This command is not supported in the prepared statement protocol ye prepare stmt4 from ' show storage engines '; execute stmt4; Engine Support Comment -MyISAM YES/NO Default type from 3.23 with great performance -HEAP YES/NO Hash based, stored in memory, useful for temporary tables -MEMORY YES/NO Alias for HEAP +MyISAM YES/NO Default engine as of MySQL 3.23 with great performance +HEAP YES/NO Alias for MEMORY +MEMORY YES/NO Hash based, stored in memory, useful for temporary tables MERGE YES/NO Collection of identical MyISAM tables MRG_MYISAM YES/NO Alias for MERGE -ISAM YES/NO Obsolete table type; Is replaced by MyISAM -MRG_ISAM YES/NO Obsolete table type; Is replaced by MRG_MYISAM -InnoDB YES/NO Supports transactions, row-level locking and foreign keys +ISAM YES/NO Obsolete storage engine, now replaced by MyISAM +MRG_ISAM YES/NO Obsolete storage engine, now replaced by MERGE +InnoDB YES/NO Supports transactions, row-level locking, and foreign keys INNOBASE YES/NO Alias for INNODB BDB YES/NO Supports transactions and page-level locking BERKELEYDB YES/NO Alias for BDB -NDBCLUSTER YES/NO Clustered, fault tolerant memory based tables +NDBCLUSTER YES/NO Clustered, fault-tolerant, memory-based tables NDB YES/NO Alias for NDBCLUSTER EXAMPLE YES/NO Example storage engine ARCHIVE YES/NO Archive storage engine From 325de4ebf110d2ed45ff7e215c2e835e7503d2b8 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 20 Jul 2004 13:25:55 -0700 Subject: [PATCH 3/7] Updates for archive storage engine. sql/examples/ha_archive.cc: Corrections from Bar's comments. Mainly small code changes/style changes. --- sql/examples/ha_archive.cc | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/sql/examples/ha_archive.cc b/sql/examples/ha_archive.cc index a4fe2aaa8cc..9b439087259 100644 --- a/sql/examples/ha_archive.cc +++ b/sql/examples/ha_archive.cc @@ -116,10 +116,14 @@ static ARCHIVE_SHARE *get_share(const char *table_name, TABLE *table) pthread_mutex_lock(&LOCK_mysql_create_db); if (!archive_init) { - archive_init++; VOID(pthread_mutex_init(&archive_mutex,MY_MUTEX_INIT_FAST)); - (void) hash_init(&archive_open_tables,system_charset_info,32,0,0, - (hash_get_key) archive_get_key,0,0); + if (!hash_init(&archive_open_tables,system_charset_info,32,0,0, + (hash_get_key) archive_get_key,0,0)) + { + pthread_mutex_unlock(&LOCK_mysql_create_db); + return NULL; + } + archive_init++; } pthread_mutex_unlock(&LOCK_mysql_create_db); } @@ -130,11 +134,10 @@ static ARCHIVE_SHARE *get_share(const char *table_name, TABLE *table) (byte*) table_name, length))) { - if (!(share=(ARCHIVE_SHARE *) - my_multi_malloc(MYF(MY_WME | MY_ZEROFILL), + if (!my_multi_malloc(MYF(MY_WME | MY_ZEROFILL), &share, sizeof(*share), &tmp_name, length+1, - NullS))) + NullS)) { pthread_mutex_unlock(&archive_mutex); return NULL; @@ -238,11 +241,7 @@ int ha_archive::open(const char *name, int mode, uint test_if_locked) int ha_archive::close(void) { DBUG_ENTER("ha_archive::close"); - int rc= 0; - if (gzclose(archive) == Z_ERRNO) - rc =-1; - rc |= free_share(share); - DBUG_RETURN(rc); + DBUG_RETURN(((gzclose(archive) == Z_ERRNO || free_share(share)) ? -1 : 0)); } @@ -276,12 +275,7 @@ int ha_archive::create(const char *name, TABLE *table_arg, HA_CREATE_INFO *creat } version= ARCHIVE_VERSION; written= gzwrite(archive, &version, sizeof(version)); - if (written == 0 || written != sizeof(version)) - { - delete_table(name); - DBUG_RETURN(-1); - } - if (gzclose(archive)) + if (written != sizeof(version) || gzclose(archive)) { delete_table(name); DBUG_RETURN(-1); @@ -305,7 +299,7 @@ int ha_archive::write_row(byte * buf) update_timestamp(buf+table->timestamp_default_now-1); written= gzwrite(share->archive_write, buf, table->reclength); share->dirty= true; - if (written == 0 || written != table->reclength) + if (written != table->reclength) DBUG_RETURN(-1); for (Field_blob **field=table->blob_field ; *field ; field++) @@ -315,7 +309,7 @@ int ha_archive::write_row(byte * buf) (*field)->get_ptr(&ptr); written= gzwrite(share->archive_write, ptr, (unsigned)size); - if (written == 0 || written != size) + if (written != size) DBUG_RETURN(-1); } From 5a37da8ece3d0bee904c7f374dbd26d742740e6e Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 21 Jul 2004 00:52:35 +0200 Subject: [PATCH 4/7] Sanja will probably rework this tomorrow; we need to unify the normal client code and replication slave code, as far as LOAD DATA INFILE and other queries' execution is concerned. Duplication of code leads to replication bugs, because the replication duplicate lags much behind. Fix for 2 Valgrind errors on slave replicating LOAD DATA INFILE - one serious (causing a random test failure in rpl_loaddata in 5.0) - one not serious (theoretically a bug but not dangerous): uninited thd->row_count sql/log_event.cc: Fix for 2 Valgrind errors: - one serious (causing a random test failure in rpl_loaddata in 5.0): uninited lex in replic of LOAD DATA INFILE on slave - one not serious (theoretically a bug but not dangerous): uninited thd->row_count in replication of LOAD DATA INFILE on slave. Sanja is likely to rework the fix to the 1st problem tomorrow. --- sql/log_event.cc | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/sql/log_event.cc b/sql/log_event.cc index 8075cd3f4d2..ffc54362ea2 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -1702,6 +1702,11 @@ int Load_log_event::exec_event(NET* net, struct st_relay_log_info* rli, thd->query_length= 0; // Should not be needed thd->query_error= 0; clear_all_errors(thd, rli); + /* + Usually mysql_init_query() is called by mysql_parse(), but we need it here + as the present method does not call mysql_parse(). + */ + mysql_init_query(thd); if (!use_rli_only_for_errors) { #if MYSQL_VERSION_ID < 50000 @@ -1730,6 +1735,13 @@ int Load_log_event::exec_event(NET* net, struct st_relay_log_info* rli, VOID(pthread_mutex_lock(&LOCK_thread_count)); thd->query_id = query_id++; VOID(pthread_mutex_unlock(&LOCK_thread_count)); + /* + Initing thd->row_count is not necessary in theory as this variable has no + influence in the case of the slave SQL thread (it is used to generate a + "data truncated" warning but which is absorbed and never gets to the + error log); still we init it to avoid a Valgrind message. + */ + mysql_reset_errors(thd); TABLE_LIST tables; bzero((char*) &tables,sizeof(tables)); From 8df1bf6b4206d64f68ba2eb2179bcb7e2c852d1e Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 21 Jul 2004 21:27:45 +0500 Subject: [PATCH 5/7] Final patch for WL#1600(warn if max_allowed_packet used) mysql-test/r/func_str.result: test fixed mysql-test/r/packet.result: test fixed sql/item_geofunc.cc: error message fixed sql/item_strfunc.cc: error message fixed sql/share/czech/errmsg.txt: error message fixed sql/share/danish/errmsg.txt: error message fixed sql/share/dutch/errmsg.txt: error message fixed sql/share/english/errmsg.txt: error message fixed sql/share/estonian/errmsg.txt: error message fixed sql/share/french/errmsg.txt: error message fixed sql/share/german/errmsg.txt: error message fixed sql/share/greek/errmsg.txt: error message fixed sql/share/hungarian/errmsg.txt: error message fixed sql/share/italian/errmsg.txt: error message fixed sql/share/japanese/errmsg.txt: error message fixed sql/share/korean/errmsg.txt: error message fixed sql/share/norwegian-ny/errmsg.txt: error message fixed sql/share/norwegian/errmsg.txt: error message fixed sql/share/polish/errmsg.txt: error message fixed sql/share/portuguese/errmsg.txt: error message fixed sql/share/romanian/errmsg.txt: error message fixed sql/share/russian/errmsg.txt: error message fixed sql/share/serbian/errmsg.txt: error message fixed sql/share/slovak/errmsg.txt: error message fixed sql/share/spanish/errmsg.txt: error message fixed sql/share/swedish/errmsg.txt: error message fixed sql/share/ukrainian/errmsg.txt: error message fixed --- mysql-test/r/func_str.result | 2 +- mysql-test/r/packet.result | 2 +- sql/item_geofunc.cc | 3 ++- sql/item_strfunc.cc | 27 ++++++++++++++++++--------- sql/share/czech/errmsg.txt | 1 + sql/share/danish/errmsg.txt | 1 + sql/share/dutch/errmsg.txt | 1 + sql/share/english/errmsg.txt | 1 + sql/share/estonian/errmsg.txt | 1 + sql/share/french/errmsg.txt | 1 + sql/share/german/errmsg.txt | 1 + sql/share/greek/errmsg.txt | 1 + sql/share/hungarian/errmsg.txt | 1 + sql/share/italian/errmsg.txt | 1 + sql/share/japanese/errmsg.txt | 1 + sql/share/korean/errmsg.txt | 1 + sql/share/norwegian-ny/errmsg.txt | 1 + sql/share/norwegian/errmsg.txt | 1 + sql/share/polish/errmsg.txt | 1 + sql/share/portuguese/errmsg.txt | 1 + sql/share/romanian/errmsg.txt | 1 + sql/share/russian/errmsg.txt | 1 + sql/share/serbian/errmsg.txt | 1 + sql/share/slovak/errmsg.txt | 1 + sql/share/spanish/errmsg.txt | 1 + sql/share/swedish/errmsg.txt | 1 + sql/share/ukrainian/errmsg.txt | 1 + 27 files changed, 45 insertions(+), 12 deletions(-) diff --git a/mysql-test/r/func_str.result b/mysql-test/r/func_str.result index 066c9ad0c43..e07ee4f0add 100644 --- a/mysql-test/r/func_str.result +++ b/mysql-test/r/func_str.result @@ -226,7 +226,7 @@ select length(repeat("a",100000000)),length(repeat("a",1000*64)); length(repeat("a",100000000)) length(repeat("a",1000*64)) NULL 64000 Warnings: -Warning 1300 Data truncated by function 'repeat' do to max_allowed_packet +Warning 1301 Result of repeat() was larger than max_allowed_packet (1048576) - truncated 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")) 1 0 3 diff --git a/mysql-test/r/packet.result b/mysql-test/r/packet.result index 65b4bb1b6c3..dfb5595e02d 100644 --- a/mysql-test/r/packet.result +++ b/mysql-test/r/packet.result @@ -9,7 +9,7 @@ select repeat('a',2000); repeat('a',2000) NULL Warnings: -Warning 1300 Data truncated by function 'repeat' do to max_allowed_packet +Warning 1301 Result of repeat() was larger than max_allowed_packet (1024) - truncated select @@net_buffer_length, @@max_allowed_packet; @@net_buffer_length @@max_allowed_packet 1024 1024 diff --git a/sql/item_geofunc.cc b/sql/item_geofunc.cc index 00553737a21..9d58cc37c2a 100644 --- a/sql/item_geofunc.cc +++ b/sql/item_geofunc.cc @@ -449,7 +449,8 @@ String *Item_func_spatial_collection::val_str(String *str) { push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_ALLOWED_PACKET_OVERFLOWED, - ER(ER_WARN_ALLOWED_PACKET_OVERFLOWED), func_name()); + ER(ER_WARN_ALLOWED_PACKET_OVERFLOWED), + func_name(), current_thd->variables.max_allowed_packet); goto err; } diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index 0e96b0fcef4..d3493e1fad1 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -269,7 +269,8 @@ String *Item_func_concat::val_str(String *str) { push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_ALLOWED_PACKET_OVERFLOWED, - ER(ER_WARN_ALLOWED_PACKET_OVERFLOWED), func_name()); + ER(ER_WARN_ALLOWED_PACKET_OVERFLOWED), func_name(), + current_thd->variables.max_allowed_packet); goto null; } if (res->alloced_length() >= res->length()+res2->length()) @@ -552,7 +553,8 @@ String *Item_func_concat_ws::val_str(String *str) { push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_ALLOWED_PACKET_OVERFLOWED, - ER(ER_WARN_ALLOWED_PACKET_OVERFLOWED), func_name()); + ER(ER_WARN_ALLOWED_PACKET_OVERFLOWED), func_name(), + current_thd->variables.max_allowed_packet); goto null; } if (res->alloced_length() >= @@ -815,7 +817,8 @@ redo: push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_ALLOWED_PACKET_OVERFLOWED, ER(ER_WARN_ALLOWED_PACKET_OVERFLOWED), - func_name()); + func_name(), + current_thd->variables.max_allowed_packet); goto null; } @@ -842,7 +845,8 @@ skip: { push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_ALLOWED_PACKET_OVERFLOWED, - ER(ER_WARN_ALLOWED_PACKET_OVERFLOWED), func_name()); + ER(ER_WARN_ALLOWED_PACKET_OVERFLOWED), func_name(), + current_thd->variables.max_allowed_packet); goto null; } if (!alloced) @@ -907,7 +911,8 @@ String *Item_func_insert::val_str(String *str) { push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_ALLOWED_PACKET_OVERFLOWED, - ER(ER_WARN_ALLOWED_PACKET_OVERFLOWED), func_name()); + ER(ER_WARN_ALLOWED_PACKET_OVERFLOWED), + func_name(), current_thd->variables.max_allowed_packet); goto null; } res=copy_if_not_alloced(str,res,res->length()); @@ -1964,7 +1969,8 @@ String *Item_func_repeat::val_str(String *str) { push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_ALLOWED_PACKET_OVERFLOWED, - ER(ER_WARN_ALLOWED_PACKET_OVERFLOWED), func_name()); + ER(ER_WARN_ALLOWED_PACKET_OVERFLOWED), + func_name(), current_thd->variables.max_allowed_packet); goto err; } tot_length= length*(uint) count; @@ -2035,7 +2041,8 @@ String *Item_func_rpad::val_str(String *str) { push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_ALLOWED_PACKET_OVERFLOWED, - ER(ER_WARN_ALLOWED_PACKET_OVERFLOWED), func_name()); + ER(ER_WARN_ALLOWED_PACKET_OVERFLOWED), + func_name(), current_thd->variables.max_allowed_packet); goto err; } if(args[2]->null_value || !pad_char_length) @@ -2121,7 +2128,8 @@ String *Item_func_lpad::val_str(String *str) { push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_ALLOWED_PACKET_OVERFLOWED, - ER(ER_WARN_ALLOWED_PACKET_OVERFLOWED), func_name()); + ER(ER_WARN_ALLOWED_PACKET_OVERFLOWED), + func_name(), current_thd->variables.max_allowed_packet); goto err; } @@ -2415,7 +2423,8 @@ String *Item_load_file::val_str(String *str) { push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_ALLOWED_PACKET_OVERFLOWED, - ER(ER_WARN_ALLOWED_PACKET_OVERFLOWED), func_name()); + ER(ER_WARN_ALLOWED_PACKET_OVERFLOWED), + func_name(), current_thd->variables.max_allowed_packet); goto err; } if (tmp_value.alloc(stat_info.st_size)) diff --git a/sql/share/czech/errmsg.txt b/sql/share/czech/errmsg.txt index 3cc665f0597..b62911b8090 100644 --- a/sql/share/czech/errmsg.txt +++ b/sql/share/czech/errmsg.txt @@ -313,3 +313,4 @@ character-set=latin2 "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", +"Result of %s() was larger than max_allowed_packet (%d) - truncated" diff --git a/sql/share/danish/errmsg.txt b/sql/share/danish/errmsg.txt index 7b42d47f008..07c6c422465 100644 --- a/sql/share/danish/errmsg.txt +++ b/sql/share/danish/errmsg.txt @@ -307,3 +307,4 @@ character-set=latin1 "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", +"Result of %s() was larger than max_allowed_packet (%d) - truncated" diff --git a/sql/share/dutch/errmsg.txt b/sql/share/dutch/errmsg.txt index ce1d06d4356..1b133ba6cf5 100644 --- a/sql/share/dutch/errmsg.txt +++ b/sql/share/dutch/errmsg.txt @@ -315,3 +315,4 @@ character-set=latin1 "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", +"Result of %s() was larger than max_allowed_packet (%d) - truncated" diff --git a/sql/share/english/errmsg.txt b/sql/share/english/errmsg.txt index b8b4cd1127d..40024bada59 100644 --- a/sql/share/english/errmsg.txt +++ b/sql/share/english/errmsg.txt @@ -304,3 +304,4 @@ character-set=latin1 "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", +"Result of %s() was larger than max_allowed_packet (%d) - truncated" diff --git a/sql/share/estonian/errmsg.txt b/sql/share/estonian/errmsg.txt index 626816ae72c..3b8cd1a0876 100644 --- a/sql/share/estonian/errmsg.txt +++ b/sql/share/estonian/errmsg.txt @@ -308,3 +308,4 @@ character-set=latin7 "Got temporary error %d '%-.100s' from %s", "Unknown or incorrect time zone: '%-.64s'", "Invalid %s character string: '%.64s'", +"Result of %s() was larger than max_allowed_packet (%d) - truncated" diff --git a/sql/share/french/errmsg.txt b/sql/share/french/errmsg.txt index 7b3497ead2b..3d770eaff71 100644 --- a/sql/share/french/errmsg.txt +++ b/sql/share/french/errmsg.txt @@ -304,3 +304,4 @@ character-set=latin1 "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", +"Result of %s() was larger than max_allowed_packet (%d) - truncated" diff --git a/sql/share/german/errmsg.txt b/sql/share/german/errmsg.txt index 75732b3f732..63afe6f6e5d 100644 --- a/sql/share/german/errmsg.txt +++ b/sql/share/german/errmsg.txt @@ -316,3 +316,4 @@ character-set=latin1 "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", +"Result of %s() was larger than max_allowed_packet (%d) - truncated" diff --git a/sql/share/greek/errmsg.txt b/sql/share/greek/errmsg.txt index 3825240927a..58587a4ff38 100644 --- a/sql/share/greek/errmsg.txt +++ b/sql/share/greek/errmsg.txt @@ -304,3 +304,4 @@ character-set=greek "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", +"Result of %s() was larger than max_allowed_packet (%d) - truncated" diff --git a/sql/share/hungarian/errmsg.txt b/sql/share/hungarian/errmsg.txt index eb968dd3a27..3d5284dfa1a 100644 --- a/sql/share/hungarian/errmsg.txt +++ b/sql/share/hungarian/errmsg.txt @@ -306,3 +306,4 @@ character-set=latin2 "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", +"Result of %s() was larger than max_allowed_packet (%d) - truncated" diff --git a/sql/share/italian/errmsg.txt b/sql/share/italian/errmsg.txt index 7112bcce5f2..1ae152fff8f 100644 --- a/sql/share/italian/errmsg.txt +++ b/sql/share/italian/errmsg.txt @@ -304,3 +304,4 @@ character-set=latin1 "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", +"Result of %s() was larger than max_allowed_packet (%d) - truncated" diff --git a/sql/share/japanese/errmsg.txt b/sql/share/japanese/errmsg.txt index 005f85c6ad7..012f6693e6f 100644 --- a/sql/share/japanese/errmsg.txt +++ b/sql/share/japanese/errmsg.txt @@ -306,3 +306,4 @@ character-set=ujis "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", +"Result of %s() was larger than max_allowed_packet (%d) - truncated" diff --git a/sql/share/korean/errmsg.txt b/sql/share/korean/errmsg.txt index a1b6a6c2654..65146fb6578 100644 --- a/sql/share/korean/errmsg.txt +++ b/sql/share/korean/errmsg.txt @@ -304,3 +304,4 @@ character-set=euckr "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", +"Result of %s() was larger than max_allowed_packet (%d) - truncated" diff --git a/sql/share/norwegian-ny/errmsg.txt b/sql/share/norwegian-ny/errmsg.txt index 52f1a4ec12c..3825b0c84a7 100644 --- a/sql/share/norwegian-ny/errmsg.txt +++ b/sql/share/norwegian-ny/errmsg.txt @@ -306,3 +306,4 @@ character-set=latin1 "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", +"Result of %s() was larger than max_allowed_packet (%d) - truncated" diff --git a/sql/share/norwegian/errmsg.txt b/sql/share/norwegian/errmsg.txt index fadcc203c37..dd0f0a4c6cb 100644 --- a/sql/share/norwegian/errmsg.txt +++ b/sql/share/norwegian/errmsg.txt @@ -306,3 +306,4 @@ character-set=latin1 "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", +"Result of %s() was larger than max_allowed_packet (%d) - truncated" diff --git a/sql/share/polish/errmsg.txt b/sql/share/polish/errmsg.txt index bac2e0678a8..9d61a0efed5 100644 --- a/sql/share/polish/errmsg.txt +++ b/sql/share/polish/errmsg.txt @@ -308,3 +308,4 @@ character-set=latin2 "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", +"Result of %s() was larger than max_allowed_packet (%d) - truncated" diff --git a/sql/share/portuguese/errmsg.txt b/sql/share/portuguese/errmsg.txt index 9e5988490b3..68784bc7be8 100644 --- a/sql/share/portuguese/errmsg.txt +++ b/sql/share/portuguese/errmsg.txt @@ -305,3 +305,4 @@ character-set=latin1 "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", +"Result of %s() was larger than max_allowed_packet (%d) - truncated" diff --git a/sql/share/romanian/errmsg.txt b/sql/share/romanian/errmsg.txt index 29dd9eb022a..8272ada205b 100644 --- a/sql/share/romanian/errmsg.txt +++ b/sql/share/romanian/errmsg.txt @@ -308,3 +308,4 @@ character-set=latin2 "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", +"Result of %s() was larger than max_allowed_packet (%d) - truncated" diff --git a/sql/share/russian/errmsg.txt b/sql/share/russian/errmsg.txt index 7cbbd6e36b8..3f567f88c46 100644 --- a/sql/share/russian/errmsg.txt +++ b/sql/share/russian/errmsg.txt @@ -306,3 +306,4 @@ character-set=koi8r "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", +"Result of %s() was larger than max_allowed_packet (%d) - truncated" diff --git a/sql/share/serbian/errmsg.txt b/sql/share/serbian/errmsg.txt index c45df8bfbe9..a4c8ea3713a 100644 --- a/sql/share/serbian/errmsg.txt +++ b/sql/share/serbian/errmsg.txt @@ -310,3 +310,4 @@ character-set=cp1250 "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", +"Result of %s() was larger than max_allowed_packet (%d) - truncated" diff --git a/sql/share/slovak/errmsg.txt b/sql/share/slovak/errmsg.txt index f94bb70d9e8..fbcaeab526f 100644 --- a/sql/share/slovak/errmsg.txt +++ b/sql/share/slovak/errmsg.txt @@ -312,3 +312,4 @@ character-set=latin2 "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", +"Result of %s() was larger than max_allowed_packet (%d) - truncated" diff --git a/sql/share/spanish/errmsg.txt b/sql/share/spanish/errmsg.txt index 68488528309..ebdfeba1be2 100644 --- a/sql/share/spanish/errmsg.txt +++ b/sql/share/spanish/errmsg.txt @@ -306,3 +306,4 @@ character-set=latin1 "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", +"Result of %s() was larger than max_allowed_packet (%d) - truncated" diff --git a/sql/share/swedish/errmsg.txt b/sql/share/swedish/errmsg.txt index 6bb2ede2cb1..53abfb238c3 100644 --- a/sql/share/swedish/errmsg.txt +++ b/sql/share/swedish/errmsg.txt @@ -304,3 +304,4 @@ character-set=latin1 "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", +"Result of %s() was larger than max_allowed_packet (%d) - truncated" diff --git a/sql/share/ukrainian/errmsg.txt b/sql/share/ukrainian/errmsg.txt index e16b4ef64d6..2267b497673 100644 --- a/sql/share/ukrainian/errmsg.txt +++ b/sql/share/ukrainian/errmsg.txt @@ -309,3 +309,4 @@ character-set=koi8u "Unknown or incorrect time zone: '%-.64s'", "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", +"Result of %s() was larger than max_allowed_packet (%d) - truncated" From cb35648ec804ff3102895611b0a04999eb93ade1 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 21 Jul 2004 19:17:07 +0200 Subject: [PATCH 6/7] fixed ORDER BY ? new tests to ensure that prepared statement *really* work (and that MySQL not picks up some number from arbitrary location that happens to match the parameter's value) mysql-test/include/ps_query.inc: new tests to ensure that prepared statement *really* work (and that MySQL not picks up some number from arbitrary location that happens to match the parameter's value) mysql-test/r/ps_2myisam.result: results updated mysql-test/r/ps_3innodb.result: results updated mysql-test/r/ps_4heap.result: results updated mysql-test/r/ps_5merge.result: results updated mysql-test/r/ps_6bdb.result: results updated sql/sql_select.cc: don't shortcut - it backfires! (in particular - when itemptr is Item_param :) --- mysql-test/include/ps_query.inc | 5 +++++ mysql-test/r/ps_2myisam.result | 10 ++++++++++ mysql-test/r/ps_3innodb.result | 10 ++++++++++ mysql-test/r/ps_4heap.result | 10 ++++++++++ mysql-test/r/ps_5merge.result | 20 ++++++++++++++++++++ mysql-test/r/ps_6bdb.result | 10 ++++++++++ sql/sql_select.cc | 2 +- 7 files changed, 66 insertions(+), 1 deletion(-) diff --git a/mysql-test/include/ps_query.inc b/mysql-test/include/ps_query.inc index e22f168dcd7..bc5d3eb6ed1 100644 --- a/mysql-test/include/ps_query.inc +++ b/mysql-test/include/ps_query.inc @@ -246,6 +246,11 @@ select a,b from t1 order by 2 ; prepare stmt1 from ' select a,b from t1 order by ? '; execute stmt1 using @arg00; +set @arg00=1 ; +execute stmt1 using @arg00; +set @arg00=0 ; +--error 1054 +execute stmt1 using @arg00; ##### parameter used in limit clause set @arg00=1; diff --git a/mysql-test/r/ps_2myisam.result b/mysql-test/r/ps_2myisam.result index d630730d96f..23ce63cacc3 100644 --- a/mysql-test/r/ps_2myisam.result +++ b/mysql-test/r/ps_2myisam.result @@ -334,6 +334,16 @@ a b 1 one 3 three 2 two +set @arg00=1 ; +execute stmt1 using @arg00; +a b +1 one +2 two +3 three +4 four +set @arg00=0 ; +execute stmt1 using @arg00; +ERROR 42S22: Unknown column '?' in 'order clause' set @arg00=1; prepare stmt1 from ' select a,b from t1 limit 1 '; diff --git a/mysql-test/r/ps_3innodb.result b/mysql-test/r/ps_3innodb.result index b89daca7128..8ec7caa311c 100644 --- a/mysql-test/r/ps_3innodb.result +++ b/mysql-test/r/ps_3innodb.result @@ -334,6 +334,16 @@ a b 1 one 3 three 2 two +set @arg00=1 ; +execute stmt1 using @arg00; +a b +1 one +2 two +3 three +4 four +set @arg00=0 ; +execute stmt1 using @arg00; +ERROR 42S22: Unknown column '?' in 'order clause' set @arg00=1; prepare stmt1 from ' select a,b from t1 limit 1 '; diff --git a/mysql-test/r/ps_4heap.result b/mysql-test/r/ps_4heap.result index 112ef86a681..fae17eb2e23 100644 --- a/mysql-test/r/ps_4heap.result +++ b/mysql-test/r/ps_4heap.result @@ -335,6 +335,16 @@ a b 1 one 3 three 2 two +set @arg00=1 ; +execute stmt1 using @arg00; +a b +1 one +2 two +3 three +4 four +set @arg00=0 ; +execute stmt1 using @arg00; +ERROR 42S22: Unknown column '?' in 'order clause' set @arg00=1; prepare stmt1 from ' select a,b from t1 limit 1 '; diff --git a/mysql-test/r/ps_5merge.result b/mysql-test/r/ps_5merge.result index 8fc035b0aef..5aedebe396f 100644 --- a/mysql-test/r/ps_5merge.result +++ b/mysql-test/r/ps_5merge.result @@ -377,6 +377,16 @@ a b 1 one 3 three 2 two +set @arg00=1 ; +execute stmt1 using @arg00; +a b +1 one +2 two +3 three +4 four +set @arg00=0 ; +execute stmt1 using @arg00; +ERROR 42S22: Unknown column '?' in 'order clause' set @arg00=1; prepare stmt1 from ' select a,b from t1 limit 1 '; @@ -1560,6 +1570,16 @@ a b 1 one 3 three 2 two +set @arg00=1 ; +execute stmt1 using @arg00; +a b +1 one +2 two +3 three +4 four +set @arg00=0 ; +execute stmt1 using @arg00; +ERROR 42S22: Unknown column '?' in 'order clause' set @arg00=1; prepare stmt1 from ' select a,b from t1 limit 1 '; diff --git a/mysql-test/r/ps_6bdb.result b/mysql-test/r/ps_6bdb.result index eeabd114b91..1c6b309576c 100644 --- a/mysql-test/r/ps_6bdb.result +++ b/mysql-test/r/ps_6bdb.result @@ -334,6 +334,16 @@ a b 1 one 3 three 2 two +set @arg00=1 ; +execute stmt1 using @arg00; +a b +1 one +2 two +3 three +4 four +set @arg00=0 ; +execute stmt1 using @arg00; +ERROR 42S22: Unknown column '?' in 'order clause' set @arg00=1; prepare stmt1 from ' select a,b from t1 limit 1 '; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 657853c98ba..487caeb62db 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -8000,7 +8000,7 @@ find_order_in_list(THD *thd, Item **ref_pointer_array, Item *itemptr=*order->item; if (itemptr->type() == Item::INT_ITEM) { /* Order by position */ - uint count= (uint) ((Item_int*)itemptr)->value; + uint count= itemptr->val_int(); if (!count || count > fields.elements) { my_printf_error(ER_BAD_FIELD_ERROR,ER(ER_BAD_FIELD_ERROR), From ff4aa03dc5e20501fbb3541dfef55f13cd7ca221 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 21 Jul 2004 22:44:12 +0300 Subject: [PATCH 7/7] LEX initialization fixed --- sql/log_event.cc | 2 +- sql/mysql_priv.h | 2 +- sql/sql_lex.cc | 12 +++++------- sql/sql_lex.h | 6 +++--- sql/sql_parse.cc | 12 ++++++------ sql/sql_prepare.cc | 4 ++-- 6 files changed, 18 insertions(+), 20 deletions(-) diff --git a/sql/log_event.cc b/sql/log_event.cc index ffc54362ea2..d10b83d550a 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -1706,7 +1706,7 @@ int Load_log_event::exec_event(NET* net, struct st_relay_log_info* rli, Usually mysql_init_query() is called by mysql_parse(), but we need it here as the present method does not call mysql_parse(). */ - mysql_init_query(thd); + mysql_init_query(thd, 0, 0); if (!use_rli_only_for_errors) { #if MYSQL_VERSION_ID < 50000 diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index 8707bc205df..53f21213d0e 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -434,7 +434,7 @@ bool mysql_test_parse_for_slave(THD *thd,char *inBuf,uint length); bool is_update_query(enum enum_sql_command command); bool alloc_query(THD *thd, char *packet, ulong packet_length); void mysql_init_select(LEX *lex); -void mysql_init_query(THD *thd); +void mysql_init_query(THD *thd, uchar *buf, uint length); bool mysql_new_select(LEX *lex, bool move_down); void create_select_for_variable(const char *var_name); void mysql_init_multi_delete(LEX *lex); diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index d945eef1425..949eaba7311 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -104,14 +104,13 @@ void lex_free(void) (We already do too much here) */ -LEX *lex_start(THD *thd, uchar *buf,uint length) +void lex_start(THD *thd, uchar *buf,uint length) { LEX *lex= thd->lex; lex->thd= thd; lex->next_state=MY_LEX_START; lex->end_of_query=(lex->ptr=buf)+length; lex->yylineno = 1; - lex->select_lex.parsing_place= SELECT_LEX_NODE::NO_MATTER; lex->in_comment=0; lex->length=0; lex->select_lex.in_sum_expr=0; @@ -125,7 +124,6 @@ LEX *lex_start(THD *thd, uchar *buf,uint length) lex->ignore_space=test(thd->variables.sql_mode & MODE_IGNORE_SPACE); lex->sql_command=SQLCOM_END; lex->duplicates= DUP_ERROR; - return lex; } void lex_end(LEX *lex) @@ -1009,6 +1007,7 @@ void st_select_lex::init_query() select_n_having_items= 0; prep_where= 0; subquery_in_having= explicit_limit= 0; + parsing_place= SELECT_LEX_NODE::NO_MATTER; } void st_select_lex::init_select() @@ -1022,9 +1021,9 @@ void st_select_lex::init_select() in_sum_expr= with_wild= 0; options= 0; braces= 0; - when_list.empty(); + when_list.empty(); expr_list.empty(); - interval_list.empty(); + interval_list.empty(); use_index.empty(); ftfunc_list_alloc.empty(); ftfunc_list= &ftfunc_list_alloc; @@ -1035,7 +1034,6 @@ void st_select_lex::init_select() select_limit= HA_POS_ERROR; offset_limit= 0; with_sum_func= 0; - parsing_place= SELECT_LEX_NODE::NO_MATTER; } /* @@ -1055,7 +1053,7 @@ void st_select_lex_node::include_down(st_select_lex_node *upper) /* include on level down (but do not link) - + SYNOPSYS st_select_lex_node::include_standalone() upper - reference on node underr which this node should be included diff --git a/sql/sql_lex.h b/sql/sql_lex.h index 328df2f6bb9..5348d5e5646 100644 --- a/sql/sql_lex.h +++ b/sql/sql_lex.h @@ -375,7 +375,7 @@ public: ulong init_prepare_fake_select_lex(THD *thd); int change_result(select_subselect *result, select_subselect *old_result); - friend void mysql_init_query(THD *thd); + friend void mysql_init_query(THD *thd, uchar *buf, uint length); friend int subselect_union_engine::exec(); private: bool create_total_list_n_last_return(THD *thd, st_lex *lex, @@ -514,7 +514,7 @@ public: bool test_limit(); - friend void mysql_init_query(THD *thd); + friend void mysql_init_query(THD *thd, uchar *buf, uint length); st_select_lex() {} void make_empty_select() { @@ -664,7 +664,7 @@ typedef struct st_lex void lex_init(void); void lex_free(void); -LEX *lex_start(THD *thd, uchar *buf,uint length); +void lex_start(THD *thd, uchar *buf,uint length); void lex_end(LEX *lex); extern pthread_key(LEX*,THR_LEX); diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index e83868bac7c..b69d582f30b 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -3850,7 +3850,7 @@ bool my_yyoverflow(short **yyss, YYSTYPE **yyvs, ulong *yystacksize) ****************************************************************************/ void -mysql_init_query(THD *thd) +mysql_init_query(THD *thd, uchar *buf, uint length) { DBUG_ENTER("mysql_init_query"); LEX *lex= thd->lex; @@ -3875,6 +3875,7 @@ mysql_init_query(THD *thd) lex->lock_option= TL_READ; lex->found_colon= 0; lex->safe_to_cache_query= 1; + lex_start(thd, buf, length); thd->select_number= lex->select_lex.select_number= 1; thd->free_list= 0; thd->total_warn_count=0; // Warnings for this query @@ -4012,10 +4013,10 @@ void mysql_parse(THD *thd, char *inBuf, uint length) { DBUG_ENTER("mysql_parse"); - mysql_init_query(thd); + mysql_init_query(thd, (uchar*) inBuf, length); if (query_cache_send_result_to_client(thd, inBuf, length) <= 0) { - LEX *lex=lex_start(thd, (uchar*) inBuf, length); + LEX *lex= thd->lex; if (!yyparse((void *)thd) && ! thd->is_fatal_error) { #ifndef NO_EMBEDDED_ACCESS_CHECKS @@ -4062,11 +4063,10 @@ void mysql_parse(THD *thd, char *inBuf, uint length) bool mysql_test_parse_for_slave(THD *thd, char *inBuf, uint length) { - LEX *lex; + LEX *lex= thd->lex; bool error= 0; - mysql_init_query(thd); - lex= lex_start(thd, (uchar*) inBuf, length); + mysql_init_query(thd, (uchar*) inBuf, length); if (!yyparse((void*) thd) && ! thd->is_fatal_error && all_tables_not_ok(thd,(TABLE_LIST*) lex->select_lex.table_list.first)) error= 1; /* Ignore question */ diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index 4305bee42a2..6435c7407a9 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -1613,8 +1613,8 @@ int mysql_stmt_prepare(THD *thd, char *packet, uint packet_length, mysql_log.write(thd, COM_PREPARE, "%s", packet); thd->current_statement= stmt; - lex= lex_start(thd, (uchar *) thd->query, thd->query_length); - mysql_init_query(thd); + mysql_init_query(thd, (uchar *) thd->query, thd->query_length); + lex= thd->lex; lex->safe_to_cache_query= 0; error= yyparse((void *)thd) || thd->is_fatal_error ||