From 1392f4820aba16e2349a46962d8b7c7cddadd800 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 7 May 2005 15:48:56 +0500 Subject: [PATCH 01/63] BUG#7709 fix - Boolean fulltext query against unsupported engines does not fail. mysql-test/r/innodb.result: Test case for BUG#7709 - Boolean fulltext query against unsupported engines does not fail added. mysql-test/t/innodb.test: Test case for BUG#7709 - Boolean fulltext query against unsupported engines does not fail added. sql/item_func.cc: Check if table supports fulltext. BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted --- BitKeeper/etc/logging_ok | 1 + mysql-test/r/innodb.result | 3 +++ mysql-test/t/innodb.test | 9 +++++++++ sql/item_func.cc | 5 +++++ 4 files changed, 18 insertions(+) diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index 5a34dbbb1d8..7052d853b00 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -142,6 +142,7 @@ serg@sergbook.mylan serg@sergbook.mysql.com sergefp@mysql.com sinisa@rhols221.adsl.netsonic.fi +svoj@mysql.com tfr@beta.frontier86.ee tfr@indrek.tfr.cafe.ee tfr@sarvik.tfr.cafe.ee diff --git a/mysql-test/r/innodb.result b/mysql-test/r/innodb.result index f00679801f8..dbfe1c3aff5 100644 --- a/mysql-test/r/innodb.result +++ b/mysql-test/r/innodb.result @@ -1272,3 +1272,6 @@ Cannot delete or update a parent row: a foreign key constraint fails delete from t1 where id=15; delete from t1 where id=0; drop table t1; +CREATE TABLE t1 ( a char(10) ) ENGINE=InnoDB; +SELECT a FROM t1 WHERE MATCH (a) AGAINST ('test' IN BOOLEAN MODE); +The used table type doesn't support FULLTEXT indexes diff --git a/mysql-test/t/innodb.test b/mysql-test/t/innodb.test index 2c8002ea841..c25f295cac8 100644 --- a/mysql-test/t/innodb.test +++ b/mysql-test/t/innodb.test @@ -911,3 +911,12 @@ delete from t1 where id=15; delete from t1 where id=0; drop table t1; + +# +# BUG#7709 test case - Boolean fulltext query against unsupported +# engines does not fail +# + +CREATE TABLE t1 ( a char(10) ) ENGINE=InnoDB; +--error 1214; +SELECT a FROM t1 WHERE MATCH (a) AGAINST ('test' IN BOOLEAN MODE); diff --git a/sql/item_func.cc b/sql/item_func.cc index 334be48dc9a..855e86b2382 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -2257,6 +2257,11 @@ bool Item_func_match::fix_fields(THD *thd,struct st_table_list *tlist) key=NO_SUCH_KEY; const_item_cache=0; table=((Item_field *)fields.head())->field->table; + if (!(table->file->table_flags() & HA_CAN_FULLTEXT)) + { + my_error(ER_TABLE_CANT_HANDLE_FULLTEXT, MYF(0)); + return 1; + } table->fulltext_searched=1; record=table->record[0]; if (key == NO_SUCH_KEY && mode != FT_BOOL) From 6e13083d658faccd5aee83f32d1e0d9c45c87ebd Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 7 May 2005 15:11:31 +0200 Subject: [PATCH 02/63] errmsg.txt: Add newline at EOF for proper processing by comp-err.exe on Windows where fgets() works differently than Linux (Bug #6195). sql/share/czech/errmsg.txt: Add newline at EOF for proper processing by comp-err.exe on Windows where fgets() works differently than Linux (Bug #6195). sql/share/danish/errmsg.txt: Add newline at EOF for proper processing by comp-err.exe on Windows where fgets() works differently than Linux (Bug #6195). sql/share/dutch/errmsg.txt: Add newline at EOF for proper processing by comp-err.exe on Windows where fgets() works differently than Linux (Bug #6195). sql/share/english/errmsg.txt: Add newline at EOF for proper processing by comp-err.exe on Windows where fgets() works differently than Linux (Bug #6195). sql/share/estonian/errmsg.txt: Add newline at EOF for proper processing by comp-err.exe on Windows where fgets() works differently than Linux (Bug #6195). sql/share/french/errmsg.txt: Add newline at EOF for proper processing by comp-err.exe on Windows where fgets() works differently than Linux (Bug #6195). sql/share/german/errmsg.txt: Add newline at EOF for proper processing by comp-err.exe on Windows where fgets() works differently than Linux (Bug #6195). sql/share/greek/errmsg.txt: Add newline at EOF for proper processing by comp-err.exe on Windows where fgets() works differently than Linux (Bug #6195). sql/share/hungarian/errmsg.txt: Add newline at EOF for proper processing by comp-err.exe on Windows where fgets() works differently than Linux (Bug #6195). sql/share/italian/errmsg.txt: Add newline at EOF for proper processing by comp-err.exe on Windows where fgets() works differently than Linux (Bug #6195). sql/share/japanese/errmsg.txt: Add newline at EOF for proper processing by comp-err.exe on Windows where fgets() works differently than Linux (Bug #6195). sql/share/korean/errmsg.txt: Add newline at EOF for proper processing by comp-err.exe on Windows where fgets() works differently than Linux (Bug #6195). sql/share/norwegian/errmsg.txt: Add newline at EOF for proper processing by comp-err.exe on Windows where fgets() works differently than Linux (Bug #6195). sql/share/norwegian-ny/errmsg.txt: Add newline at EOF for proper processing by comp-err.exe on Windows where fgets() works differently than Linux (Bug #6195). sql/share/polish/errmsg.txt: Add newline at EOF for proper processing by comp-err.exe on Windows where fgets() works differently than Linux (Bug #6195). sql/share/portuguese/errmsg.txt: Add newline at EOF for proper processing by comp-err.exe on Windows where fgets() works differently than Linux (Bug #6195). sql/share/romanian/errmsg.txt: Add newline at EOF for proper processing by comp-err.exe on Windows where fgets() works differently than Linux (Bug #6195). sql/share/russian/errmsg.txt: Add newline at EOF for proper processing by comp-err.exe on Windows where fgets() works differently than Linux (Bug #6195). sql/share/slovak/errmsg.txt: Add newline at EOF for proper processing by comp-err.exe on Windows where fgets() works differently than Linux (Bug #6195). sql/share/spanish/errmsg.txt: Add newline at EOF for proper processing by comp-err.exe on Windows where fgets() works differently than Linux (Bug #6195). sql/share/swedish/errmsg.txt: Add newline at EOF for proper processing by comp-err.exe on Windows where fgets() works differently than Linux (Bug #6195). sql/share/ukrainian/errmsg.txt: Add newline at EOF for proper processing by comp-err.exe on Windows where fgets() works differently than Linux (Bug #6195). BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted --- BitKeeper/etc/logging_ok | 1 + 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/slovak/errmsg.txt | 1 + sql/share/spanish/errmsg.txt | 1 + sql/share/swedish/errmsg.txt | 1 + sql/share/ukrainian/errmsg.txt | 1 + 23 files changed, 23 insertions(+) diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index 967f8c7cb47..998f8234343 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -107,6 +107,7 @@ monty@work.mysql.com mwagner@cash.mwagner.org mwagner@evoq.mwagner.org mwagner@here.mwagner.org +mwagner@ultrafly.mysql.com mwagner@work.mysql.com mysqldev@build.mysql2.com nick@mysql.com diff --git a/sql/share/czech/errmsg.txt b/sql/share/czech/errmsg.txt index 88ecaed386b..70aea3fdf62 100644 --- a/sql/share/czech/errmsg.txt +++ b/sql/share/czech/errmsg.txt @@ -265,3 +265,4 @@ "Got fatal error %d: '%-.128s' from master when reading data from binary log", "Slave SQL thread ignored the query because of replicate-*-table rules" "Variable '%-.64s' is a %s variable" + diff --git a/sql/share/danish/errmsg.txt b/sql/share/danish/errmsg.txt index 6210bf7788c..8c0bf688311 100644 --- a/sql/share/danish/errmsg.txt +++ b/sql/share/danish/errmsg.txt @@ -256,3 +256,4 @@ "Got fatal error %d: '%-.128s' from master when reading data from binary log", "Slave SQL thread ignored the query because of replicate-*-table rules" "Variable '%-.64s' is a %s variable" + diff --git a/sql/share/dutch/errmsg.txt b/sql/share/dutch/errmsg.txt index c3607f4cd0f..c2baf0240af 100644 --- a/sql/share/dutch/errmsg.txt +++ b/sql/share/dutch/errmsg.txt @@ -265,3 +265,4 @@ "Kreeg fatale fout %d: '%-.128s' van master tijdens lezen van data uit binaire log", "Slave SQL thread ignored the query because of replicate-*-table rules" "Variable '%-.64s' is a %s variable" + diff --git a/sql/share/english/errmsg.txt b/sql/share/english/errmsg.txt index 7c9d789c86e..ed5977fd78c 100644 --- a/sql/share/english/errmsg.txt +++ b/sql/share/english/errmsg.txt @@ -255,3 +255,4 @@ "Variable '%-.64s' is a %s variable" ] # End of error messages # Do NOT add new error messages here as this makes merges to 4.1 too hard! + diff --git a/sql/share/estonian/errmsg.txt b/sql/share/estonian/errmsg.txt index 8157a33836e..581baf24e09 100644 --- a/sql/share/estonian/errmsg.txt +++ b/sql/share/estonian/errmsg.txt @@ -258,3 +258,4 @@ "Got fatal error %d: '%-.128s' from master when reading data from binary log", "Slave SQL thread ignored the query because of replicate-*-table rules" "Variable '%-.64s' is a %s variable" + diff --git a/sql/share/french/errmsg.txt b/sql/share/french/errmsg.txt index 3c88ccc0378..9aa430aa718 100644 --- a/sql/share/french/errmsg.txt +++ b/sql/share/french/errmsg.txt @@ -253,3 +253,4 @@ "Got fatal error %d: '%-.128s' from master when reading data from binary log", "Slave SQL thread ignored the query because of replicate-*-table rules" "Variable '%-.64s' is a %s variable" + diff --git a/sql/share/german/errmsg.txt b/sql/share/german/errmsg.txt index 91f3f91a464..7fa896bcc34 100644 --- a/sql/share/german/errmsg.txt +++ b/sql/share/german/errmsg.txt @@ -257,3 +257,4 @@ "Got fatal error %d: '%-.128s' from master when reading data from binary log", "Slave SQL thread ignored the query because of replicate-*-table rules" "Variable '%-.64s' is a %s variable" + diff --git a/sql/share/greek/errmsg.txt b/sql/share/greek/errmsg.txt index aff7f8ba3c2..2a2bee5d69a 100644 --- a/sql/share/greek/errmsg.txt +++ b/sql/share/greek/errmsg.txt @@ -253,3 +253,4 @@ "Got fatal error %d: '%-.128s' from master when reading data from binary log", "Slave SQL thread ignored the query because of replicate-*-table rules" "Variable '%-.64s' is a %s variable" + diff --git a/sql/share/hungarian/errmsg.txt b/sql/share/hungarian/errmsg.txt index 60dc3204bb4..f998116410f 100644 --- a/sql/share/hungarian/errmsg.txt +++ b/sql/share/hungarian/errmsg.txt @@ -258,3 +258,4 @@ "Got fatal error %d: '%-.128s' from master when reading data from binary log", "Slave SQL thread ignored the query because of replicate-*-table rules" "Variable '%-.64s' is a %s variable" + diff --git a/sql/share/italian/errmsg.txt b/sql/share/italian/errmsg.txt index c51c69cf298..2ab360dff4e 100644 --- a/sql/share/italian/errmsg.txt +++ b/sql/share/italian/errmsg.txt @@ -253,3 +253,4 @@ "Errore fatale %d: '%-.128s' dal master leggendo i dati dal log binario", "Slave SQL thread ignored the query because of replicate-*-table rules" "Variable '%-.64s' is a %s variable" + diff --git a/sql/share/japanese/errmsg.txt b/sql/share/japanese/errmsg.txt index fb604923e4e..4ad7cc3ec37 100644 --- a/sql/share/japanese/errmsg.txt +++ b/sql/share/japanese/errmsg.txt @@ -257,3 +257,4 @@ "Got fatal error %d: '%-.128s' from master when reading data from binary log", "Slave SQL thread ignored the query because of replicate-*-table rules" "Variable '%-.64s' is a %s variable" + diff --git a/sql/share/korean/errmsg.txt b/sql/share/korean/errmsg.txt index 764cbb78740..3b027796c3b 100644 --- a/sql/share/korean/errmsg.txt +++ b/sql/share/korean/errmsg.txt @@ -253,3 +253,4 @@ "Got fatal error %d: '%-.128s' from master when reading data from binary log", "Slave SQL thread ignored the query because of replicate-*-table rules" "Variable '%-.64s' is a %s variable" + diff --git a/sql/share/norwegian-ny/errmsg.txt b/sql/share/norwegian-ny/errmsg.txt index 424530ecf87..5b994d2dc5b 100644 --- a/sql/share/norwegian-ny/errmsg.txt +++ b/sql/share/norwegian-ny/errmsg.txt @@ -255,3 +255,4 @@ "Got fatal error %d: '%-.128s' from master when reading data from binary log", "Slave SQL thread ignored the query because of replicate-*-table rules" "Variable '%-.64s' is a %s variable" + diff --git a/sql/share/norwegian/errmsg.txt b/sql/share/norwegian/errmsg.txt index 73314ea647b..305bf10899b 100644 --- a/sql/share/norwegian/errmsg.txt +++ b/sql/share/norwegian/errmsg.txt @@ -255,3 +255,4 @@ "Got fatal error %d: '%-.128s' from master when reading data from binary log", "Slave SQL thread ignored the query because of replicate-*-table rules" "Variable '%-.64s' is a %s variable" + diff --git a/sql/share/polish/errmsg.txt b/sql/share/polish/errmsg.txt index f24a54ec8e8..8d6b2fa542e 100644 --- a/sql/share/polish/errmsg.txt +++ b/sql/share/polish/errmsg.txt @@ -258,3 +258,4 @@ "Got fatal error %d: '%-.128s' from master when reading data from binary log", "Slave SQL thread ignored the query because of replicate-*-table rules" "Variable '%-.64s' is a %s variable" + diff --git a/sql/share/portuguese/errmsg.txt b/sql/share/portuguese/errmsg.txt index 2810ac134b1..6fcc044c6b6 100644 --- a/sql/share/portuguese/errmsg.txt +++ b/sql/share/portuguese/errmsg.txt @@ -255,3 +255,4 @@ "Obteve fatal erro %d: '%-.128s' do master quando lendo dados do binary log", "Slave SQL thread ignorado a consulta devido às normas de replicação-*-tabela" "Variable '%-.64s' is a %s variable" + diff --git a/sql/share/romanian/errmsg.txt b/sql/share/romanian/errmsg.txt index 552b532c0a2..c218f19e212 100644 --- a/sql/share/romanian/errmsg.txt +++ b/sql/share/romanian/errmsg.txt @@ -258,3 +258,4 @@ "Got fatal error %d: '%-.128s' from master when reading data from binary log", "Slave SQL thread ignored the query because of replicate-*-table rules" "Variable '%-.64s' is a %s variable" + diff --git a/sql/share/russian/errmsg.txt b/sql/share/russian/errmsg.txt index 668b310a5dc..4419da08051 100644 --- a/sql/share/russian/errmsg.txt +++ b/sql/share/russian/errmsg.txt @@ -258,3 +258,4 @@ "ðÏÌÕÞÅÎÁ ÎÅÉÓÐÒÁ×ÉÍÁÑ ÏÛÉÂËÁ %d: '%-.128s' ÏÔ ÇÏÌÏ×ÎÏÇÏ ÓÅÒ×ÅÒÁ × ÐÒÏÃÅÓÓÅ ×ÙÂÏÒËÉ ÄÁÎÎÙÈ ÉÚ Ä×ÏÉÞÎÏÇÏ ÖÕÒÎÁÌÁ", "Slave SQL thread ignored the query because of replicate-*-table rules" "Variable '%-.64s' is a %s variable" + diff --git a/sql/share/slovak/errmsg.txt b/sql/share/slovak/errmsg.txt index 8467fad5b11..bb241673706 100644 --- a/sql/share/slovak/errmsg.txt +++ b/sql/share/slovak/errmsg.txt @@ -261,3 +261,4 @@ "Got fatal error %d: '%-.128s' from master when reading data from binary log", "Slave SQL thread ignored the query because of replicate-*-table rules" "Variable '%-.64s' is a %s variable" + diff --git a/sql/share/spanish/errmsg.txt b/sql/share/spanish/errmsg.txt index 4ab76a64ca7..2daeebc8eb8 100644 --- a/sql/share/spanish/errmsg.txt +++ b/sql/share/spanish/errmsg.txt @@ -256,3 +256,4 @@ "Recibió fatal error %d: '%-.128s' del master cuando leyendo datos del binary log", "Slave SQL thread ignorado el query debido a las reglas de replicación-*-tabla" "Variable '%-.64s' is a %s variable" + diff --git a/sql/share/swedish/errmsg.txt b/sql/share/swedish/errmsg.txt index 352a226ef23..a9273f6222c 100644 --- a/sql/share/swedish/errmsg.txt +++ b/sql/share/swedish/errmsg.txt @@ -253,3 +253,4 @@ "Fick fatalt fel %d: '%-.128s' från master vid läsning av binärloggen" "Slave SQL thread ignored the query because of replicate-*-table rules" "Variable '%-.64s' is a %s variable" + diff --git a/sql/share/ukrainian/errmsg.txt b/sql/share/ukrainian/errmsg.txt index 131cf07a8e2..371dd16d737 100644 --- a/sql/share/ukrainian/errmsg.txt +++ b/sql/share/ukrainian/errmsg.txt @@ -259,3 +259,4 @@ "Got fatal error %d: '%-.128s' from master when reading data from binary log", "Slave SQL thread ignored the query because of replicate-*-table rules" "Variable '%-.64s' is a %s variable" + From 8001e398df6724052bf0b1957ff1d9578f6b00a5 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 7 May 2005 08:16:43 -0700 Subject: [PATCH 03/63] Eliminate gcc 4.0 warning in libedit code. (Bug #9603) cmd-line-utils/libedit/vi.c: Eliminate compiler warning --- cmd-line-utils/libedit/vi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd-line-utils/libedit/vi.c b/cmd-line-utils/libedit/vi.c index 4a0352859dd..b977ce716c6 100644 --- a/cmd-line-utils/libedit/vi.c +++ b/cmd-line-utils/libedit/vi.c @@ -1014,7 +1014,7 @@ vi_histedit(EditLine *el, int c) return CC_ERROR; case 0: close(fd); - execlp("vi", "vi", tempfile, 0); + execlp("vi", "vi", tempfile, (char *) NULL); exit(0); /*NOTREACHED*/ default: From f5f132fdde32f1798612c8d5b17a1fecf5f1c0fa Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 7 May 2005 21:37:27 +0500 Subject: [PATCH 04/63] Test fix. DROP TABLE added. --- mysql-test/r/innodb.result | 1 + mysql-test/t/innodb.test | 1 + 2 files changed, 2 insertions(+) diff --git a/mysql-test/r/innodb.result b/mysql-test/r/innodb.result index dbfe1c3aff5..f634edcbe91 100644 --- a/mysql-test/r/innodb.result +++ b/mysql-test/r/innodb.result @@ -1275,3 +1275,4 @@ drop table t1; CREATE TABLE t1 ( a char(10) ) ENGINE=InnoDB; SELECT a FROM t1 WHERE MATCH (a) AGAINST ('test' IN BOOLEAN MODE); The used table type doesn't support FULLTEXT indexes +DROP TABLE t1; diff --git a/mysql-test/t/innodb.test b/mysql-test/t/innodb.test index c25f295cac8..96975d54810 100644 --- a/mysql-test/t/innodb.test +++ b/mysql-test/t/innodb.test @@ -920,3 +920,4 @@ drop table t1; CREATE TABLE t1 ( a char(10) ) ENGINE=InnoDB; --error 1214; SELECT a FROM t1 WHERE MATCH (a) AGAINST ('test' IN BOOLEAN MODE); +DROP TABLE t1; From 04f9561a911397360d53a27e4bf414e1c220fd16 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 8 May 2005 12:02:46 -0700 Subject: [PATCH 05/63] Fix crash in mysqldump -c triggered by tables with a large number of long field names. (Bug #10286) client/mysqldump.c: Use a DYNAMIC_STRING for the 'INSERT ...' pattern so we can handle an arbitrary number of fields. Also rename the internal cFlag to opt_complete_insert so it is clear what it does. mysql-test/t/mysqldump.test: Add regression test for 10286 mysql-test/r/mysqldump.result: Update results --- client/mysqldump.c | 108 +++--- mysql-test/r/mysqldump.result | 705 ++++++++++++++++++++++++++++++++++ mysql-test/t/mysqldump.test | 338 ++++++++++++++++ 3 files changed, 1108 insertions(+), 43 deletions(-) diff --git a/client/mysqldump.c b/client/mysqldump.c index 2573c812067..8cfd76cd64a 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -75,7 +75,7 @@ static ulong find_set(TYPELIB *lib, const char *x, uint length, char **err_pos, uint *err_len); static char *field_escape(char *to,const char *from,uint length); -static my_bool verbose=0,tFlag=0,cFlag=0,dFlag=0,quick= 1, extended_insert= 1, +static my_bool verbose=0,tFlag=0,dFlag=0,quick= 1, extended_insert= 1, lock_tables=1,ignore_errors=0,flush_logs=0, opt_drop=1,opt_keywords=0,opt_lock=1,opt_compress=0, opt_delayed=0,create_options=1,opt_quoted=0,opt_databases=0, @@ -83,10 +83,12 @@ static my_bool verbose=0,tFlag=0,cFlag=0,dFlag=0,quick= 1, extended_insert= 1, opt_autocommit=0,opt_disable_keys=1,opt_xml=0, opt_delete_master_logs=0, tty_password=0, opt_single_transaction=0, opt_comments= 0, opt_compact= 0, - opt_hex_blob=0, opt_order_by_primary=0; + opt_hex_blob=0, opt_order_by_primary=0, opt_complete_insert= 0; static ulong opt_max_allowed_packet, opt_net_buffer_length; static MYSQL mysql_connection,*sock=0; -static char insert_pat[12 * 1024],*opt_password=0,*current_user=0, +static my_bool insert_pat_inited=0; +static DYNAMIC_STRING insert_pat; +static char *opt_password=0,*current_user=0, *current_host=0,*path=0,*fields_terminated=0, *lines_terminated=0, *enclosed=0, *opt_enclosed=0, *escaped=0, *where=0, *order_by=0, @@ -178,8 +180,9 @@ static struct my_option my_long_options[] = "Give less verbose output (useful for debugging). Disables structure comments and header/footer constructs. Enables options --skip-add-drop-table --no-set-names --skip-disable-keys --skip-add-locks", (gptr*) &opt_compact, (gptr*) &opt_compact, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, - {"complete-insert", 'c', "Use complete insert statements.", (gptr*) &cFlag, - (gptr*) &cFlag, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, + {"complete-insert", 'c', "Use complete insert statements.", + (gptr*) &opt_complete_insert, (gptr*) &opt_complete_insert, 0, GET_BOOL, + NO_ARG, 0, 0, 0, 0, 0, 0}, {"compress", 'C', "Use compression in server/client protocol.", (gptr*) &opt_compress, (gptr*) &opt_compress, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, @@ -1082,7 +1085,7 @@ static void print_xml_row(FILE *xml_file, const char *row_name, /* - getStructure -- retrievs database structure, prints out corresponding + getTableStructure -- retrievs database structure, prints out corresponding CREATE statement and fills out insert_pat. RETURN @@ -1095,23 +1098,31 @@ static uint getTableStructure(char *table, char* db) MYSQL_ROW row; my_bool init=0; uint numFields; - char *strpos, *result_table, *opt_quoted_table; + char *result_table, *opt_quoted_table; const char *delayed; char name_buff[NAME_LEN+3],table_buff[NAME_LEN*2+3]; char table_buff2[NAME_LEN*2+3]; + char query_buff[512]; FILE *sql_file = md_result_file; DBUG_ENTER("getTableStructure"); + if (!insert_pat_inited) + { + insert_pat_inited= init_dynamic_string(&insert_pat, "", 1024, 1024); + } + else + dynstr_set(&insert_pat, ""); + delayed= opt_delayed ? " DELAYED " : ""; if (verbose) fprintf(stderr, "-- Retrieving table structure for table %s...\n", table); - my_snprintf(insert_pat, sizeof(insert_pat), + my_snprintf(query_buff, sizeof(query_buff), "SET OPTION SQL_QUOTE_SHOW_CREATE=%d", (opt_quoted || opt_keywords)); if (!create_options) - strmov(strend(insert_pat), "/*!40102 ,SQL_MODE=concat(@@sql_mode, _utf8 ',NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS') */"); + strmov(strend(query_buff), "/*!40102 ,SQL_MODE=concat(@@sql_mode, _utf8 ',NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS') */"); result_table= quote_name(table, table_buff, 1); opt_quoted_table= quote_name(table, table_buff2, 0); @@ -1119,7 +1130,7 @@ static uint getTableStructure(char *table, char* db) if (opt_order_by_primary) order_by = primary_key_fields(opt_quoted_table); - if (!opt_xml && !mysql_query_with_error_report(sock, 0, insert_pat)) + if (!opt_xml && !mysql_query_with_error_report(sock, 0, query_buff)) { /* using SHOW CREATE statement */ if (!tFlag) @@ -1165,9 +1176,9 @@ static uint getTableStructure(char *table, char* db) check_io(sql_file); mysql_free_result(tableRes); } - my_snprintf(insert_pat, sizeof(insert_pat), "show fields from %s", + my_snprintf(query_buff, sizeof(query_buff), "show fields from %s", result_table); - if (mysql_query_with_error_report(sock, &tableRes, insert_pat)) + if (mysql_query_with_error_report(sock, &tableRes, query_buff)) { if (path) my_fclose(sql_file, MYF(MY_WME)); @@ -1175,28 +1186,32 @@ static uint getTableStructure(char *table, char* db) DBUG_RETURN(0); } - if (cFlag) - my_snprintf(insert_pat, sizeof(insert_pat), "INSERT %sINTO %s (", - delayed, opt_quoted_table); + dynstr_append_mem(&insert_pat, "INSERT ", 7); + dynstr_append(&insert_pat, delayed); + dynstr_append_mem(&insert_pat, "INTO ", 5); + dynstr_append(&insert_pat, opt_quoted_table); + if (opt_complete_insert) + { + dynstr_append_mem(&insert_pat, " (", 2); + } else { - my_snprintf(insert_pat, sizeof(insert_pat), "INSERT %sINTO %s VALUES ", - delayed, opt_quoted_table); + dynstr_append_mem(&insert_pat, " VALUES ", 8); if (!extended_insert) - strcat(insert_pat,"("); + dynstr_append_mem(&insert_pat, "(", 1); } - strpos=strend(insert_pat); while ((row=mysql_fetch_row(tableRes))) { if (init) { - if (cFlag) - strpos=strmov(strpos,", "); + if (opt_complete_insert) + dynstr_append_mem(&insert_pat, ", ", 2); } init=1; - if (cFlag) - strpos=strmov(strpos,quote_name(row[SHOW_FIELDNAME], name_buff, 0)); + if (opt_complete_insert) + dynstr_append(&insert_pat, + quote_name(row[SHOW_FIELDNAME], name_buff, 0)); } numFields = (uint) mysql_num_rows(tableRes); mysql_free_result(tableRes); @@ -1208,9 +1223,9 @@ static uint getTableStructure(char *table, char* db) "%s: Warning: Can't set SQL_QUOTE_SHOW_CREATE option (%s)\n", my_progname, mysql_error(sock)); - my_snprintf(insert_pat, sizeof(insert_pat), "show fields from %s", + my_snprintf(query_buff, sizeof(query_buff), "show fields from %s", result_table); - if (mysql_query_with_error_report(sock, &tableRes, insert_pat)) + if (mysql_query_with_error_report(sock, &tableRes, query_buff)) { safe_exit(EX_MYSQLERR); DBUG_RETURN(0); @@ -1243,18 +1258,22 @@ static uint getTableStructure(char *table, char* db) print_xml_tag1(sql_file, "\t", "table_structure name=", table, "\n"); check_io(sql_file); } - if (cFlag) - my_snprintf(insert_pat, sizeof(insert_pat), "INSERT %sINTO %s (", - delayed, result_table); + + dynstr_append_mem(&insert_pat, "INSERT ", 7); + dynstr_append(&insert_pat, delayed); + dynstr_append_mem(&insert_pat, "INTO ", 5); + dynstr_append(&insert_pat, result_table); + if (opt_complete_insert) + { + dynstr_append_mem(&insert_pat, " (", 2); + } else { - my_snprintf(insert_pat, sizeof(insert_pat), "INSERT %sINTO %s VALUES ", - delayed, result_table); + dynstr_append_mem(&insert_pat, " VALUES ", 8); if (!extended_insert) - strcat(insert_pat,"("); + dynstr_append_mem(&insert_pat, "(", 1); } - strpos=strend(insert_pat); while ((row=mysql_fetch_row(tableRes))) { ulong *lengths=mysql_fetch_lengths(tableRes); @@ -1265,12 +1284,13 @@ static uint getTableStructure(char *table, char* db) fputs(",\n",sql_file); check_io(sql_file); } - if (cFlag) - strpos=strmov(strpos,", "); + if (opt_complete_insert) + dynstr_append_mem(&insert_pat, ", ", 2); } init=1; - if (cFlag) - strpos=strmov(strpos,quote_name(row[SHOW_FIELDNAME], name_buff, 0)); + if (opt_complete_insert) + dynstr_append(&insert_pat, + quote_name(row[SHOW_FIELDNAME], name_buff, 0)); if (!tFlag) { if (opt_xml) @@ -1278,7 +1298,7 @@ static uint getTableStructure(char *table, char* db) print_xml_row(sql_file, "field", tableRes, &row); continue; } - + if (opt_keywords) fprintf(sql_file, " %s.%s %s", result_table, quote_name(row[SHOW_FIELDNAME],name_buff, 0), @@ -1423,11 +1443,11 @@ static uint getTableStructure(char *table, char* db) check_io(sql_file); } } - if (cFlag) + if (opt_complete_insert) { - strpos=strmov(strpos,") VALUES "); + dynstr_append_mem(&insert_pat, ") VALUES ", 9); if (!extended_insert) - strpos=strmov(strpos,"("); + dynstr_append_mem(&insert_pat, "(", 1); } if (sql_file != md_result_file) { @@ -1650,7 +1670,7 @@ static void dumpTable(uint numFields, char *table) total_length= opt_net_buffer_length; /* Force row break */ row_break=0; rownr=0; - init_length=(uint) strlen(insert_pat)+4; + init_length=(uint) insert_pat.length+4; if (opt_xml) print_xml_tag1(md_result_file, "\t", "table_data name=", table, "\n"); @@ -1667,7 +1687,7 @@ static void dumpTable(uint numFields, char *table) rownr++; if (!extended_insert && !opt_xml) { - fputs(insert_pat,md_result_file); + fputs(insert_pat.str,md_result_file); check_io(md_result_file); } mysql_field_seek(res,0); @@ -1864,7 +1884,7 @@ static void dumpTable(uint numFields, char *table) fputs(";\n", md_result_file); row_break=1; /* This is first row */ - fputs(insert_pat,md_result_file); + fputs(insert_pat.str,md_result_file); fputs(extended_row.str,md_result_file); total_length = row_length+init_length; } @@ -2557,6 +2577,8 @@ err: my_free(opt_password, MYF(MY_ALLOW_ZERO_PTR)); if (extended_insert) dynstr_free(&extended_row); + if (insert_pat_inited) + dynstr_free(&insert_pat); my_end(0); return(first_error); } /* main */ diff --git a/mysql-test/r/mysqldump.result b/mysql-test/r/mysqldump.result index 69ca9486d2f..5ebac46205d 100644 --- a/mysql-test/r/mysqldump.result +++ b/mysql-test/r/mysqldump.result @@ -560,3 +560,708 @@ UNLOCK TABLES; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; DROP TABLE t1; +create table t1 ( +F_c4ca4238a0b923820dcc509a6f75849b int, +F_c81e728d9d4c2f636f067f89cc14862c int, +F_eccbc87e4b5ce2fe28308fd9f2a7baf3 int, +F_a87ff679a2f3e71d9181a67b7542122c int, +F_e4da3b7fbbce2345d7772b0674a318d5 int, +F_1679091c5a880faf6fb5e6087eb1b2dc int, +F_8f14e45fceea167a5a36dedd4bea2543 int, +F_c9f0f895fb98ab9159f51fd0297e236d int, +F_45c48cce2e2d7fbdea1afc51c7c6ad26 int, +F_d3d9446802a44259755d38e6d163e820 int, +F_6512bd43d9caa6e02c990b0a82652dca int, +F_c20ad4d76fe97759aa27a0c99bff6710 int, +F_c51ce410c124a10e0db5e4b97fc2af39 int, +F_aab3238922bcc25a6f606eb525ffdc56 int, +F_9bf31c7ff062936a96d3c8bd1f8f2ff3 int, +F_c74d97b01eae257e44aa9d5bade97baf int, +F_70efdf2ec9b086079795c442636b55fb int, +F_6f4922f45568161a8cdf4ad2299f6d23 int, +F_1f0e3dad99908345f7439f8ffabdffc4 int, +F_98f13708210194c475687be6106a3b84 int, +F_3c59dc048e8850243be8079a5c74d079 int, +F_b6d767d2f8ed5d21a44b0e5886680cb9 int, +F_37693cfc748049e45d87b8c7d8b9aacd int, +F_1ff1de774005f8da13f42943881c655f int, +F_8e296a067a37563370ded05f5a3bf3ec int, +F_4e732ced3463d06de0ca9a15b6153677 int, +F_02e74f10e0327ad868d138f2b4fdd6f0 int, +F_33e75ff09dd601bbe69f351039152189 int, +F_6ea9ab1baa0efb9e19094440c317e21b int, +F_34173cb38f07f89ddbebc2ac9128303f int, +F_c16a5320fa475530d9583c34fd356ef5 int, +F_6364d3f0f495b6ab9dcf8d3b5c6e0b01 int, +F_182be0c5cdcd5072bb1864cdee4d3d6e int, +F_e369853df766fa44e1ed0ff613f563bd int, +F_1c383cd30b7c298ab50293adfecb7b18 int, +F_19ca14e7ea6328a42e0eb13d585e4c22 int, +F_a5bfc9e07964f8dddeb95fc584cd965d int, +F_a5771bce93e200c36f7cd9dfd0e5deaa int, +F_d67d8ab4f4c10bf22aa353e27879133c int, +F_d645920e395fedad7bbbed0eca3fe2e0 int, +F_3416a75f4cea9109507cacd8e2f2aefc int, +F_a1d0c6e83f027327d8461063f4ac58a6 int, +F_17e62166fc8586dfa4d1bc0e1742c08b int, +F_f7177163c833dff4b38fc8d2872f1ec6 int, +F_6c8349cc7260ae62e3b1396831a8398f int, +F_d9d4f495e875a2e075a1a4a6e1b9770f int, +F_67c6a1e7ce56d3d6fa748ab6d9af3fd7 int, +F_642e92efb79421734881b53e1e1b18b6 int, +F_f457c545a9ded88f18ecee47145a72c0 int, +F_c0c7c76d30bd3dcaefc96f40275bdc0a int, +F_2838023a778dfaecdc212708f721b788 int, +F_9a1158154dfa42caddbd0694a4e9bdc8 int, +F_d82c8d1619ad8176d665453cfb2e55f0 int, +F_a684eceee76fc522773286a895bc8436 int, +F_b53b3a3d6ab90ce0268229151c9bde11 int, +F_9f61408e3afb633e50cdf1b20de6f466 int, +F_72b32a1f754ba1c09b3695e0cb6cde7f int, +F_66f041e16a60928b05a7e228a89c3799 int, +F_093f65e080a295f8076b1c5722a46aa2 int, +F_072b030ba126b2f4b2374f342be9ed44 int, +F_7f39f8317fbdb1988ef4c628eba02591 int, +F_44f683a84163b3523afe57c2e008bc8c int, +F_03afdbd66e7929b125f8597834fa83a4 int, +F_ea5d2f1c4608232e07d3aa3d998e5135 int, +F_fc490ca45c00b1249bbe3554a4fdf6fb int, +F_3295c76acbf4caaed33c36b1b5fc2cb1 int, +F_735b90b4568125ed6c3f678819b6e058 int, +F_a3f390d88e4c41f2747bfa2f1b5f87db int, +F_14bfa6bb14875e45bba028a21ed38046 int, +F_7cbbc409ec990f19c78c75bd1e06f215 int, +F_e2c420d928d4bf8ce0ff2ec19b371514 int, +F_32bb90e8976aab5298d5da10fe66f21d int, +F_d2ddea18f00665ce8623e36bd4e3c7c5 int, +F_ad61ab143223efbc24c7d2583be69251 int, +F_d09bf41544a3365a46c9077ebb5e35c3 int, +F_fbd7939d674997cdb4692d34de8633c4 int, +F_28dd2c7955ce926456240b2ff0100bde int, +F_35f4a8d465e6e1edc05f3d8ab658c551 int, +F_d1fe173d08e959397adf34b1d77e88d7 int, +F_f033ab37c30201f73f142449d037028d int, +F_43ec517d68b6edd3015b3edc9a11367b int, +F_9778d5d219c5080b9a6a17bef029331c int, +F_fe9fc289c3ff0af142b6d3bead98a923 int, +F_68d30a9594728bc39aa24be94b319d21 int, +F_3ef815416f775098fe977004015c6193 int, +F_93db85ed909c13838ff95ccfa94cebd9 int, +F_c7e1249ffc03eb9ded908c236bd1996d int, +F_2a38a4a9316c49e5a833517c45d31070 int, +F_7647966b7343c29048673252e490f736 int, +F_8613985ec49eb8f757ae6439e879bb2a int, +F_54229abfcfa5649e7003b83dd4755294 int, +F_92cc227532d17e56e07902b254dfad10 int, +F_98dce83da57b0395e163467c9dae521b int, +F_f4b9ec30ad9f68f89b29639786cb62ef int, +F_812b4ba287f5ee0bc9d43bbf5bbe87fb int, +F_26657d5ff9020d2abefe558796b99584 int, +F_e2ef524fbf3d9fe611d5a8e90fefdc9c int, +F_ed3d2c21991e3bef5e069713af9fa6ca int, +F_ac627ab1ccbdb62ec96e702f07f6425b int, +F_f899139df5e1059396431415e770c6dd int, +F_38b3eff8baf56627478ec76a704e9b52 int, +F_ec8956637a99787bd197eacd77acce5e int, +F_6974ce5ac660610b44d9b9fed0ff9548 int, +F_c9e1074f5b3f9fc8ea15d152add07294 int, +F_65b9eea6e1cc6bb9f0cd2a47751a186f int, +F_f0935e4cd5920aa6c7c996a5ee53a70f int, +F_a97da629b098b75c294dffdc3e463904 int, +F_a3c65c2974270fd093ee8a9bf8ae7d0b int, +F_2723d092b63885e0d7c260cc007e8b9d int, +F_5f93f983524def3dca464469d2cf9f3e int, +F_698d51a19d8a121ce581499d7b701668 int, +F_7f6ffaa6bb0b408017b62254211691b5 int, +F_73278a4a86960eeb576a8fd4c9ec6997 int, +F_5fd0b37cd7dbbb00f97ba6ce92bf5add int, +F_2b44928ae11fb9384c4cf38708677c48 int, +F_c45147dee729311ef5b5c3003946c48f int, +F_eb160de1de89d9058fcb0b968dbbbd68 int, +F_5ef059938ba799aaa845e1c2e8a762bd int, +F_07e1cd7dca89a1678042477183b7ac3f int, +F_da4fb5c6e93e74d3df8527599fa62642 int, +F_4c56ff4ce4aaf9573aa5dff913df997a int, +F_a0a080f42e6f13b3a2df133f073095dd int, +F_202cb962ac59075b964b07152d234b70 int, +F_c8ffe9a587b126f152ed3d89a146b445 int, +F_3def184ad8f4755ff269862ea77393dd int, +F_069059b7ef840f0c74a814ec9237b6ec int, +F_ec5decca5ed3d6b8079e2e7e7bacc9f2 int, +F_76dc611d6ebaafc66cc0879c71b5db5c int, +F_d1f491a404d6854880943e5c3cd9ca25 int, +F_9b8619251a19057cff70779273e95aa6 int, +F_1afa34a7f984eeabdbb0a7d494132ee5 int, +F_65ded5353c5ee48d0b7d48c591b8f430 int, +F_9fc3d7152ba9336a670e36d0ed79bc43 int, +F_02522a2b2726fb0a03bb19f2d8d9524d int, +F_7f1de29e6da19d22b51c68001e7e0e54 int, +F_42a0e188f5033bc65bf8d78622277c4e int, +F_3988c7f88ebcb58c6ce932b957b6f332 int, +F_013d407166ec4fa56eb1e1f8cbe183b9 int, +F_e00da03b685a0dd18fb6a08af0923de0 int, +F_1385974ed5904a438616ff7bdb3f7439 int, +F_0f28b5d49b3020afeecd95b4009adf4c int, +F_a8baa56554f96369ab93e4f3bb068c22 int, +F_903ce9225fca3e988c2af215d4e544d3 int, +F_0a09c8844ba8f0936c20bd791130d6b6 int, +F_2b24d495052a8ce66358eb576b8912c8 int, +F_a5e00132373a7031000fd987a3c9f87b int, +F_8d5e957f297893487bd98fa830fa6413 int, +F_47d1e990583c9c67424d369f3414728e int, +F_f2217062e9a397a1dca429e7d70bc6ca int, +F_7ef605fc8dba5425d6965fbd4c8fbe1f int, +F_a8f15eda80c50adb0e71943adc8015cf int, +F_37a749d808e46495a8da1e5352d03cae int, +F_b3e3e393c77e35a4a3f3cbd1e429b5dc int, +F_1d7f7abc18fcb43975065399b0d1e48e int, +F_2a79ea27c279e471f4d180b08d62b00a int, +F_1c9ac0159c94d8d0cbedc973445af2da int, +F_6c4b761a28b734fe93831e3fb400ce87 int, +F_06409663226af2f3114485aa4e0a23b4 int, +F_140f6969d5213fd0ece03148e62e461e int, +F_b73ce398c39f506af761d2277d853a92 int, +F_bd4c9ab730f5513206b999ec0d90d1fb int, +F_82aa4b0af34c2313a562076992e50aa3 int, +F_0777d5c17d4066b82ab86dff8a46af6f int, +F_fa7cdfad1a5aaf8370ebeda47a1ff1c3 int, +F_9766527f2b5d3e95d4a733fcfb77bd7e int, +F_7e7757b1e12abcb736ab9a754ffb617a int, +F_5878a7ab84fb43402106c575658472fa int, +F_006f52e9102a8d3be2fe5614f42ba989 int, +F_3636638817772e42b59d74cff571fbb3 int, +F_149e9677a5989fd342ae44213df68868 int, +F_a4a042cf4fd6bfb47701cbc8a1653ada int, +F_1ff8a7b5dc7a7d1f0ed65aaa29c04b1e int, +F_f7e6c85504ce6e82442c770f7c8606f0 int, +F_bf8229696f7a3bb4700cfddef19fa23f int, +F_82161242827b703e6acf9c726942a1e4 int, +F_38af86134b65d0f10fe33d30dd76442e int, +F_96da2f590cd7246bbde0051047b0d6f7 int, +F_8f85517967795eeef66c225f7883bdcb int, +F_8f53295a73878494e9bc8dd6c3c7104f int, +F_045117b0e0a11a242b9765e79cbf113f int, +F_fc221309746013ac554571fbd180e1c8 int, +F_4c5bde74a8f110656874902f07378009 int, +F_cedebb6e872f539bef8c3f919874e9d7 int, +F_6cdd60ea0045eb7a6ec44c54d29ed402 int, +F_eecca5b6365d9607ee5a9d336962c534 int, +F_9872ed9fc22fc182d371c3e9ed316094 int, +F_31fefc0e570cb3860f2a6d4b38c6490d int, +F_9dcb88e0137649590b755372b040afad int, +F_a2557a7b2e94197ff767970b67041697 int, +F_cfecdb276f634854f3ef915e2e980c31 int, +F_0aa1883c6411f7873cb83dacb17b0afc int, +F_58a2fc6ed39fd083f55d4182bf88826d int, +F_bd686fd640be98efaae0091fa301e613 int, +F_a597e50502f5ff68e3e25b9114205d4a int, +F_0336dcbab05b9d5ad24f4333c7658a0e int, +F_084b6fbb10729ed4da8c3d3f5a3ae7c9 int, +F_85d8ce590ad8981ca2c8286f79f59954 int, +F_0e65972dce68dad4d52d063967f0a705 int, +F_84d9ee44e457ddef7f2c4f25dc8fa865 int, +F_3644a684f98ea8fe223c713b77189a77 int, +F_757b505cfd34c64c85ca5b5690ee5293 int, +F_854d6fae5ee42911677c739ee1734486 int, +F_e2c0be24560d78c5e599c2a9c9d0bbd2 int, +F_274ad4786c3abca69fa097b85867d9a4 int, +F_eae27d77ca20db309e056e3d2dcd7d69 int, +F_7eabe3a1649ffa2b3ff8c02ebfd5659f int, +F_69adc1e107f7f7d035d7baf04342e1ca int, +F_091d584fced301b442654dd8c23b3fc9 int, +F_b1d10e7bafa4421218a51b1e1f1b0ba2 int, +F_6f3ef77ac0e3619e98159e9b6febf557 int, +F_eb163727917cbba1eea208541a643e74 int, +F_1534b76d325a8f591b52d302e7181331 int, +F_979d472a84804b9f647bc185a877a8b5 int, +F_ca46c1b9512a7a8315fa3c5a946e8265 int, +F_3b8a614226a953a8cd9526fca6fe9ba5 int, +F_45fbc6d3e05ebd93369ce542e8f2322d int, +F_63dc7ed1010d3c3b8269faf0ba7491d4 int, +F_e96ed478dab8595a7dbda4cbcbee168f int, +F_c0e190d8267e36708f955d7ab048990d int, +F_ec8ce6abb3e952a85b8551ba726a1227 int, +F_060ad92489947d410d897474079c1477 int, +F_bcbe3365e6ac95ea2c0343a2395834dd int, +F_115f89503138416a242f40fb7d7f338e int, +F_13fe9d84310e77f13a6d184dbf1232f3 int, +F_d1c38a09acc34845c6be3a127a5aacaf int, +F_9cfdf10e8fc047a44b08ed031e1f0ed1 int, +F_705f2172834666788607efbfca35afb3 int, +F_74db120f0a8e5646ef5a30154e9f6deb int, +F_57aeee35c98205091e18d1140e9f38cf int, +F_6da9003b743b65f4c0ccd295cc484e57 int, +F_9b04d152845ec0a378394003c96da594 int, +F_be83ab3ecd0db773eb2dc1b0a17836a1 int, +F_e165421110ba03099a1c0393373c5b43 int, +F_289dff07669d7a23de0ef88d2f7129e7 int, +F_577ef1154f3240ad5b9b413aa7346a1e int, +F_01161aaa0b6d1345dd8fe4e481144d84 int, +F_539fd53b59e3bb12d203f45a912eeaf2 int, +F_ac1dd209cbcc5e5d1c6e28598e8cbbe8 int, +F_555d6702c950ecb729a966504af0a635 int, +F_335f5352088d7d9bf74191e006d8e24c int, +F_f340f1b1f65b6df5b5e3f94d95b11daf int, +F_e4a6222cdb5b34375400904f03d8e6a5 int, +F_cb70ab375662576bd1ac5aaf16b3fca4 int, +F_9188905e74c28e489b44e954ec0b9bca int, +F_0266e33d3f546cb5436a10798e657d97 int, +F_38db3aed920cf82ab059bfccbd02be6a int, +F_3cec07e9ba5f5bb252d13f5f431e4bbb int, +F_621bf66ddb7c962aa0d22ac97d69b793 int, +F_077e29b11be80ab57e1a2ecabb7da330 int, +F_6c9882bbac1c7093bd25041881277658 int, +F_19f3cd308f1455b3fa09a282e0d496f4 int, +F_03c6b06952c750899bb03d998e631860 int, +F_c24cd76e1ce41366a4bbe8a49b02a028 int, +F_c52f1bd66cc19d05628bd8bf27af3ad6 int, +F_fe131d7f5a6b38b23cc967316c13dae2 int, +F_f718499c1c8cef6730f9fd03c8125cab int, +F_d96409bf894217686ba124d7356686c9 int, +F_502e4a16930e414107ee22b6198c578f int, +F_cfa0860e83a4c3a763a7e62d825349f7 int, +F_a4f23670e1833f3fdb077ca70bbd5d66 int, +F_b1a59b315fc9a3002ce38bbe070ec3f5 int, +F_36660e59856b4de58a219bcf4e27eba3 int, +F_8c19f571e251e61cb8dd3612f26d5ecf int, +F_d6baf65e0b240ce177cf70da146c8dc8 int, +F_e56954b4f6347e897f954495eab16a88 int, +F_f7664060cc52bc6f3d620bcedc94a4b6 int, +F_eda80a3d5b344bc40f3bc04f65b7a357 int, +F_8f121ce07d74717e0b1f21d122e04521 int, +F_06138bc5af6023646ede0e1f7c1eac75 int, +F_39059724f73a9969845dfe4146c5660e int, +F_7f100b7b36092fb9b06dfb4fac360931 int, +F_7a614fd06c325499f1680b9896beedeb int, +F_4734ba6f3de83d861c3176a6273cac6d int, +F_d947bf06a885db0d477d707121934ff8 int, +F_63923f49e5241343aa7acb6a06a751e7 int, +F_db8e1af0cb3aca1ae2d0018624204529 int, +F_20f07591c6fcb220ffe637cda29bb3f6 int, +F_07cdfd23373b17c6b337251c22b7ea57 int, +F_d395771085aab05244a4fb8fd91bf4ee int, +F_92c8c96e4c37100777c7190b76d28233 int, +F_e3796ae838835da0b6f6ea37bcf8bcb7 int, +F_6a9aeddfc689c1d0e3b9ccc3ab651bc5 int, +F_0f49c89d1e7298bb9930789c8ed59d48 int, +F_46ba9f2a6976570b0353203ec4474217 int, +F_0e01938fc48a2cfb5f2217fbfb00722d int, +F_16a5cdae362b8d27a1d8f8c7b78b4330 int, +F_918317b57931b6b7a7d29490fe5ec9f9 int, +F_48aedb8880cab8c45637abc7493ecddd int, +F_839ab46820b524afda05122893c2fe8e int, +F_f90f2aca5c640289d0a29417bcb63a37 int, +F_9c838d2e45b2ad1094d42f4ef36764f6 int, +F_1700002963a49da13542e0726b7bb758 int, +F_53c3bce66e43be4f209556518c2fcb54 int, +F_6883966fd8f918a4aa29be29d2c386fb int, +F_49182f81e6a13cf5eaa496d51fea6406 int, +F_d296c101daa88a51f6ca8cfc1ac79b50 int, +F_9fd81843ad7f202f26c1a174c7357585 int, +F_26e359e83860db1d11b6acca57d8ea88 int, +F_ef0d3930a7b6c95bd2b32ed45989c61f int, +F_94f6d7e04a4d452035300f18b984988c int, +F_34ed066df378efacc9b924ec161e7639 int, +F_577bcc914f9e55d5e4e4f82f9f00e7d4 int, +F_11b9842e0a271ff252c1903e7132cd68 int, +F_37bc2f75bf1bcfe8450a1a41c200364c int, +F_496e05e1aea0a9c4655800e8a7b9ea28 int, +F_b2eb7349035754953b57a32e2841bda5 int, +F_8e98d81f8217304975ccb23337bb5761 int, +F_a8c88a0055f636e4a163a5e3d16adab7 int, +F_eddea82ad2755b24c4e168c5fc2ebd40 int, +F_06eb61b839a0cefee4967c67ccb099dc int, +F_9dfcd5e558dfa04aaf37f137a1d9d3e5 int, +F_950a4152c2b4aa3ad78bdd6b366cc179 int, +F_158f3069a435b314a80bdcb024f8e422 int, +F_758874998f5bd0c393da094e1967a72b int, +F_ad13a2a07ca4b7642959dc0c4c740ab6 int, +F_3fe94a002317b5f9259f82690aeea4cd int, +F_5b8add2a5d98b1a652ea7fd72d942dac int, +F_432aca3a1e345e339f35a30c8f65edce int, +F_8d3bba7425e7c98c50f52ca1b52d3735 int, +F_320722549d1751cf3f247855f937b982 int, +F_caf1a3dfb505ffed0d024130f58c5cfa int, +F_5737c6ec2e0716f3d8a7a5c4e0de0d9a int, +F_bc6dc48b743dc5d013b1abaebd2faed2 int, +F_f2fc990265c712c49d51a18a32b39f0c int, +F_89f0fd5c927d466d6ec9a21b9ac34ffa int, +F_a666587afda6e89aec274a3657558a27 int, +F_b83aac23b9528732c23cc7352950e880 int, +F_cd00692c3bfe59267d5ecfac5310286c int, +F_6faa8040da20ef399b63a72d0e4ab575 int, +F_fe73f687e5bc5280214e0486b273a5f9 int); +insert into t1 (F_8d3bba7425e7c98c50f52ca1b52d3735) values (1); +-- MySQL dump 10.9 +-- +-- Host: localhost Database: test +-- ------------------------------------------------------ +-- Server version 4.1.12-debug-log + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `t1` +-- + +DROP TABLE IF EXISTS `t1`; +CREATE TABLE `t1` ( + `F_c4ca4238a0b923820dcc509a6f75849b` int(11) default NULL, + `F_c81e728d9d4c2f636f067f89cc14862c` int(11) default NULL, + `F_eccbc87e4b5ce2fe28308fd9f2a7baf3` int(11) default NULL, + `F_a87ff679a2f3e71d9181a67b7542122c` int(11) default NULL, + `F_e4da3b7fbbce2345d7772b0674a318d5` int(11) default NULL, + `F_1679091c5a880faf6fb5e6087eb1b2dc` int(11) default NULL, + `F_8f14e45fceea167a5a36dedd4bea2543` int(11) default NULL, + `F_c9f0f895fb98ab9159f51fd0297e236d` int(11) default NULL, + `F_45c48cce2e2d7fbdea1afc51c7c6ad26` int(11) default NULL, + `F_d3d9446802a44259755d38e6d163e820` int(11) default NULL, + `F_6512bd43d9caa6e02c990b0a82652dca` int(11) default NULL, + `F_c20ad4d76fe97759aa27a0c99bff6710` int(11) default NULL, + `F_c51ce410c124a10e0db5e4b97fc2af39` int(11) default NULL, + `F_aab3238922bcc25a6f606eb525ffdc56` int(11) default NULL, + `F_9bf31c7ff062936a96d3c8bd1f8f2ff3` int(11) default NULL, + `F_c74d97b01eae257e44aa9d5bade97baf` int(11) default NULL, + `F_70efdf2ec9b086079795c442636b55fb` int(11) default NULL, + `F_6f4922f45568161a8cdf4ad2299f6d23` int(11) default NULL, + `F_1f0e3dad99908345f7439f8ffabdffc4` int(11) default NULL, + `F_98f13708210194c475687be6106a3b84` int(11) default NULL, + `F_3c59dc048e8850243be8079a5c74d079` int(11) default NULL, + `F_b6d767d2f8ed5d21a44b0e5886680cb9` int(11) default NULL, + `F_37693cfc748049e45d87b8c7d8b9aacd` int(11) default NULL, + `F_1ff1de774005f8da13f42943881c655f` int(11) default NULL, + `F_8e296a067a37563370ded05f5a3bf3ec` int(11) default NULL, + `F_4e732ced3463d06de0ca9a15b6153677` int(11) default NULL, + `F_02e74f10e0327ad868d138f2b4fdd6f0` int(11) default NULL, + `F_33e75ff09dd601bbe69f351039152189` int(11) default NULL, + `F_6ea9ab1baa0efb9e19094440c317e21b` int(11) default NULL, + `F_34173cb38f07f89ddbebc2ac9128303f` int(11) default NULL, + `F_c16a5320fa475530d9583c34fd356ef5` int(11) default NULL, + `F_6364d3f0f495b6ab9dcf8d3b5c6e0b01` int(11) default NULL, + `F_182be0c5cdcd5072bb1864cdee4d3d6e` int(11) default NULL, + `F_e369853df766fa44e1ed0ff613f563bd` int(11) default NULL, + `F_1c383cd30b7c298ab50293adfecb7b18` int(11) default NULL, + `F_19ca14e7ea6328a42e0eb13d585e4c22` int(11) default NULL, + `F_a5bfc9e07964f8dddeb95fc584cd965d` int(11) default NULL, + `F_a5771bce93e200c36f7cd9dfd0e5deaa` int(11) default NULL, + `F_d67d8ab4f4c10bf22aa353e27879133c` int(11) default NULL, + `F_d645920e395fedad7bbbed0eca3fe2e0` int(11) default NULL, + `F_3416a75f4cea9109507cacd8e2f2aefc` int(11) default NULL, + `F_a1d0c6e83f027327d8461063f4ac58a6` int(11) default NULL, + `F_17e62166fc8586dfa4d1bc0e1742c08b` int(11) default NULL, + `F_f7177163c833dff4b38fc8d2872f1ec6` int(11) default NULL, + `F_6c8349cc7260ae62e3b1396831a8398f` int(11) default NULL, + `F_d9d4f495e875a2e075a1a4a6e1b9770f` int(11) default NULL, + `F_67c6a1e7ce56d3d6fa748ab6d9af3fd7` int(11) default NULL, + `F_642e92efb79421734881b53e1e1b18b6` int(11) default NULL, + `F_f457c545a9ded88f18ecee47145a72c0` int(11) default NULL, + `F_c0c7c76d30bd3dcaefc96f40275bdc0a` int(11) default NULL, + `F_2838023a778dfaecdc212708f721b788` int(11) default NULL, + `F_9a1158154dfa42caddbd0694a4e9bdc8` int(11) default NULL, + `F_d82c8d1619ad8176d665453cfb2e55f0` int(11) default NULL, + `F_a684eceee76fc522773286a895bc8436` int(11) default NULL, + `F_b53b3a3d6ab90ce0268229151c9bde11` int(11) default NULL, + `F_9f61408e3afb633e50cdf1b20de6f466` int(11) default NULL, + `F_72b32a1f754ba1c09b3695e0cb6cde7f` int(11) default NULL, + `F_66f041e16a60928b05a7e228a89c3799` int(11) default NULL, + `F_093f65e080a295f8076b1c5722a46aa2` int(11) default NULL, + `F_072b030ba126b2f4b2374f342be9ed44` int(11) default NULL, + `F_7f39f8317fbdb1988ef4c628eba02591` int(11) default NULL, + `F_44f683a84163b3523afe57c2e008bc8c` int(11) default NULL, + `F_03afdbd66e7929b125f8597834fa83a4` int(11) default NULL, + `F_ea5d2f1c4608232e07d3aa3d998e5135` int(11) default NULL, + `F_fc490ca45c00b1249bbe3554a4fdf6fb` int(11) default NULL, + `F_3295c76acbf4caaed33c36b1b5fc2cb1` int(11) default NULL, + `F_735b90b4568125ed6c3f678819b6e058` int(11) default NULL, + `F_a3f390d88e4c41f2747bfa2f1b5f87db` int(11) default NULL, + `F_14bfa6bb14875e45bba028a21ed38046` int(11) default NULL, + `F_7cbbc409ec990f19c78c75bd1e06f215` int(11) default NULL, + `F_e2c420d928d4bf8ce0ff2ec19b371514` int(11) default NULL, + `F_32bb90e8976aab5298d5da10fe66f21d` int(11) default NULL, + `F_d2ddea18f00665ce8623e36bd4e3c7c5` int(11) default NULL, + `F_ad61ab143223efbc24c7d2583be69251` int(11) default NULL, + `F_d09bf41544a3365a46c9077ebb5e35c3` int(11) default NULL, + `F_fbd7939d674997cdb4692d34de8633c4` int(11) default NULL, + `F_28dd2c7955ce926456240b2ff0100bde` int(11) default NULL, + `F_35f4a8d465e6e1edc05f3d8ab658c551` int(11) default NULL, + `F_d1fe173d08e959397adf34b1d77e88d7` int(11) default NULL, + `F_f033ab37c30201f73f142449d037028d` int(11) default NULL, + `F_43ec517d68b6edd3015b3edc9a11367b` int(11) default NULL, + `F_9778d5d219c5080b9a6a17bef029331c` int(11) default NULL, + `F_fe9fc289c3ff0af142b6d3bead98a923` int(11) default NULL, + `F_68d30a9594728bc39aa24be94b319d21` int(11) default NULL, + `F_3ef815416f775098fe977004015c6193` int(11) default NULL, + `F_93db85ed909c13838ff95ccfa94cebd9` int(11) default NULL, + `F_c7e1249ffc03eb9ded908c236bd1996d` int(11) default NULL, + `F_2a38a4a9316c49e5a833517c45d31070` int(11) default NULL, + `F_7647966b7343c29048673252e490f736` int(11) default NULL, + `F_8613985ec49eb8f757ae6439e879bb2a` int(11) default NULL, + `F_54229abfcfa5649e7003b83dd4755294` int(11) default NULL, + `F_92cc227532d17e56e07902b254dfad10` int(11) default NULL, + `F_98dce83da57b0395e163467c9dae521b` int(11) default NULL, + `F_f4b9ec30ad9f68f89b29639786cb62ef` int(11) default NULL, + `F_812b4ba287f5ee0bc9d43bbf5bbe87fb` int(11) default NULL, + `F_26657d5ff9020d2abefe558796b99584` int(11) default NULL, + `F_e2ef524fbf3d9fe611d5a8e90fefdc9c` int(11) default NULL, + `F_ed3d2c21991e3bef5e069713af9fa6ca` int(11) default NULL, + `F_ac627ab1ccbdb62ec96e702f07f6425b` int(11) default NULL, + `F_f899139df5e1059396431415e770c6dd` int(11) default NULL, + `F_38b3eff8baf56627478ec76a704e9b52` int(11) default NULL, + `F_ec8956637a99787bd197eacd77acce5e` int(11) default NULL, + `F_6974ce5ac660610b44d9b9fed0ff9548` int(11) default NULL, + `F_c9e1074f5b3f9fc8ea15d152add07294` int(11) default NULL, + `F_65b9eea6e1cc6bb9f0cd2a47751a186f` int(11) default NULL, + `F_f0935e4cd5920aa6c7c996a5ee53a70f` int(11) default NULL, + `F_a97da629b098b75c294dffdc3e463904` int(11) default NULL, + `F_a3c65c2974270fd093ee8a9bf8ae7d0b` int(11) default NULL, + `F_2723d092b63885e0d7c260cc007e8b9d` int(11) default NULL, + `F_5f93f983524def3dca464469d2cf9f3e` int(11) default NULL, + `F_698d51a19d8a121ce581499d7b701668` int(11) default NULL, + `F_7f6ffaa6bb0b408017b62254211691b5` int(11) default NULL, + `F_73278a4a86960eeb576a8fd4c9ec6997` int(11) default NULL, + `F_5fd0b37cd7dbbb00f97ba6ce92bf5add` int(11) default NULL, + `F_2b44928ae11fb9384c4cf38708677c48` int(11) default NULL, + `F_c45147dee729311ef5b5c3003946c48f` int(11) default NULL, + `F_eb160de1de89d9058fcb0b968dbbbd68` int(11) default NULL, + `F_5ef059938ba799aaa845e1c2e8a762bd` int(11) default NULL, + `F_07e1cd7dca89a1678042477183b7ac3f` int(11) default NULL, + `F_da4fb5c6e93e74d3df8527599fa62642` int(11) default NULL, + `F_4c56ff4ce4aaf9573aa5dff913df997a` int(11) default NULL, + `F_a0a080f42e6f13b3a2df133f073095dd` int(11) default NULL, + `F_202cb962ac59075b964b07152d234b70` int(11) default NULL, + `F_c8ffe9a587b126f152ed3d89a146b445` int(11) default NULL, + `F_3def184ad8f4755ff269862ea77393dd` int(11) default NULL, + `F_069059b7ef840f0c74a814ec9237b6ec` int(11) default NULL, + `F_ec5decca5ed3d6b8079e2e7e7bacc9f2` int(11) default NULL, + `F_76dc611d6ebaafc66cc0879c71b5db5c` int(11) default NULL, + `F_d1f491a404d6854880943e5c3cd9ca25` int(11) default NULL, + `F_9b8619251a19057cff70779273e95aa6` int(11) default NULL, + `F_1afa34a7f984eeabdbb0a7d494132ee5` int(11) default NULL, + `F_65ded5353c5ee48d0b7d48c591b8f430` int(11) default NULL, + `F_9fc3d7152ba9336a670e36d0ed79bc43` int(11) default NULL, + `F_02522a2b2726fb0a03bb19f2d8d9524d` int(11) default NULL, + `F_7f1de29e6da19d22b51c68001e7e0e54` int(11) default NULL, + `F_42a0e188f5033bc65bf8d78622277c4e` int(11) default NULL, + `F_3988c7f88ebcb58c6ce932b957b6f332` int(11) default NULL, + `F_013d407166ec4fa56eb1e1f8cbe183b9` int(11) default NULL, + `F_e00da03b685a0dd18fb6a08af0923de0` int(11) default NULL, + `F_1385974ed5904a438616ff7bdb3f7439` int(11) default NULL, + `F_0f28b5d49b3020afeecd95b4009adf4c` int(11) default NULL, + `F_a8baa56554f96369ab93e4f3bb068c22` int(11) default NULL, + `F_903ce9225fca3e988c2af215d4e544d3` int(11) default NULL, + `F_0a09c8844ba8f0936c20bd791130d6b6` int(11) default NULL, + `F_2b24d495052a8ce66358eb576b8912c8` int(11) default NULL, + `F_a5e00132373a7031000fd987a3c9f87b` int(11) default NULL, + `F_8d5e957f297893487bd98fa830fa6413` int(11) default NULL, + `F_47d1e990583c9c67424d369f3414728e` int(11) default NULL, + `F_f2217062e9a397a1dca429e7d70bc6ca` int(11) default NULL, + `F_7ef605fc8dba5425d6965fbd4c8fbe1f` int(11) default NULL, + `F_a8f15eda80c50adb0e71943adc8015cf` int(11) default NULL, + `F_37a749d808e46495a8da1e5352d03cae` int(11) default NULL, + `F_b3e3e393c77e35a4a3f3cbd1e429b5dc` int(11) default NULL, + `F_1d7f7abc18fcb43975065399b0d1e48e` int(11) default NULL, + `F_2a79ea27c279e471f4d180b08d62b00a` int(11) default NULL, + `F_1c9ac0159c94d8d0cbedc973445af2da` int(11) default NULL, + `F_6c4b761a28b734fe93831e3fb400ce87` int(11) default NULL, + `F_06409663226af2f3114485aa4e0a23b4` int(11) default NULL, + `F_140f6969d5213fd0ece03148e62e461e` int(11) default NULL, + `F_b73ce398c39f506af761d2277d853a92` int(11) default NULL, + `F_bd4c9ab730f5513206b999ec0d90d1fb` int(11) default NULL, + `F_82aa4b0af34c2313a562076992e50aa3` int(11) default NULL, + `F_0777d5c17d4066b82ab86dff8a46af6f` int(11) default NULL, + `F_fa7cdfad1a5aaf8370ebeda47a1ff1c3` int(11) default NULL, + `F_9766527f2b5d3e95d4a733fcfb77bd7e` int(11) default NULL, + `F_7e7757b1e12abcb736ab9a754ffb617a` int(11) default NULL, + `F_5878a7ab84fb43402106c575658472fa` int(11) default NULL, + `F_006f52e9102a8d3be2fe5614f42ba989` int(11) default NULL, + `F_3636638817772e42b59d74cff571fbb3` int(11) default NULL, + `F_149e9677a5989fd342ae44213df68868` int(11) default NULL, + `F_a4a042cf4fd6bfb47701cbc8a1653ada` int(11) default NULL, + `F_1ff8a7b5dc7a7d1f0ed65aaa29c04b1e` int(11) default NULL, + `F_f7e6c85504ce6e82442c770f7c8606f0` int(11) default NULL, + `F_bf8229696f7a3bb4700cfddef19fa23f` int(11) default NULL, + `F_82161242827b703e6acf9c726942a1e4` int(11) default NULL, + `F_38af86134b65d0f10fe33d30dd76442e` int(11) default NULL, + `F_96da2f590cd7246bbde0051047b0d6f7` int(11) default NULL, + `F_8f85517967795eeef66c225f7883bdcb` int(11) default NULL, + `F_8f53295a73878494e9bc8dd6c3c7104f` int(11) default NULL, + `F_045117b0e0a11a242b9765e79cbf113f` int(11) default NULL, + `F_fc221309746013ac554571fbd180e1c8` int(11) default NULL, + `F_4c5bde74a8f110656874902f07378009` int(11) default NULL, + `F_cedebb6e872f539bef8c3f919874e9d7` int(11) default NULL, + `F_6cdd60ea0045eb7a6ec44c54d29ed402` int(11) default NULL, + `F_eecca5b6365d9607ee5a9d336962c534` int(11) default NULL, + `F_9872ed9fc22fc182d371c3e9ed316094` int(11) default NULL, + `F_31fefc0e570cb3860f2a6d4b38c6490d` int(11) default NULL, + `F_9dcb88e0137649590b755372b040afad` int(11) default NULL, + `F_a2557a7b2e94197ff767970b67041697` int(11) default NULL, + `F_cfecdb276f634854f3ef915e2e980c31` int(11) default NULL, + `F_0aa1883c6411f7873cb83dacb17b0afc` int(11) default NULL, + `F_58a2fc6ed39fd083f55d4182bf88826d` int(11) default NULL, + `F_bd686fd640be98efaae0091fa301e613` int(11) default NULL, + `F_a597e50502f5ff68e3e25b9114205d4a` int(11) default NULL, + `F_0336dcbab05b9d5ad24f4333c7658a0e` int(11) default NULL, + `F_084b6fbb10729ed4da8c3d3f5a3ae7c9` int(11) default NULL, + `F_85d8ce590ad8981ca2c8286f79f59954` int(11) default NULL, + `F_0e65972dce68dad4d52d063967f0a705` int(11) default NULL, + `F_84d9ee44e457ddef7f2c4f25dc8fa865` int(11) default NULL, + `F_3644a684f98ea8fe223c713b77189a77` int(11) default NULL, + `F_757b505cfd34c64c85ca5b5690ee5293` int(11) default NULL, + `F_854d6fae5ee42911677c739ee1734486` int(11) default NULL, + `F_e2c0be24560d78c5e599c2a9c9d0bbd2` int(11) default NULL, + `F_274ad4786c3abca69fa097b85867d9a4` int(11) default NULL, + `F_eae27d77ca20db309e056e3d2dcd7d69` int(11) default NULL, + `F_7eabe3a1649ffa2b3ff8c02ebfd5659f` int(11) default NULL, + `F_69adc1e107f7f7d035d7baf04342e1ca` int(11) default NULL, + `F_091d584fced301b442654dd8c23b3fc9` int(11) default NULL, + `F_b1d10e7bafa4421218a51b1e1f1b0ba2` int(11) default NULL, + `F_6f3ef77ac0e3619e98159e9b6febf557` int(11) default NULL, + `F_eb163727917cbba1eea208541a643e74` int(11) default NULL, + `F_1534b76d325a8f591b52d302e7181331` int(11) default NULL, + `F_979d472a84804b9f647bc185a877a8b5` int(11) default NULL, + `F_ca46c1b9512a7a8315fa3c5a946e8265` int(11) default NULL, + `F_3b8a614226a953a8cd9526fca6fe9ba5` int(11) default NULL, + `F_45fbc6d3e05ebd93369ce542e8f2322d` int(11) default NULL, + `F_63dc7ed1010d3c3b8269faf0ba7491d4` int(11) default NULL, + `F_e96ed478dab8595a7dbda4cbcbee168f` int(11) default NULL, + `F_c0e190d8267e36708f955d7ab048990d` int(11) default NULL, + `F_ec8ce6abb3e952a85b8551ba726a1227` int(11) default NULL, + `F_060ad92489947d410d897474079c1477` int(11) default NULL, + `F_bcbe3365e6ac95ea2c0343a2395834dd` int(11) default NULL, + `F_115f89503138416a242f40fb7d7f338e` int(11) default NULL, + `F_13fe9d84310e77f13a6d184dbf1232f3` int(11) default NULL, + `F_d1c38a09acc34845c6be3a127a5aacaf` int(11) default NULL, + `F_9cfdf10e8fc047a44b08ed031e1f0ed1` int(11) default NULL, + `F_705f2172834666788607efbfca35afb3` int(11) default NULL, + `F_74db120f0a8e5646ef5a30154e9f6deb` int(11) default NULL, + `F_57aeee35c98205091e18d1140e9f38cf` int(11) default NULL, + `F_6da9003b743b65f4c0ccd295cc484e57` int(11) default NULL, + `F_9b04d152845ec0a378394003c96da594` int(11) default NULL, + `F_be83ab3ecd0db773eb2dc1b0a17836a1` int(11) default NULL, + `F_e165421110ba03099a1c0393373c5b43` int(11) default NULL, + `F_289dff07669d7a23de0ef88d2f7129e7` int(11) default NULL, + `F_577ef1154f3240ad5b9b413aa7346a1e` int(11) default NULL, + `F_01161aaa0b6d1345dd8fe4e481144d84` int(11) default NULL, + `F_539fd53b59e3bb12d203f45a912eeaf2` int(11) default NULL, + `F_ac1dd209cbcc5e5d1c6e28598e8cbbe8` int(11) default NULL, + `F_555d6702c950ecb729a966504af0a635` int(11) default NULL, + `F_335f5352088d7d9bf74191e006d8e24c` int(11) default NULL, + `F_f340f1b1f65b6df5b5e3f94d95b11daf` int(11) default NULL, + `F_e4a6222cdb5b34375400904f03d8e6a5` int(11) default NULL, + `F_cb70ab375662576bd1ac5aaf16b3fca4` int(11) default NULL, + `F_9188905e74c28e489b44e954ec0b9bca` int(11) default NULL, + `F_0266e33d3f546cb5436a10798e657d97` int(11) default NULL, + `F_38db3aed920cf82ab059bfccbd02be6a` int(11) default NULL, + `F_3cec07e9ba5f5bb252d13f5f431e4bbb` int(11) default NULL, + `F_621bf66ddb7c962aa0d22ac97d69b793` int(11) default NULL, + `F_077e29b11be80ab57e1a2ecabb7da330` int(11) default NULL, + `F_6c9882bbac1c7093bd25041881277658` int(11) default NULL, + `F_19f3cd308f1455b3fa09a282e0d496f4` int(11) default NULL, + `F_03c6b06952c750899bb03d998e631860` int(11) default NULL, + `F_c24cd76e1ce41366a4bbe8a49b02a028` int(11) default NULL, + `F_c52f1bd66cc19d05628bd8bf27af3ad6` int(11) default NULL, + `F_fe131d7f5a6b38b23cc967316c13dae2` int(11) default NULL, + `F_f718499c1c8cef6730f9fd03c8125cab` int(11) default NULL, + `F_d96409bf894217686ba124d7356686c9` int(11) default NULL, + `F_502e4a16930e414107ee22b6198c578f` int(11) default NULL, + `F_cfa0860e83a4c3a763a7e62d825349f7` int(11) default NULL, + `F_a4f23670e1833f3fdb077ca70bbd5d66` int(11) default NULL, + `F_b1a59b315fc9a3002ce38bbe070ec3f5` int(11) default NULL, + `F_36660e59856b4de58a219bcf4e27eba3` int(11) default NULL, + `F_8c19f571e251e61cb8dd3612f26d5ecf` int(11) default NULL, + `F_d6baf65e0b240ce177cf70da146c8dc8` int(11) default NULL, + `F_e56954b4f6347e897f954495eab16a88` int(11) default NULL, + `F_f7664060cc52bc6f3d620bcedc94a4b6` int(11) default NULL, + `F_eda80a3d5b344bc40f3bc04f65b7a357` int(11) default NULL, + `F_8f121ce07d74717e0b1f21d122e04521` int(11) default NULL, + `F_06138bc5af6023646ede0e1f7c1eac75` int(11) default NULL, + `F_39059724f73a9969845dfe4146c5660e` int(11) default NULL, + `F_7f100b7b36092fb9b06dfb4fac360931` int(11) default NULL, + `F_7a614fd06c325499f1680b9896beedeb` int(11) default NULL, + `F_4734ba6f3de83d861c3176a6273cac6d` int(11) default NULL, + `F_d947bf06a885db0d477d707121934ff8` int(11) default NULL, + `F_63923f49e5241343aa7acb6a06a751e7` int(11) default NULL, + `F_db8e1af0cb3aca1ae2d0018624204529` int(11) default NULL, + `F_20f07591c6fcb220ffe637cda29bb3f6` int(11) default NULL, + `F_07cdfd23373b17c6b337251c22b7ea57` int(11) default NULL, + `F_d395771085aab05244a4fb8fd91bf4ee` int(11) default NULL, + `F_92c8c96e4c37100777c7190b76d28233` int(11) default NULL, + `F_e3796ae838835da0b6f6ea37bcf8bcb7` int(11) default NULL, + `F_6a9aeddfc689c1d0e3b9ccc3ab651bc5` int(11) default NULL, + `F_0f49c89d1e7298bb9930789c8ed59d48` int(11) default NULL, + `F_46ba9f2a6976570b0353203ec4474217` int(11) default NULL, + `F_0e01938fc48a2cfb5f2217fbfb00722d` int(11) default NULL, + `F_16a5cdae362b8d27a1d8f8c7b78b4330` int(11) default NULL, + `F_918317b57931b6b7a7d29490fe5ec9f9` int(11) default NULL, + `F_48aedb8880cab8c45637abc7493ecddd` int(11) default NULL, + `F_839ab46820b524afda05122893c2fe8e` int(11) default NULL, + `F_f90f2aca5c640289d0a29417bcb63a37` int(11) default NULL, + `F_9c838d2e45b2ad1094d42f4ef36764f6` int(11) default NULL, + `F_1700002963a49da13542e0726b7bb758` int(11) default NULL, + `F_53c3bce66e43be4f209556518c2fcb54` int(11) default NULL, + `F_6883966fd8f918a4aa29be29d2c386fb` int(11) default NULL, + `F_49182f81e6a13cf5eaa496d51fea6406` int(11) default NULL, + `F_d296c101daa88a51f6ca8cfc1ac79b50` int(11) default NULL, + `F_9fd81843ad7f202f26c1a174c7357585` int(11) default NULL, + `F_26e359e83860db1d11b6acca57d8ea88` int(11) default NULL, + `F_ef0d3930a7b6c95bd2b32ed45989c61f` int(11) default NULL, + `F_94f6d7e04a4d452035300f18b984988c` int(11) default NULL, + `F_34ed066df378efacc9b924ec161e7639` int(11) default NULL, + `F_577bcc914f9e55d5e4e4f82f9f00e7d4` int(11) default NULL, + `F_11b9842e0a271ff252c1903e7132cd68` int(11) default NULL, + `F_37bc2f75bf1bcfe8450a1a41c200364c` int(11) default NULL, + `F_496e05e1aea0a9c4655800e8a7b9ea28` int(11) default NULL, + `F_b2eb7349035754953b57a32e2841bda5` int(11) default NULL, + `F_8e98d81f8217304975ccb23337bb5761` int(11) default NULL, + `F_a8c88a0055f636e4a163a5e3d16adab7` int(11) default NULL, + `F_eddea82ad2755b24c4e168c5fc2ebd40` int(11) default NULL, + `F_06eb61b839a0cefee4967c67ccb099dc` int(11) default NULL, + `F_9dfcd5e558dfa04aaf37f137a1d9d3e5` int(11) default NULL, + `F_950a4152c2b4aa3ad78bdd6b366cc179` int(11) default NULL, + `F_158f3069a435b314a80bdcb024f8e422` int(11) default NULL, + `F_758874998f5bd0c393da094e1967a72b` int(11) default NULL, + `F_ad13a2a07ca4b7642959dc0c4c740ab6` int(11) default NULL, + `F_3fe94a002317b5f9259f82690aeea4cd` int(11) default NULL, + `F_5b8add2a5d98b1a652ea7fd72d942dac` int(11) default NULL, + `F_432aca3a1e345e339f35a30c8f65edce` int(11) default NULL, + `F_8d3bba7425e7c98c50f52ca1b52d3735` int(11) default NULL, + `F_320722549d1751cf3f247855f937b982` int(11) default NULL, + `F_caf1a3dfb505ffed0d024130f58c5cfa` int(11) default NULL, + `F_5737c6ec2e0716f3d8a7a5c4e0de0d9a` int(11) default NULL, + `F_bc6dc48b743dc5d013b1abaebd2faed2` int(11) default NULL, + `F_f2fc990265c712c49d51a18a32b39f0c` int(11) default NULL, + `F_89f0fd5c927d466d6ec9a21b9ac34ffa` int(11) default NULL, + `F_a666587afda6e89aec274a3657558a27` int(11) default NULL, + `F_b83aac23b9528732c23cc7352950e880` int(11) default NULL, + `F_cd00692c3bfe59267d5ecfac5310286c` int(11) default NULL, + `F_6faa8040da20ef399b63a72d0e4ab575` int(11) default NULL, + `F_fe73f687e5bc5280214e0486b273a5f9` int(11) default NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Dumping data for table `t1` +-- + + +/*!40000 ALTER TABLE `t1` DISABLE KEYS */; +LOCK TABLES `t1` WRITE; +INSERT INTO `t1` (`F_c4ca4238a0b923820dcc509a6f75849b`, `F_c81e728d9d4c2f636f067f89cc14862c`, `F_eccbc87e4b5ce2fe28308fd9f2a7baf3`, `F_a87ff679a2f3e71d9181a67b7542122c`, `F_e4da3b7fbbce2345d7772b0674a318d5`, `F_1679091c5a880faf6fb5e6087eb1b2dc`, `F_8f14e45fceea167a5a36dedd4bea2543`, `F_c9f0f895fb98ab9159f51fd0297e236d`, `F_45c48cce2e2d7fbdea1afc51c7c6ad26`, `F_d3d9446802a44259755d38e6d163e820`, `F_6512bd43d9caa6e02c990b0a82652dca`, `F_c20ad4d76fe97759aa27a0c99bff6710`, `F_c51ce410c124a10e0db5e4b97fc2af39`, `F_aab3238922bcc25a6f606eb525ffdc56`, `F_9bf31c7ff062936a96d3c8bd1f8f2ff3`, `F_c74d97b01eae257e44aa9d5bade97baf`, `F_70efdf2ec9b086079795c442636b55fb`, `F_6f4922f45568161a8cdf4ad2299f6d23`, `F_1f0e3dad99908345f7439f8ffabdffc4`, `F_98f13708210194c475687be6106a3b84`, `F_3c59dc048e8850243be8079a5c74d079`, `F_b6d767d2f8ed5d21a44b0e5886680cb9`, `F_37693cfc748049e45d87b8c7d8b9aacd`, `F_1ff1de774005f8da13f42943881c655f`, `F_8e296a067a37563370ded05f5a3bf3ec`, `F_4e732ced3463d06de0ca9a15b6153677`, `F_02e74f10e0327ad868d138f2b4fdd6f0`, `F_33e75ff09dd601bbe69f351039152189`, `F_6ea9ab1baa0efb9e19094440c317e21b`, `F_34173cb38f07f89ddbebc2ac9128303f`, `F_c16a5320fa475530d9583c34fd356ef5`, `F_6364d3f0f495b6ab9dcf8d3b5c6e0b01`, `F_182be0c5cdcd5072bb1864cdee4d3d6e`, `F_e369853df766fa44e1ed0ff613f563bd`, `F_1c383cd30b7c298ab50293adfecb7b18`, `F_19ca14e7ea6328a42e0eb13d585e4c22`, `F_a5bfc9e07964f8dddeb95fc584cd965d`, `F_a5771bce93e200c36f7cd9dfd0e5deaa`, `F_d67d8ab4f4c10bf22aa353e27879133c`, `F_d645920e395fedad7bbbed0eca3fe2e0`, `F_3416a75f4cea9109507cacd8e2f2aefc`, `F_a1d0c6e83f027327d8461063f4ac58a6`, `F_17e62166fc8586dfa4d1bc0e1742c08b`, `F_f7177163c833dff4b38fc8d2872f1ec6`, `F_6c8349cc7260ae62e3b1396831a8398f`, `F_d9d4f495e875a2e075a1a4a6e1b9770f`, `F_67c6a1e7ce56d3d6fa748ab6d9af3fd7`, `F_642e92efb79421734881b53e1e1b18b6`, `F_f457c545a9ded88f18ecee47145a72c0`, `F_c0c7c76d30bd3dcaefc96f40275bdc0a`, `F_2838023a778dfaecdc212708f721b788`, `F_9a1158154dfa42caddbd0694a4e9bdc8`, `F_d82c8d1619ad8176d665453cfb2e55f0`, `F_a684eceee76fc522773286a895bc8436`, `F_b53b3a3d6ab90ce0268229151c9bde11`, `F_9f61408e3afb633e50cdf1b20de6f466`, `F_72b32a1f754ba1c09b3695e0cb6cde7f`, `F_66f041e16a60928b05a7e228a89c3799`, `F_093f65e080a295f8076b1c5722a46aa2`, `F_072b030ba126b2f4b2374f342be9ed44`, `F_7f39f8317fbdb1988ef4c628eba02591`, `F_44f683a84163b3523afe57c2e008bc8c`, `F_03afdbd66e7929b125f8597834fa83a4`, `F_ea5d2f1c4608232e07d3aa3d998e5135`, `F_fc490ca45c00b1249bbe3554a4fdf6fb`, `F_3295c76acbf4caaed33c36b1b5fc2cb1`, `F_735b90b4568125ed6c3f678819b6e058`, `F_a3f390d88e4c41f2747bfa2f1b5f87db`, `F_14bfa6bb14875e45bba028a21ed38046`, `F_7cbbc409ec990f19c78c75bd1e06f215`, `F_e2c420d928d4bf8ce0ff2ec19b371514`, `F_32bb90e8976aab5298d5da10fe66f21d`, `F_d2ddea18f00665ce8623e36bd4e3c7c5`, `F_ad61ab143223efbc24c7d2583be69251`, `F_d09bf41544a3365a46c9077ebb5e35c3`, `F_fbd7939d674997cdb4692d34de8633c4`, `F_28dd2c7955ce926456240b2ff0100bde`, `F_35f4a8d465e6e1edc05f3d8ab658c551`, `F_d1fe173d08e959397adf34b1d77e88d7`, `F_f033ab37c30201f73f142449d037028d`, `F_43ec517d68b6edd3015b3edc9a11367b`, `F_9778d5d219c5080b9a6a17bef029331c`, `F_fe9fc289c3ff0af142b6d3bead98a923`, `F_68d30a9594728bc39aa24be94b319d21`, `F_3ef815416f775098fe977004015c6193`, `F_93db85ed909c13838ff95ccfa94cebd9`, `F_c7e1249ffc03eb9ded908c236bd1996d`, `F_2a38a4a9316c49e5a833517c45d31070`, `F_7647966b7343c29048673252e490f736`, `F_8613985ec49eb8f757ae6439e879bb2a`, `F_54229abfcfa5649e7003b83dd4755294`, `F_92cc227532d17e56e07902b254dfad10`, `F_98dce83da57b0395e163467c9dae521b`, `F_f4b9ec30ad9f68f89b29639786cb62ef`, `F_812b4ba287f5ee0bc9d43bbf5bbe87fb`, `F_26657d5ff9020d2abefe558796b99584`, `F_e2ef524fbf3d9fe611d5a8e90fefdc9c`, `F_ed3d2c21991e3bef5e069713af9fa6ca`, `F_ac627ab1ccbdb62ec96e702f07f6425b`, `F_f899139df5e1059396431415e770c6dd`, `F_38b3eff8baf56627478ec76a704e9b52`, `F_ec8956637a99787bd197eacd77acce5e`, `F_6974ce5ac660610b44d9b9fed0ff9548`, `F_c9e1074f5b3f9fc8ea15d152add07294`, `F_65b9eea6e1cc6bb9f0cd2a47751a186f`, `F_f0935e4cd5920aa6c7c996a5ee53a70f`, `F_a97da629b098b75c294dffdc3e463904`, `F_a3c65c2974270fd093ee8a9bf8ae7d0b`, `F_2723d092b63885e0d7c260cc007e8b9d`, `F_5f93f983524def3dca464469d2cf9f3e`, `F_698d51a19d8a121ce581499d7b701668`, `F_7f6ffaa6bb0b408017b62254211691b5`, `F_73278a4a86960eeb576a8fd4c9ec6997`, `F_5fd0b37cd7dbbb00f97ba6ce92bf5add`, `F_2b44928ae11fb9384c4cf38708677c48`, `F_c45147dee729311ef5b5c3003946c48f`, `F_eb160de1de89d9058fcb0b968dbbbd68`, `F_5ef059938ba799aaa845e1c2e8a762bd`, `F_07e1cd7dca89a1678042477183b7ac3f`, `F_da4fb5c6e93e74d3df8527599fa62642`, `F_4c56ff4ce4aaf9573aa5dff913df997a`, `F_a0a080f42e6f13b3a2df133f073095dd`, `F_202cb962ac59075b964b07152d234b70`, `F_c8ffe9a587b126f152ed3d89a146b445`, `F_3def184ad8f4755ff269862ea77393dd`, `F_069059b7ef840f0c74a814ec9237b6ec`, `F_ec5decca5ed3d6b8079e2e7e7bacc9f2`, `F_76dc611d6ebaafc66cc0879c71b5db5c`, `F_d1f491a404d6854880943e5c3cd9ca25`, `F_9b8619251a19057cff70779273e95aa6`, `F_1afa34a7f984eeabdbb0a7d494132ee5`, `F_65ded5353c5ee48d0b7d48c591b8f430`, `F_9fc3d7152ba9336a670e36d0ed79bc43`, `F_02522a2b2726fb0a03bb19f2d8d9524d`, `F_7f1de29e6da19d22b51c68001e7e0e54`, `F_42a0e188f5033bc65bf8d78622277c4e`, `F_3988c7f88ebcb58c6ce932b957b6f332`, `F_013d407166ec4fa56eb1e1f8cbe183b9`, `F_e00da03b685a0dd18fb6a08af0923de0`, `F_1385974ed5904a438616ff7bdb3f7439`, `F_0f28b5d49b3020afeecd95b4009adf4c`, `F_a8baa56554f96369ab93e4f3bb068c22`, `F_903ce9225fca3e988c2af215d4e544d3`, `F_0a09c8844ba8f0936c20bd791130d6b6`, `F_2b24d495052a8ce66358eb576b8912c8`, `F_a5e00132373a7031000fd987a3c9f87b`, `F_8d5e957f297893487bd98fa830fa6413`, `F_47d1e990583c9c67424d369f3414728e`, `F_f2217062e9a397a1dca429e7d70bc6ca`, `F_7ef605fc8dba5425d6965fbd4c8fbe1f`, `F_a8f15eda80c50adb0e71943adc8015cf`, `F_37a749d808e46495a8da1e5352d03cae`, `F_b3e3e393c77e35a4a3f3cbd1e429b5dc`, `F_1d7f7abc18fcb43975065399b0d1e48e`, `F_2a79ea27c279e471f4d180b08d62b00a`, `F_1c9ac0159c94d8d0cbedc973445af2da`, `F_6c4b761a28b734fe93831e3fb400ce87`, `F_06409663226af2f3114485aa4e0a23b4`, `F_140f6969d5213fd0ece03148e62e461e`, `F_b73ce398c39f506af761d2277d853a92`, `F_bd4c9ab730f5513206b999ec0d90d1fb`, `F_82aa4b0af34c2313a562076992e50aa3`, `F_0777d5c17d4066b82ab86dff8a46af6f`, `F_fa7cdfad1a5aaf8370ebeda47a1ff1c3`, `F_9766527f2b5d3e95d4a733fcfb77bd7e`, `F_7e7757b1e12abcb736ab9a754ffb617a`, `F_5878a7ab84fb43402106c575658472fa`, `F_006f52e9102a8d3be2fe5614f42ba989`, `F_3636638817772e42b59d74cff571fbb3`, `F_149e9677a5989fd342ae44213df68868`, `F_a4a042cf4fd6bfb47701cbc8a1653ada`, `F_1ff8a7b5dc7a7d1f0ed65aaa29c04b1e`, `F_f7e6c85504ce6e82442c770f7c8606f0`, `F_bf8229696f7a3bb4700cfddef19fa23f`, `F_82161242827b703e6acf9c726942a1e4`, `F_38af86134b65d0f10fe33d30dd76442e`, `F_96da2f590cd7246bbde0051047b0d6f7`, `F_8f85517967795eeef66c225f7883bdcb`, `F_8f53295a73878494e9bc8dd6c3c7104f`, `F_045117b0e0a11a242b9765e79cbf113f`, `F_fc221309746013ac554571fbd180e1c8`, `F_4c5bde74a8f110656874902f07378009`, `F_cedebb6e872f539bef8c3f919874e9d7`, `F_6cdd60ea0045eb7a6ec44c54d29ed402`, `F_eecca5b6365d9607ee5a9d336962c534`, `F_9872ed9fc22fc182d371c3e9ed316094`, `F_31fefc0e570cb3860f2a6d4b38c6490d`, `F_9dcb88e0137649590b755372b040afad`, `F_a2557a7b2e94197ff767970b67041697`, `F_cfecdb276f634854f3ef915e2e980c31`, `F_0aa1883c6411f7873cb83dacb17b0afc`, `F_58a2fc6ed39fd083f55d4182bf88826d`, `F_bd686fd640be98efaae0091fa301e613`, `F_a597e50502f5ff68e3e25b9114205d4a`, `F_0336dcbab05b9d5ad24f4333c7658a0e`, `F_084b6fbb10729ed4da8c3d3f5a3ae7c9`, `F_85d8ce590ad8981ca2c8286f79f59954`, `F_0e65972dce68dad4d52d063967f0a705`, `F_84d9ee44e457ddef7f2c4f25dc8fa865`, `F_3644a684f98ea8fe223c713b77189a77`, `F_757b505cfd34c64c85ca5b5690ee5293`, `F_854d6fae5ee42911677c739ee1734486`, `F_e2c0be24560d78c5e599c2a9c9d0bbd2`, `F_274ad4786c3abca69fa097b85867d9a4`, `F_eae27d77ca20db309e056e3d2dcd7d69`, `F_7eabe3a1649ffa2b3ff8c02ebfd5659f`, `F_69adc1e107f7f7d035d7baf04342e1ca`, `F_091d584fced301b442654dd8c23b3fc9`, `F_b1d10e7bafa4421218a51b1e1f1b0ba2`, `F_6f3ef77ac0e3619e98159e9b6febf557`, `F_eb163727917cbba1eea208541a643e74`, `F_1534b76d325a8f591b52d302e7181331`, `F_979d472a84804b9f647bc185a877a8b5`, `F_ca46c1b9512a7a8315fa3c5a946e8265`, `F_3b8a614226a953a8cd9526fca6fe9ba5`, `F_45fbc6d3e05ebd93369ce542e8f2322d`, `F_63dc7ed1010d3c3b8269faf0ba7491d4`, `F_e96ed478dab8595a7dbda4cbcbee168f`, `F_c0e190d8267e36708f955d7ab048990d`, `F_ec8ce6abb3e952a85b8551ba726a1227`, `F_060ad92489947d410d897474079c1477`, `F_bcbe3365e6ac95ea2c0343a2395834dd`, `F_115f89503138416a242f40fb7d7f338e`, `F_13fe9d84310e77f13a6d184dbf1232f3`, `F_d1c38a09acc34845c6be3a127a5aacaf`, `F_9cfdf10e8fc047a44b08ed031e1f0ed1`, `F_705f2172834666788607efbfca35afb3`, `F_74db120f0a8e5646ef5a30154e9f6deb`, `F_57aeee35c98205091e18d1140e9f38cf`, `F_6da9003b743b65f4c0ccd295cc484e57`, `F_9b04d152845ec0a378394003c96da594`, `F_be83ab3ecd0db773eb2dc1b0a17836a1`, `F_e165421110ba03099a1c0393373c5b43`, `F_289dff07669d7a23de0ef88d2f7129e7`, `F_577ef1154f3240ad5b9b413aa7346a1e`, `F_01161aaa0b6d1345dd8fe4e481144d84`, `F_539fd53b59e3bb12d203f45a912eeaf2`, `F_ac1dd209cbcc5e5d1c6e28598e8cbbe8`, `F_555d6702c950ecb729a966504af0a635`, `F_335f5352088d7d9bf74191e006d8e24c`, `F_f340f1b1f65b6df5b5e3f94d95b11daf`, `F_e4a6222cdb5b34375400904f03d8e6a5`, `F_cb70ab375662576bd1ac5aaf16b3fca4`, `F_9188905e74c28e489b44e954ec0b9bca`, `F_0266e33d3f546cb5436a10798e657d97`, `F_38db3aed920cf82ab059bfccbd02be6a`, `F_3cec07e9ba5f5bb252d13f5f431e4bbb`, `F_621bf66ddb7c962aa0d22ac97d69b793`, `F_077e29b11be80ab57e1a2ecabb7da330`, `F_6c9882bbac1c7093bd25041881277658`, `F_19f3cd308f1455b3fa09a282e0d496f4`, `F_03c6b06952c750899bb03d998e631860`, `F_c24cd76e1ce41366a4bbe8a49b02a028`, `F_c52f1bd66cc19d05628bd8bf27af3ad6`, `F_fe131d7f5a6b38b23cc967316c13dae2`, `F_f718499c1c8cef6730f9fd03c8125cab`, `F_d96409bf894217686ba124d7356686c9`, `F_502e4a16930e414107ee22b6198c578f`, `F_cfa0860e83a4c3a763a7e62d825349f7`, `F_a4f23670e1833f3fdb077ca70bbd5d66`, `F_b1a59b315fc9a3002ce38bbe070ec3f5`, `F_36660e59856b4de58a219bcf4e27eba3`, `F_8c19f571e251e61cb8dd3612f26d5ecf`, `F_d6baf65e0b240ce177cf70da146c8dc8`, `F_e56954b4f6347e897f954495eab16a88`, `F_f7664060cc52bc6f3d620bcedc94a4b6`, `F_eda80a3d5b344bc40f3bc04f65b7a357`, `F_8f121ce07d74717e0b1f21d122e04521`, `F_06138bc5af6023646ede0e1f7c1eac75`, `F_39059724f73a9969845dfe4146c5660e`, `F_7f100b7b36092fb9b06dfb4fac360931`, `F_7a614fd06c325499f1680b9896beedeb`, `F_4734ba6f3de83d861c3176a6273cac6d`, `F_d947bf06a885db0d477d707121934ff8`, `F_63923f49e5241343aa7acb6a06a751e7`, `F_db8e1af0cb3aca1ae2d0018624204529`, `F_20f07591c6fcb220ffe637cda29bb3f6`, `F_07cdfd23373b17c6b337251c22b7ea57`, `F_d395771085aab05244a4fb8fd91bf4ee`, `F_92c8c96e4c37100777c7190b76d28233`, `F_e3796ae838835da0b6f6ea37bcf8bcb7`, `F_6a9aeddfc689c1d0e3b9ccc3ab651bc5`, `F_0f49c89d1e7298bb9930789c8ed59d48`, `F_46ba9f2a6976570b0353203ec4474217`, `F_0e01938fc48a2cfb5f2217fbfb00722d`, `F_16a5cdae362b8d27a1d8f8c7b78b4330`, `F_918317b57931b6b7a7d29490fe5ec9f9`, `F_48aedb8880cab8c45637abc7493ecddd`, `F_839ab46820b524afda05122893c2fe8e`, `F_f90f2aca5c640289d0a29417bcb63a37`, `F_9c838d2e45b2ad1094d42f4ef36764f6`, `F_1700002963a49da13542e0726b7bb758`, `F_53c3bce66e43be4f209556518c2fcb54`, `F_6883966fd8f918a4aa29be29d2c386fb`, `F_49182f81e6a13cf5eaa496d51fea6406`, `F_d296c101daa88a51f6ca8cfc1ac79b50`, `F_9fd81843ad7f202f26c1a174c7357585`, `F_26e359e83860db1d11b6acca57d8ea88`, `F_ef0d3930a7b6c95bd2b32ed45989c61f`, `F_94f6d7e04a4d452035300f18b984988c`, `F_34ed066df378efacc9b924ec161e7639`, `F_577bcc914f9e55d5e4e4f82f9f00e7d4`, `F_11b9842e0a271ff252c1903e7132cd68`, `F_37bc2f75bf1bcfe8450a1a41c200364c`, `F_496e05e1aea0a9c4655800e8a7b9ea28`, `F_b2eb7349035754953b57a32e2841bda5`, `F_8e98d81f8217304975ccb23337bb5761`, `F_a8c88a0055f636e4a163a5e3d16adab7`, `F_eddea82ad2755b24c4e168c5fc2ebd40`, `F_06eb61b839a0cefee4967c67ccb099dc`, `F_9dfcd5e558dfa04aaf37f137a1d9d3e5`, `F_950a4152c2b4aa3ad78bdd6b366cc179`, `F_158f3069a435b314a80bdcb024f8e422`, `F_758874998f5bd0c393da094e1967a72b`, `F_ad13a2a07ca4b7642959dc0c4c740ab6`, `F_3fe94a002317b5f9259f82690aeea4cd`, `F_5b8add2a5d98b1a652ea7fd72d942dac`, `F_432aca3a1e345e339f35a30c8f65edce`, `F_8d3bba7425e7c98c50f52ca1b52d3735`, `F_320722549d1751cf3f247855f937b982`, `F_caf1a3dfb505ffed0d024130f58c5cfa`, `F_5737c6ec2e0716f3d8a7a5c4e0de0d9a`, `F_bc6dc48b743dc5d013b1abaebd2faed2`, `F_f2fc990265c712c49d51a18a32b39f0c`, `F_89f0fd5c927d466d6ec9a21b9ac34ffa`, `F_a666587afda6e89aec274a3657558a27`, `F_b83aac23b9528732c23cc7352950e880`, `F_cd00692c3bfe59267d5ecfac5310286c`, `F_6faa8040da20ef399b63a72d0e4ab575`, `F_fe73f687e5bc5280214e0486b273a5f9`) VALUES (NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); +UNLOCK TABLES; +/*!40000 ALTER TABLE `t1` ENABLE KEYS */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +drop table t1; diff --git a/mysql-test/t/mysqldump.test b/mysql-test/t/mysqldump.test index c321fb9c6b7..961c0f3e9d4 100644 --- a/mysql-test/t/mysqldump.test +++ b/mysql-test/t/mysqldump.test @@ -185,3 +185,341 @@ INSERT INTO `t1` VALUES (0x602010000280100005E71A); --exec $MYSQL_DUMP --skip-extended-insert --hex-blob test --skip-comments t1 DROP TABLE t1; +# +# Bug #10286: mysqldump -c crashes on table that has many fields with long +# names +# +create table t1 ( + F_c4ca4238a0b923820dcc509a6f75849b int, + F_c81e728d9d4c2f636f067f89cc14862c int, + F_eccbc87e4b5ce2fe28308fd9f2a7baf3 int, + F_a87ff679a2f3e71d9181a67b7542122c int, + F_e4da3b7fbbce2345d7772b0674a318d5 int, + F_1679091c5a880faf6fb5e6087eb1b2dc int, + F_8f14e45fceea167a5a36dedd4bea2543 int, + F_c9f0f895fb98ab9159f51fd0297e236d int, + F_45c48cce2e2d7fbdea1afc51c7c6ad26 int, + F_d3d9446802a44259755d38e6d163e820 int, + F_6512bd43d9caa6e02c990b0a82652dca int, + F_c20ad4d76fe97759aa27a0c99bff6710 int, + F_c51ce410c124a10e0db5e4b97fc2af39 int, + F_aab3238922bcc25a6f606eb525ffdc56 int, + F_9bf31c7ff062936a96d3c8bd1f8f2ff3 int, + F_c74d97b01eae257e44aa9d5bade97baf int, + F_70efdf2ec9b086079795c442636b55fb int, + F_6f4922f45568161a8cdf4ad2299f6d23 int, + F_1f0e3dad99908345f7439f8ffabdffc4 int, + F_98f13708210194c475687be6106a3b84 int, + F_3c59dc048e8850243be8079a5c74d079 int, + F_b6d767d2f8ed5d21a44b0e5886680cb9 int, + F_37693cfc748049e45d87b8c7d8b9aacd int, + F_1ff1de774005f8da13f42943881c655f int, + F_8e296a067a37563370ded05f5a3bf3ec int, + F_4e732ced3463d06de0ca9a15b6153677 int, + F_02e74f10e0327ad868d138f2b4fdd6f0 int, + F_33e75ff09dd601bbe69f351039152189 int, + F_6ea9ab1baa0efb9e19094440c317e21b int, + F_34173cb38f07f89ddbebc2ac9128303f int, + F_c16a5320fa475530d9583c34fd356ef5 int, + F_6364d3f0f495b6ab9dcf8d3b5c6e0b01 int, + F_182be0c5cdcd5072bb1864cdee4d3d6e int, + F_e369853df766fa44e1ed0ff613f563bd int, + F_1c383cd30b7c298ab50293adfecb7b18 int, + F_19ca14e7ea6328a42e0eb13d585e4c22 int, + F_a5bfc9e07964f8dddeb95fc584cd965d int, + F_a5771bce93e200c36f7cd9dfd0e5deaa int, + F_d67d8ab4f4c10bf22aa353e27879133c int, + F_d645920e395fedad7bbbed0eca3fe2e0 int, + F_3416a75f4cea9109507cacd8e2f2aefc int, + F_a1d0c6e83f027327d8461063f4ac58a6 int, + F_17e62166fc8586dfa4d1bc0e1742c08b int, + F_f7177163c833dff4b38fc8d2872f1ec6 int, + F_6c8349cc7260ae62e3b1396831a8398f int, + F_d9d4f495e875a2e075a1a4a6e1b9770f int, + F_67c6a1e7ce56d3d6fa748ab6d9af3fd7 int, + F_642e92efb79421734881b53e1e1b18b6 int, + F_f457c545a9ded88f18ecee47145a72c0 int, + F_c0c7c76d30bd3dcaefc96f40275bdc0a int, + F_2838023a778dfaecdc212708f721b788 int, + F_9a1158154dfa42caddbd0694a4e9bdc8 int, + F_d82c8d1619ad8176d665453cfb2e55f0 int, + F_a684eceee76fc522773286a895bc8436 int, + F_b53b3a3d6ab90ce0268229151c9bde11 int, + F_9f61408e3afb633e50cdf1b20de6f466 int, + F_72b32a1f754ba1c09b3695e0cb6cde7f int, + F_66f041e16a60928b05a7e228a89c3799 int, + F_093f65e080a295f8076b1c5722a46aa2 int, + F_072b030ba126b2f4b2374f342be9ed44 int, + F_7f39f8317fbdb1988ef4c628eba02591 int, + F_44f683a84163b3523afe57c2e008bc8c int, + F_03afdbd66e7929b125f8597834fa83a4 int, + F_ea5d2f1c4608232e07d3aa3d998e5135 int, + F_fc490ca45c00b1249bbe3554a4fdf6fb int, + F_3295c76acbf4caaed33c36b1b5fc2cb1 int, + F_735b90b4568125ed6c3f678819b6e058 int, + F_a3f390d88e4c41f2747bfa2f1b5f87db int, + F_14bfa6bb14875e45bba028a21ed38046 int, + F_7cbbc409ec990f19c78c75bd1e06f215 int, + F_e2c420d928d4bf8ce0ff2ec19b371514 int, + F_32bb90e8976aab5298d5da10fe66f21d int, + F_d2ddea18f00665ce8623e36bd4e3c7c5 int, + F_ad61ab143223efbc24c7d2583be69251 int, + F_d09bf41544a3365a46c9077ebb5e35c3 int, + F_fbd7939d674997cdb4692d34de8633c4 int, + F_28dd2c7955ce926456240b2ff0100bde int, + F_35f4a8d465e6e1edc05f3d8ab658c551 int, + F_d1fe173d08e959397adf34b1d77e88d7 int, + F_f033ab37c30201f73f142449d037028d int, + F_43ec517d68b6edd3015b3edc9a11367b int, + F_9778d5d219c5080b9a6a17bef029331c int, + F_fe9fc289c3ff0af142b6d3bead98a923 int, + F_68d30a9594728bc39aa24be94b319d21 int, + F_3ef815416f775098fe977004015c6193 int, + F_93db85ed909c13838ff95ccfa94cebd9 int, + F_c7e1249ffc03eb9ded908c236bd1996d int, + F_2a38a4a9316c49e5a833517c45d31070 int, + F_7647966b7343c29048673252e490f736 int, + F_8613985ec49eb8f757ae6439e879bb2a int, + F_54229abfcfa5649e7003b83dd4755294 int, + F_92cc227532d17e56e07902b254dfad10 int, + F_98dce83da57b0395e163467c9dae521b int, + F_f4b9ec30ad9f68f89b29639786cb62ef int, + F_812b4ba287f5ee0bc9d43bbf5bbe87fb int, + F_26657d5ff9020d2abefe558796b99584 int, + F_e2ef524fbf3d9fe611d5a8e90fefdc9c int, + F_ed3d2c21991e3bef5e069713af9fa6ca int, + F_ac627ab1ccbdb62ec96e702f07f6425b int, + F_f899139df5e1059396431415e770c6dd int, + F_38b3eff8baf56627478ec76a704e9b52 int, + F_ec8956637a99787bd197eacd77acce5e int, + F_6974ce5ac660610b44d9b9fed0ff9548 int, + F_c9e1074f5b3f9fc8ea15d152add07294 int, + F_65b9eea6e1cc6bb9f0cd2a47751a186f int, + F_f0935e4cd5920aa6c7c996a5ee53a70f int, + F_a97da629b098b75c294dffdc3e463904 int, + F_a3c65c2974270fd093ee8a9bf8ae7d0b int, + F_2723d092b63885e0d7c260cc007e8b9d int, + F_5f93f983524def3dca464469d2cf9f3e int, + F_698d51a19d8a121ce581499d7b701668 int, + F_7f6ffaa6bb0b408017b62254211691b5 int, + F_73278a4a86960eeb576a8fd4c9ec6997 int, + F_5fd0b37cd7dbbb00f97ba6ce92bf5add int, + F_2b44928ae11fb9384c4cf38708677c48 int, + F_c45147dee729311ef5b5c3003946c48f int, + F_eb160de1de89d9058fcb0b968dbbbd68 int, + F_5ef059938ba799aaa845e1c2e8a762bd int, + F_07e1cd7dca89a1678042477183b7ac3f int, + F_da4fb5c6e93e74d3df8527599fa62642 int, + F_4c56ff4ce4aaf9573aa5dff913df997a int, + F_a0a080f42e6f13b3a2df133f073095dd int, + F_202cb962ac59075b964b07152d234b70 int, + F_c8ffe9a587b126f152ed3d89a146b445 int, + F_3def184ad8f4755ff269862ea77393dd int, + F_069059b7ef840f0c74a814ec9237b6ec int, + F_ec5decca5ed3d6b8079e2e7e7bacc9f2 int, + F_76dc611d6ebaafc66cc0879c71b5db5c int, + F_d1f491a404d6854880943e5c3cd9ca25 int, + F_9b8619251a19057cff70779273e95aa6 int, + F_1afa34a7f984eeabdbb0a7d494132ee5 int, + F_65ded5353c5ee48d0b7d48c591b8f430 int, + F_9fc3d7152ba9336a670e36d0ed79bc43 int, + F_02522a2b2726fb0a03bb19f2d8d9524d int, + F_7f1de29e6da19d22b51c68001e7e0e54 int, + F_42a0e188f5033bc65bf8d78622277c4e int, + F_3988c7f88ebcb58c6ce932b957b6f332 int, + F_013d407166ec4fa56eb1e1f8cbe183b9 int, + F_e00da03b685a0dd18fb6a08af0923de0 int, + F_1385974ed5904a438616ff7bdb3f7439 int, + F_0f28b5d49b3020afeecd95b4009adf4c int, + F_a8baa56554f96369ab93e4f3bb068c22 int, + F_903ce9225fca3e988c2af215d4e544d3 int, + F_0a09c8844ba8f0936c20bd791130d6b6 int, + F_2b24d495052a8ce66358eb576b8912c8 int, + F_a5e00132373a7031000fd987a3c9f87b int, + F_8d5e957f297893487bd98fa830fa6413 int, + F_47d1e990583c9c67424d369f3414728e int, + F_f2217062e9a397a1dca429e7d70bc6ca int, + F_7ef605fc8dba5425d6965fbd4c8fbe1f int, + F_a8f15eda80c50adb0e71943adc8015cf int, + F_37a749d808e46495a8da1e5352d03cae int, + F_b3e3e393c77e35a4a3f3cbd1e429b5dc int, + F_1d7f7abc18fcb43975065399b0d1e48e int, + F_2a79ea27c279e471f4d180b08d62b00a int, + F_1c9ac0159c94d8d0cbedc973445af2da int, + F_6c4b761a28b734fe93831e3fb400ce87 int, + F_06409663226af2f3114485aa4e0a23b4 int, + F_140f6969d5213fd0ece03148e62e461e int, + F_b73ce398c39f506af761d2277d853a92 int, + F_bd4c9ab730f5513206b999ec0d90d1fb int, + F_82aa4b0af34c2313a562076992e50aa3 int, + F_0777d5c17d4066b82ab86dff8a46af6f int, + F_fa7cdfad1a5aaf8370ebeda47a1ff1c3 int, + F_9766527f2b5d3e95d4a733fcfb77bd7e int, + F_7e7757b1e12abcb736ab9a754ffb617a int, + F_5878a7ab84fb43402106c575658472fa int, + F_006f52e9102a8d3be2fe5614f42ba989 int, + F_3636638817772e42b59d74cff571fbb3 int, + F_149e9677a5989fd342ae44213df68868 int, + F_a4a042cf4fd6bfb47701cbc8a1653ada int, + F_1ff8a7b5dc7a7d1f0ed65aaa29c04b1e int, + F_f7e6c85504ce6e82442c770f7c8606f0 int, + F_bf8229696f7a3bb4700cfddef19fa23f int, + F_82161242827b703e6acf9c726942a1e4 int, + F_38af86134b65d0f10fe33d30dd76442e int, + F_96da2f590cd7246bbde0051047b0d6f7 int, + F_8f85517967795eeef66c225f7883bdcb int, + F_8f53295a73878494e9bc8dd6c3c7104f int, + F_045117b0e0a11a242b9765e79cbf113f int, + F_fc221309746013ac554571fbd180e1c8 int, + F_4c5bde74a8f110656874902f07378009 int, + F_cedebb6e872f539bef8c3f919874e9d7 int, + F_6cdd60ea0045eb7a6ec44c54d29ed402 int, + F_eecca5b6365d9607ee5a9d336962c534 int, + F_9872ed9fc22fc182d371c3e9ed316094 int, + F_31fefc0e570cb3860f2a6d4b38c6490d int, + F_9dcb88e0137649590b755372b040afad int, + F_a2557a7b2e94197ff767970b67041697 int, + F_cfecdb276f634854f3ef915e2e980c31 int, + F_0aa1883c6411f7873cb83dacb17b0afc int, + F_58a2fc6ed39fd083f55d4182bf88826d int, + F_bd686fd640be98efaae0091fa301e613 int, + F_a597e50502f5ff68e3e25b9114205d4a int, + F_0336dcbab05b9d5ad24f4333c7658a0e int, + F_084b6fbb10729ed4da8c3d3f5a3ae7c9 int, + F_85d8ce590ad8981ca2c8286f79f59954 int, + F_0e65972dce68dad4d52d063967f0a705 int, + F_84d9ee44e457ddef7f2c4f25dc8fa865 int, + F_3644a684f98ea8fe223c713b77189a77 int, + F_757b505cfd34c64c85ca5b5690ee5293 int, + F_854d6fae5ee42911677c739ee1734486 int, + F_e2c0be24560d78c5e599c2a9c9d0bbd2 int, + F_274ad4786c3abca69fa097b85867d9a4 int, + F_eae27d77ca20db309e056e3d2dcd7d69 int, + F_7eabe3a1649ffa2b3ff8c02ebfd5659f int, + F_69adc1e107f7f7d035d7baf04342e1ca int, + F_091d584fced301b442654dd8c23b3fc9 int, + F_b1d10e7bafa4421218a51b1e1f1b0ba2 int, + F_6f3ef77ac0e3619e98159e9b6febf557 int, + F_eb163727917cbba1eea208541a643e74 int, + F_1534b76d325a8f591b52d302e7181331 int, + F_979d472a84804b9f647bc185a877a8b5 int, + F_ca46c1b9512a7a8315fa3c5a946e8265 int, + F_3b8a614226a953a8cd9526fca6fe9ba5 int, + F_45fbc6d3e05ebd93369ce542e8f2322d int, + F_63dc7ed1010d3c3b8269faf0ba7491d4 int, + F_e96ed478dab8595a7dbda4cbcbee168f int, + F_c0e190d8267e36708f955d7ab048990d int, + F_ec8ce6abb3e952a85b8551ba726a1227 int, + F_060ad92489947d410d897474079c1477 int, + F_bcbe3365e6ac95ea2c0343a2395834dd int, + F_115f89503138416a242f40fb7d7f338e int, + F_13fe9d84310e77f13a6d184dbf1232f3 int, + F_d1c38a09acc34845c6be3a127a5aacaf int, + F_9cfdf10e8fc047a44b08ed031e1f0ed1 int, + F_705f2172834666788607efbfca35afb3 int, + F_74db120f0a8e5646ef5a30154e9f6deb int, + F_57aeee35c98205091e18d1140e9f38cf int, + F_6da9003b743b65f4c0ccd295cc484e57 int, + F_9b04d152845ec0a378394003c96da594 int, + F_be83ab3ecd0db773eb2dc1b0a17836a1 int, + F_e165421110ba03099a1c0393373c5b43 int, + F_289dff07669d7a23de0ef88d2f7129e7 int, + F_577ef1154f3240ad5b9b413aa7346a1e int, + F_01161aaa0b6d1345dd8fe4e481144d84 int, + F_539fd53b59e3bb12d203f45a912eeaf2 int, + F_ac1dd209cbcc5e5d1c6e28598e8cbbe8 int, + F_555d6702c950ecb729a966504af0a635 int, + F_335f5352088d7d9bf74191e006d8e24c int, + F_f340f1b1f65b6df5b5e3f94d95b11daf int, + F_e4a6222cdb5b34375400904f03d8e6a5 int, + F_cb70ab375662576bd1ac5aaf16b3fca4 int, + F_9188905e74c28e489b44e954ec0b9bca int, + F_0266e33d3f546cb5436a10798e657d97 int, + F_38db3aed920cf82ab059bfccbd02be6a int, + F_3cec07e9ba5f5bb252d13f5f431e4bbb int, + F_621bf66ddb7c962aa0d22ac97d69b793 int, + F_077e29b11be80ab57e1a2ecabb7da330 int, + F_6c9882bbac1c7093bd25041881277658 int, + F_19f3cd308f1455b3fa09a282e0d496f4 int, + F_03c6b06952c750899bb03d998e631860 int, + F_c24cd76e1ce41366a4bbe8a49b02a028 int, + F_c52f1bd66cc19d05628bd8bf27af3ad6 int, + F_fe131d7f5a6b38b23cc967316c13dae2 int, + F_f718499c1c8cef6730f9fd03c8125cab int, + F_d96409bf894217686ba124d7356686c9 int, + F_502e4a16930e414107ee22b6198c578f int, + F_cfa0860e83a4c3a763a7e62d825349f7 int, + F_a4f23670e1833f3fdb077ca70bbd5d66 int, + F_b1a59b315fc9a3002ce38bbe070ec3f5 int, + F_36660e59856b4de58a219bcf4e27eba3 int, + F_8c19f571e251e61cb8dd3612f26d5ecf int, + F_d6baf65e0b240ce177cf70da146c8dc8 int, + F_e56954b4f6347e897f954495eab16a88 int, + F_f7664060cc52bc6f3d620bcedc94a4b6 int, + F_eda80a3d5b344bc40f3bc04f65b7a357 int, + F_8f121ce07d74717e0b1f21d122e04521 int, + F_06138bc5af6023646ede0e1f7c1eac75 int, + F_39059724f73a9969845dfe4146c5660e int, + F_7f100b7b36092fb9b06dfb4fac360931 int, + F_7a614fd06c325499f1680b9896beedeb int, + F_4734ba6f3de83d861c3176a6273cac6d int, + F_d947bf06a885db0d477d707121934ff8 int, + F_63923f49e5241343aa7acb6a06a751e7 int, + F_db8e1af0cb3aca1ae2d0018624204529 int, + F_20f07591c6fcb220ffe637cda29bb3f6 int, + F_07cdfd23373b17c6b337251c22b7ea57 int, + F_d395771085aab05244a4fb8fd91bf4ee int, + F_92c8c96e4c37100777c7190b76d28233 int, + F_e3796ae838835da0b6f6ea37bcf8bcb7 int, + F_6a9aeddfc689c1d0e3b9ccc3ab651bc5 int, + F_0f49c89d1e7298bb9930789c8ed59d48 int, + F_46ba9f2a6976570b0353203ec4474217 int, + F_0e01938fc48a2cfb5f2217fbfb00722d int, + F_16a5cdae362b8d27a1d8f8c7b78b4330 int, + F_918317b57931b6b7a7d29490fe5ec9f9 int, + F_48aedb8880cab8c45637abc7493ecddd int, + F_839ab46820b524afda05122893c2fe8e int, + F_f90f2aca5c640289d0a29417bcb63a37 int, + F_9c838d2e45b2ad1094d42f4ef36764f6 int, + F_1700002963a49da13542e0726b7bb758 int, + F_53c3bce66e43be4f209556518c2fcb54 int, + F_6883966fd8f918a4aa29be29d2c386fb int, + F_49182f81e6a13cf5eaa496d51fea6406 int, + F_d296c101daa88a51f6ca8cfc1ac79b50 int, + F_9fd81843ad7f202f26c1a174c7357585 int, + F_26e359e83860db1d11b6acca57d8ea88 int, + F_ef0d3930a7b6c95bd2b32ed45989c61f int, + F_94f6d7e04a4d452035300f18b984988c int, + F_34ed066df378efacc9b924ec161e7639 int, + F_577bcc914f9e55d5e4e4f82f9f00e7d4 int, + F_11b9842e0a271ff252c1903e7132cd68 int, + F_37bc2f75bf1bcfe8450a1a41c200364c int, + F_496e05e1aea0a9c4655800e8a7b9ea28 int, + F_b2eb7349035754953b57a32e2841bda5 int, + F_8e98d81f8217304975ccb23337bb5761 int, + F_a8c88a0055f636e4a163a5e3d16adab7 int, + F_eddea82ad2755b24c4e168c5fc2ebd40 int, + F_06eb61b839a0cefee4967c67ccb099dc int, + F_9dfcd5e558dfa04aaf37f137a1d9d3e5 int, + F_950a4152c2b4aa3ad78bdd6b366cc179 int, + F_158f3069a435b314a80bdcb024f8e422 int, + F_758874998f5bd0c393da094e1967a72b int, + F_ad13a2a07ca4b7642959dc0c4c740ab6 int, + F_3fe94a002317b5f9259f82690aeea4cd int, + F_5b8add2a5d98b1a652ea7fd72d942dac int, + F_432aca3a1e345e339f35a30c8f65edce int, + F_8d3bba7425e7c98c50f52ca1b52d3735 int, + F_320722549d1751cf3f247855f937b982 int, + F_caf1a3dfb505ffed0d024130f58c5cfa int, + F_5737c6ec2e0716f3d8a7a5c4e0de0d9a int, + F_bc6dc48b743dc5d013b1abaebd2faed2 int, + F_f2fc990265c712c49d51a18a32b39f0c int, + F_89f0fd5c927d466d6ec9a21b9ac34ffa int, + F_a666587afda6e89aec274a3657558a27 int, + F_b83aac23b9528732c23cc7352950e880 int, + F_cd00692c3bfe59267d5ecfac5310286c int, + F_6faa8040da20ef399b63a72d0e4ab575 int, + F_fe73f687e5bc5280214e0486b273a5f9 int); +insert into t1 (F_8d3bba7425e7c98c50f52ca1b52d3735) values (1); +--exec $MYSQL_DUMP -c test +drop table t1; From 3e1dad411598662152dd5100c2fb88219a31634f Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 8 May 2005 21:03:50 +0100 Subject: [PATCH 06/63] Bug#6236 Incomplete ALTER TABLE breaks MERGE compatibility Fix implicit NOT NULL not set on ALTER of PK columns mysql-test/r/alter_table.result: Test for Bug#6236 mysql-test/t/alter_table.test: Test for Bug#6236 sql/sql_table.cc: Implicit NOT NULL not set on ALTER of PK columns BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted --- BitKeeper/etc/logging_ok | 1 + mysql-test/r/alter_table.result | 20 ++++++++++++++++++++ mysql-test/t/alter_table.test | 13 +++++++++++++ sql/sql_table.cc | 23 +++++++++++++++++------ 4 files changed, 51 insertions(+), 6 deletions(-) diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index bf0dfb9e31d..5a34dbbb1d8 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -9,6 +9,7 @@ acurtis@pcgem.rdg.cyberkinetica.com ahlentz@co3064164-a.rochd1.qld.optusnet.com.au akishkin@work.mysql.com antony@ltantony.dsl-verizon.net +antony@ltantony.mysql.com antony@ltantony.rdg.cyberkinetica.homeunix.net arjen@bitbike.com arjen@co3064164-a.bitbike.com diff --git a/mysql-test/r/alter_table.result b/mysql-test/r/alter_table.result index 78925a64e93..80d3ef5e0a5 100644 --- a/mysql-test/r/alter_table.result +++ b/mysql-test/r/alter_table.result @@ -386,3 +386,23 @@ Incorrect table name 't1\\' rename table t1 to `t1\\`; Incorrect table name 't1\\' drop table t1; +drop table if exists t1, t2; +create table t1 ( a varchar(10) not null primary key ) engine=myisam; +create table t2 ( a varchar(10) not null primary key ) engine=merge union=(t1); +flush tables; +alter table t1 modify a varchar(10); +show create table t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` varchar(10) NOT NULL default '', + PRIMARY KEY (`a`) +) TYPE=MRG_MyISAM UNION=(t1) +flush tables; +alter table t1 modify a varchar(10) not null; +show create table t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` varchar(10) NOT NULL default '', + PRIMARY KEY (`a`) +) TYPE=MRG_MyISAM UNION=(t1) +drop table if exists t1, t2; diff --git a/mysql-test/t/alter_table.test b/mysql-test/t/alter_table.test index 11290134a71..c69f9aabae6 100644 --- a/mysql-test/t/alter_table.test +++ b/mysql-test/t/alter_table.test @@ -254,3 +254,16 @@ alter table t1 rename to `t1\\`; rename table t1 to `t1\\`; drop table t1; +# +# BUG#6236 - ALTER TABLE MODIFY should set implicit NOT NULL on PK columns +# +drop table if exists t1, t2; +create table t1 ( a varchar(10) not null primary key ) engine=myisam; +create table t2 ( a varchar(10) not null primary key ) engine=merge union=(t1); +flush tables; +alter table t1 modify a varchar(10); +show create table t2; +flush tables; +alter table t1 modify a varchar(10) not null; +show create table t2; +drop table if exists t1, t2; diff --git a/sql/sql_table.cc b/sql/sql_table.cc index cef480fadde..e065e5dfc58 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -1795,6 +1795,11 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name, } KEY_PART_INFO *key_part= key_info->key_part; + enum Key::Keytype key_type= key_info->flags & HA_NOSAME ? + (!my_strcasecmp(key_name, "PRIMARY") ? + Key::PRIMARY : Key::UNIQUE) : + (key_info->flags & HA_FULLTEXT ? + Key::FULLTEXT : Key::MULTIPLE); key_parts.empty(); for (uint j=0 ; j < key_info->key_parts ; j++,key_part++) { @@ -1824,16 +1829,22 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name, cfield->pack_length <= key_part_length)) key_part_length=0; // Use whole field } + if (!(cfield->flags & NOT_NULL_FLAG)) + { + if (key_type == Key::PRIMARY) + { + /* Implicitly set primary key fields to NOT NULL for ISO conf. */ + cfield->flags|= NOT_NULL_FLAG; + cfield->pack_flag&= ~FIELDFLAG_MAYBE_NULL; + } + else + key_info->flags|= HA_NULL_PART_KEY; + } key_parts.push_back(new key_part_spec(cfield->field_name, key_part_length)); } if (key_parts.elements) - key_list.push_back(new Key(key_info->flags & HA_NOSAME ? - (!my_strcasecmp(key_name, "PRIMARY") ? - Key::PRIMARY : Key::UNIQUE) : - (key_info->flags & HA_FULLTEXT ? - Key::FULLTEXT : Key::MULTIPLE), - key_name,key_parts)); + key_list.push_back(new Key(key_type,key_name,key_parts)); } key_it.rewind(); { From 3ac2df4e4c2366d4b30b3251590207a3d07f483d Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 8 May 2005 22:56:58 +0100 Subject: [PATCH 07/63] Bug#8191 - SELECT INTO OUTFILE insists on FROM clause Fix bug + include test case. Enable outfile tests. mysql-test/t/outfile.test: Reenable outfile tests Add test for Bug#8191 sql/sql_yacc.yy: Fix Bug#8191 BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted --- BitKeeper/etc/logging_ok | 1 + mysql-test/include/have_outfile.inc | 5 +++ mysql-test/include/test_outfile.inc | 1 + mysql-test/r/have_outfile.require | 3 ++ mysql-test/r/outfile.result | Bin 0 -> 953 bytes mysql-test/t/outfile.test | 60 +++++++++++++++++++--------- sql/sql_yacc.yy | 7 ++-- 7 files changed, 56 insertions(+), 21 deletions(-) create mode 100644 mysql-test/include/have_outfile.inc create mode 100644 mysql-test/include/test_outfile.inc create mode 100644 mysql-test/r/have_outfile.require create mode 100644 mysql-test/r/outfile.result diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index bf0dfb9e31d..5a34dbbb1d8 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -9,6 +9,7 @@ acurtis@pcgem.rdg.cyberkinetica.com ahlentz@co3064164-a.rochd1.qld.optusnet.com.au akishkin@work.mysql.com antony@ltantony.dsl-verizon.net +antony@ltantony.mysql.com antony@ltantony.rdg.cyberkinetica.homeunix.net arjen@bitbike.com arjen@co3064164-a.bitbike.com diff --git a/mysql-test/include/have_outfile.inc b/mysql-test/include/have_outfile.inc new file mode 100644 index 00000000000..31e95f4810a --- /dev/null +++ b/mysql-test/include/have_outfile.inc @@ -0,0 +1,5 @@ +-- require r/have_outfile.require +disable_query_log; +select load_file(concat(@tmpdir,"/outfile.test")); +--exec rm $MYSQL_TEST_DIR/var/tmp/outfile.test +enable_query_log; diff --git a/mysql-test/include/test_outfile.inc b/mysql-test/include/test_outfile.inc new file mode 100644 index 00000000000..0bede4938c6 --- /dev/null +++ b/mysql-test/include/test_outfile.inc @@ -0,0 +1 @@ +eval select "Outfile OK" into outfile "$MYSQL_TEST_DIR/var/tmp/outfile.test"; diff --git a/mysql-test/r/have_outfile.require b/mysql-test/r/have_outfile.require new file mode 100644 index 00000000000..9fc2f8fdb5a --- /dev/null +++ b/mysql-test/r/have_outfile.require @@ -0,0 +1,3 @@ +load_file(concat(@tmpdir,"/outfile.test")) +Outfile OK + diff --git a/mysql-test/r/outfile.result b/mysql-test/r/outfile.result new file mode 100644 index 0000000000000000000000000000000000000000..a2720be075aeb427d4f11212b77ba3a2ad254710 GIT binary patch literal 953 zcmcIj!A`?44CU;vuzFc1twiZ|0PVsFahP`FhQ!j=V-aan5_izQC#fcFz$p?tT7J*Z zezqHDdt_A^LcK@&(w;rCTtn?hF`ZH@G2f{jR>oHIHR#ThW7HknfW@OS1Nl5VkTDiN ztuswFU*y@-6t~Lx7;c|8o51yCsAe=)HLrVZD6ef-E6yLd?HlbDnXm)LM8V|wR%Y`+ zNset_name($1,(uint) ((char*) lex->tok_end - $1)); }; -opt_into: +into: INTO OUTFILE TEXT_STRING { THD *thd= current_thd; From adefe15c9f623bd4dab7ed99ec1dc6ff9a24bb61 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 9 May 2005 08:33:45 +0100 Subject: [PATCH 08/63] Fix outfile test/results --- mysql-test/r/outfile.result | Bin 953 -> 683 bytes mysql-test/t/outfile.test | 17 +++++++++-------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/mysql-test/r/outfile.result b/mysql-test/r/outfile.result index a2720be075aeb427d4f11212b77ba3a2ad254710..a7871592241104fe2a949c98379cfa21dcbe5d68 100644 GIT binary patch delta 14 WcmdnVzM6Hz0mg}i`jh`M?EwHS^#)-8 literal 953 zcmcIj!A`?44CU;vuzFc1twiZ|0PVsFahP`FhQ!j=V-aan5_izQC#fcFz$p?tT7J*Z zezqHDdt_A^LcK@&(w;rCTtn?hF`ZH@G2f{jR>oHIHR#ThW7HknfW@OS1Nl5VkTDiN ztuswFU*y@-6t~Lx7;c|8o51yCsAe=)HLrVZD6ef-E6yLd?HlbDnXm)LM8V|wR%Y`+ zN Date: Tue, 10 May 2005 14:44:03 +0200 Subject: [PATCH 09/63] Applied two patches already commited to the main tree to resolve bugs found during the build: - removed an "#error PRAGMA" from sql/item_strfunc.h (msvensson) - Fixed BUG#10070 (range test failed if InnoDB is not available) (sergefp) mysql-test/t/range.test: Fix for BUG#10070: Make the test not to produce warnings if InnoDB is not available sql/item_strfunc.h: Remove the testcode --- mysql-test/t/range.test | 2 ++ sql/item_strfunc.h | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/mysql-test/t/range.test b/mysql-test/t/range.test index b8412b6624e..8c27d876bc8 100644 --- a/mysql-test/t/range.test +++ b/mysql-test/t/range.test @@ -450,6 +450,7 @@ explain select * from t1 where a='aaa' collate latin1_german1_ci; drop table t1; # Test for BUG#9348 "result for WHERE A AND (B OR C) differs from WHERE a AND (C OR B)" +--disable_warnings CREATE TABLE t1 ( `CLIENT` char(3) character set latin1 collate latin1_bin NOT NULL default '000', `ARG1` char(3) character set latin1 collate latin1_bin NOT NULL default '', @@ -458,6 +459,7 @@ CREATE TABLE t1 ( `FUNCTINT` int(11) NOT NULL default '0', KEY `VERI_CLNT~2` (`ARG1`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; +--enable_warnings INSERT INTO t1 VALUES ('000',' 0',' 0','Text 001',0), ('000',' 0',' 1','Text 002',0), ('000',' 1',' 2','Text 003',0), ('000',' 2',' 3','Text 004',0), diff --git a/sql/item_strfunc.h b/sql/item_strfunc.h index e576b2c2a7e..6f6af415086 100644 --- a/sql/item_strfunc.h +++ b/sql/item_strfunc.h @@ -18,7 +18,6 @@ /* This file defines all string functions */ #ifdef USE_PRAGMA_INTERFACE -#error PRAGMA #pragma interface /* gcc class implementation */ #endif From 913e2e12d2fa2095989b5ddbfc0fc97751da0cbf Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 11 May 2005 12:14:46 -0500 Subject: [PATCH 10/63] mysqldump.1.in: Remove obsolete section number. (Bug #10534) man/mysqldump.1.in: Remove obsolete section number. (Bug #10534) --- man/mysqldump.1.in | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/man/mysqldump.1.in b/man/mysqldump.1.in index 4d841117e59..0f581429af7 100644 --- a/man/mysqldump.1.in +++ b/man/mysqldump.1.in @@ -218,7 +218,8 @@ or ), mysqldump will create rows up to net_buffer_length length. If you increase this variable, you should also ensure that the max_allowed_packet variable in the MySQL server is bigger than the net_buffer_length. .SH EXAMPLES .TP -The most normal use of mysqldump is probably for making a backup of whole databases. See Mysql Manual section 21.2 Database Backups. +The most normal use of mysqldump is probably for making a backup of whole +databases. See the section on Database Backups in the MySQL Reference Manual. .TP mysqldump \-\-opt \fP\fIdatabase\fP > backup-file.sql .TP From cbbc4ff6a25accdd3e11a0e2719c2201d23a7b68 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 12 May 2005 17:49:34 +0200 Subject: [PATCH 11/63] If the system is under high load 'show full processlist' might report the process of the predecessing test case instead of the current test case. Shifting the command to the end of the current test case should avoid this problem. mysql-test/r/ps_grant.result: Updated result mysql-test/t/ps_grant.test: Shift ' show full processlist ' to the end of the test script --- mysql-test/r/ps_grant.result | 8 ++++---- mysql-test/t/ps_grant.test | 9 +++++---- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/mysql-test/r/ps_grant.result b/mysql-test/r/ps_grant.result index 4c60bb03165..0787f30c643 100644 --- a/mysql-test/r/ps_grant.result +++ b/mysql-test/r/ps_grant.result @@ -1,7 +1,3 @@ -prepare stmt4 from ' show full processlist '; -execute stmt4; -Id User Host db Command Time State Info -number root localhost test Query time NULL show full processlist test_sequence ------ grant/revoke/drop affects a parallel session test ------ show grants for second_user@localhost ; @@ -79,3 +75,7 @@ commit ; show grants for second_user@localhost ; ERROR 42000: There is no such grant defined for user 'second_user' on host 'localhost' drop database mysqltest; +prepare stmt4 from ' show full processlist '; +execute stmt4; +Id User Host db Command Time State Info +number root localhost test Query time NULL show full processlist diff --git a/mysql-test/t/ps_grant.test b/mysql-test/t/ps_grant.test index 06613072824..d6448dd152a 100644 --- a/mysql-test/t/ps_grant.test +++ b/mysql-test/t/ps_grant.test @@ -1,10 +1,6 @@ # Can't test grants with embedded server -- source include/not_embedded.inc -# Tested here simply so it is not tested with embedded server -prepare stmt4 from ' show full processlist '; ---replace_column 1 number 6 time 3 localhost -execute stmt4; let $type= 'MYISAM' ; @@ -116,4 +112,9 @@ show grants for second_user@localhost ; drop database mysqltest; +# Tested here simply so it is not tested with embedded server +prepare stmt4 from ' show full processlist '; +--replace_column 1 number 6 time 3 localhost +execute stmt4; + From c4c1979dbf26a07c7b7366636d238781bc894829 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 12 May 2005 18:18:37 +0200 Subject: [PATCH 12/63] - added a check for "u_int32_t" to configure.in that will define HAVE_U_INT32_T when available (needed to fix a double typedef in libedit) configure.in: - added a check for "u_int32_t" that will define HAVE_U_INT32_T when available (needed to fix a double typedef in libedit) --- configure.in | 1 + 1 file changed, 1 insertion(+) diff --git a/configure.in b/configure.in index 00ec737e76f..52f368f0c2d 100644 --- a/configure.in +++ b/configure.in @@ -1881,6 +1881,7 @@ fi fi AC_CHECK_TYPES([sigset_t, off_t], [], [], [#include ]) AC_CHECK_TYPES([size_t], [], [], [#include ]) +AC_CHECK_TYPES([u_int32_t]) MYSQL_PTHREAD_YIELD From c322164a2c9be990f260f4649c03a9fd1d10958f Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 12 May 2005 19:02:26 +0200 Subject: [PATCH 13/63] readline.c: Include readline/readline.h earlier, to avoid redifinition of term.h macros on AIX 5.2 search.c: FreeBSD needs to get 'off_t' defined cmd-line-utils/libedit/search.c: FreeBSD needs to get 'off_t' defined cmd-line-utils/libedit/readline.c: Include readline/readline.h earlier, to avoid redifinition of term.h macros on AIX 5.2 --- cmd-line-utils/libedit/readline.c | 2 +- cmd-line-utils/libedit/search.c | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/cmd-line-utils/libedit/readline.c b/cmd-line-utils/libedit/readline.c index 3a38e8a99ab..616b55a877e 100644 --- a/cmd-line-utils/libedit/readline.c +++ b/cmd-line-utils/libedit/readline.c @@ -70,10 +70,10 @@ extern char *alloca (); #include #include +#include "readline/readline.h" #include "el.h" #include "fcns.h" /* for EL_NUM_FCNS */ #include "histedit.h" -#include "readline/readline.h" /* for rl_complete() */ #define TAB '\r' diff --git a/cmd-line-utils/libedit/search.c b/cmd-line-utils/libedit/search.c index 848429e091b..850c5f27140 100644 --- a/cmd-line-utils/libedit/search.c +++ b/cmd-line-utils/libedit/search.c @@ -37,6 +37,7 @@ /* * search.c: History and character search functions */ +#include #include #if defined(REGEX) #include From 420e480e012997245855443d197afe7858e5b872 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 13 May 2005 10:04:35 +0200 Subject: [PATCH 14/63] - don't include sys.h directly in the autogenerated libedit source files - include config.h instead (compile fix for FreeBSD and AIX 4.3/5.2) cmd-line-utils/libedit/makelist.sh: - don't include sys.h directly in the autogenerated files - include config.h instead (compile fix for FreeBSD and AIX 4.3/5.2) --- cmd-line-utils/libedit/makelist.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd-line-utils/libedit/makelist.sh b/cmd-line-utils/libedit/makelist.sh index 502604791f5..f15b3d1eb9f 100644 --- a/cmd-line-utils/libedit/makelist.sh +++ b/cmd-line-utils/libedit/makelist.sh @@ -87,7 +87,7 @@ case $FLAG in cat $FILES | $AWK ' BEGIN { printf("/* Automatically generated file, do not edit */\n"); - printf("#include \"sys.h\"\n#include \"el.h\"\n"); + printf("#include \"config.h\"\n#include \"el.h\"\n"); printf("private const struct el_bindings_t el_func_help[] = {\n"); low = "abcdefghijklmnopqrstuvwxyz_"; high = "ABCDEFGHIJKLMNOPQRSTUVWXYZ_"; @@ -170,7 +170,7 @@ case $FLAG in cat $FILES | $AWK '/el_action_t/ { print $3 }' | sort | $AWK ' BEGIN { printf("/* Automatically generated file, do not edit */\n"); - printf("#include \"sys.h\"\n#include \"el.h\"\n"); + printf("#include \"config.h\"\n#include \"el.h\"\n"); printf("private const el_func_t el_func[] = {"); maxlen = 80; needn = 1; From 7c441dd1157c8ad525babb3fbbd43daff86a50ec Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 13 May 2005 11:11:50 +0300 Subject: [PATCH 15/63] Change create_field->offset to store offset from start of fields, independent of null bits. Count null_bits separately from field offsets and adjust them in case of primary key parts. (Previously a CREATE TABLE with a lot of null fields that was part of a primary key caused MySQL to wrongly count the number of bytes needed to store null bits) This is a more complete bug fix for #6236 mysql-test/r/alter_table.result: More test for bug #6236 (CREATE TABLE didn't properly count not null columns for primary keys) mysql-test/t/alter_table.test: More test for bug #6236 (CREATE TABLE didn't properly count not null columns for primary keys) sql/handler.h: Add counter for null fields sql/sql_table.cc: Change create_field->offset to store offset from start of fields, independent of null bits. Count null_bits separately from field offsets and adjust them in case of primary key parts. sql/unireg.cc: Change create_field->offset to store offset from start of fields, independent of null bits. Count null_bits separately from field offsets and adjust them in case of primary key parts. --- mysql-test/r/alter_table.result | 16 +++++++ mysql-test/t/alter_table.test | 17 +++++++ sql/handler.h | 1 + sql/sql_table.cc | 37 ++++++--------- sql/unireg.cc | 83 ++++++++++++++++++++------------- 5 files changed, 98 insertions(+), 56 deletions(-) diff --git a/mysql-test/r/alter_table.result b/mysql-test/r/alter_table.result index 80d3ef5e0a5..19d2ca4d6ed 100644 --- a/mysql-test/r/alter_table.result +++ b/mysql-test/r/alter_table.result @@ -406,3 +406,19 @@ t2 CREATE TABLE `t2` ( PRIMARY KEY (`a`) ) TYPE=MRG_MyISAM UNION=(t1) drop table if exists t1, t2; +create table t1 (a int, b int, c int, d int, e int, f int, g int, h int,i int, primary key (a,b,c,d,e,f,g,i,h)) engine=MyISAM; +insert into t1 (a) values(1); +show table status like 't1'; +Name Type Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Create_options Comment +t1 MyISAM Fixed 1 37 37 X X X X X X X X +alter table t1 modify a int; +show table status like 't1'; +Name Type Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Create_options Comment +t1 MyISAM Fixed 1 37 37 X X X X X X X X +drop table t1; +create table t1 (a int not null, b int not null, c int not null, d int not null, e int not null, f int not null, g int not null, h int not null,i int not null, primary key (a,b,c,d,e,f,g,i,h)) engine=MyISAM; +insert into t1 (a) values(1); +show table status like 't1'; +Name Type Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Create_options Comment +t1 MyISAM Fixed 1 37 37 X X X X X X X X +drop table t1; diff --git a/mysql-test/t/alter_table.test b/mysql-test/t/alter_table.test index c69f9aabae6..af0ec2bca16 100644 --- a/mysql-test/t/alter_table.test +++ b/mysql-test/t/alter_table.test @@ -267,3 +267,20 @@ flush tables; alter table t1 modify a varchar(10) not null; show create table t2; drop table if exists t1, t2; + +# The following is also part of bug #6236 (CREATE TABLE didn't properly count +# not null columns for primary keys) + +create table t1 (a int, b int, c int, d int, e int, f int, g int, h int,i int, primary key (a,b,c,d,e,f,g,i,h)) engine=MyISAM; +insert into t1 (a) values(1); +--replace_column 7 X 8 X 9 X 10 X 11 X 12 X 13 X 14 X +show table status like 't1'; +alter table t1 modify a int; +--replace_column 7 X 8 X 9 X 10 X 11 X 12 X 13 X 14 X +show table status like 't1'; +drop table t1; +create table t1 (a int not null, b int not null, c int not null, d int not null, e int not null, f int not null, g int not null, h int not null,i int not null, primary key (a,b,c,d,e,f,g,i,h)) engine=MyISAM; +insert into t1 (a) values(1); +--replace_column 7 X 8 X 9 X 10 X 11 X 12 X 13 X 14 X +show table status like 't1'; +drop table t1; diff --git a/sql/handler.h b/sql/handler.h index ac00050b777..e52164a871a 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -164,6 +164,7 @@ typedef struct st_ha_create_information SQL_LIST merge_list; enum db_type db_type; enum row_type row_type; + uint null_bits; /* NULL bits at start of record */ uint options; /* OR of HA_CREATE_ options */ uint raid_type,raid_chunks; uint merge_insert_method; diff --git a/sql/sql_table.cc b/sql/sql_table.cc index e065e5dfc58..e275f902abd 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -363,7 +363,7 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name, create_field *sql_field,*dup_field; int error= -1; uint db_options,field,null_fields,blob_columns; - ulong pos; + ulong record_offset; KEY *key_info,*key_info_buffer; KEY_PART_INFO *key_part_info; int auto_increment=0; @@ -418,10 +418,9 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name, } it2.rewind(); } - /* If fixed row records, we need one bit to check for deleted rows */ - if (!(db_options & HA_OPTION_PACK_RECORD)) - null_fields++; - pos=(null_fields+7)/8; + + /* record_offset will be increased with 'length-of-null-bits' later */ + record_offset= 0; it.rewind(); while ((sql_field=it++)) @@ -478,10 +477,10 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name, } if (!(sql_field->flags & NOT_NULL_FLAG)) sql_field->pack_flag|=FIELDFLAG_MAYBE_NULL; - sql_field->offset= pos; + sql_field->offset= record_offset; if (MTYP_TYPENR(sql_field->unireg_check) == Field::NEXT_NUMBER) auto_increment++; - pos+=sql_field->pack_length; + record_offset+= sql_field->pack_length; } if (auto_increment > 1) { @@ -578,11 +577,12 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name, column->field_name); DBUG_RETURN(-1); } - /* for fulltext keys keyseg length is 1 for blobs (it's ignored in - ft code anyway, and 0 (set to column width later) for char's. - it has to be correct col width for char's, as char data are not - prefixed with length (unlike blobs, where ft code takes data length - from a data prefix, ignoring column->length). + /* + for fulltext keys keyseg length is 1 for blobs (it's ignored in + ft code anyway, and 0 (set to column width later) for char's. + it has to be correct col width for char's, as char data are not + prefixed with length (unlike blobs, where ft code takes data length + from a data prefix, ignoring column->length). */ if (key->type == Key::FULLTEXT) column->length=test(f_is_blob(sql_field->pack_flag)); @@ -609,6 +609,7 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name, /* Implicitly set primary key fields to NOT NULL for ISO conf. */ sql_field->flags|= NOT_NULL_FLAG; sql_field->pack_flag&= ~FIELDFLAG_MAYBE_NULL; + null_fields--; } else key_info->flags|= HA_NULL_PART_KEY; @@ -765,6 +766,7 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name, if (thd->sql_mode & MODE_NO_DIR_IN_CREATE) create_info->data_file_name= create_info->index_file_name= 0; create_info->table_options=db_options; + create_info->null_bits= null_fields; if (rea_create_table(path, create_info, fields, key_count, key_info_buffer)) @@ -1829,17 +1831,6 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name, cfield->pack_length <= key_part_length)) key_part_length=0; // Use whole field } - if (!(cfield->flags & NOT_NULL_FLAG)) - { - if (key_type == Key::PRIMARY) - { - /* Implicitly set primary key fields to NOT NULL for ISO conf. */ - cfield->flags|= NOT_NULL_FLAG; - cfield->pack_flag&= ~FIELDFLAG_MAYBE_NULL; - } - else - key_info->flags|= HA_NULL_PART_KEY; - } key_parts.push_back(new key_part_spec(cfield->field_name, key_part_length)); } diff --git a/sql/unireg.cc b/sql/unireg.cc index 218ea6b5b8d..f81370539c6 100644 --- a/sql/unireg.cc +++ b/sql/unireg.cc @@ -32,18 +32,21 @@ static uchar * pack_screens(List &create_fields, uint *info_length, uint *screens, bool small_file); -static uint pack_keys(uchar *keybuff,uint key_count, KEY *key_info); +static uint pack_keys(uchar *keybuff,uint key_count, KEY *key_info, + ulong data_offset); static bool pack_header(uchar *forminfo, enum db_type table_type, List &create_fields, uint info_length, uint screens, uint table_options, - handler *file); + ulong data_offset, handler *file); static uint get_interval_id(uint *int_count,List &create_fields, create_field *last_field); -static bool pack_fields(File file, List &create_fields); +static bool pack_fields(File file, List &create_fields, + ulong data_offset); static bool make_empty_rec(int file, enum db_type table_type, uint table_options, List &create_fields, - uint reclength,uint null_fields); + uint reclength, uint null_fields, + ulong data_offset); int rea_create_table(my_string file_name, @@ -53,7 +56,7 @@ int rea_create_table(my_string file_name, { uint reclength,info_length,screens,key_info_length,maxlength,null_fields; File file; - ulong filepos; + ulong filepos, data_offset; uchar fileinfo[64],forminfo[288],*keybuff; TYPELIB formnames; uchar *screen_buff; @@ -64,8 +67,15 @@ int rea_create_table(my_string file_name, if (!(screen_buff=pack_screens(create_fields,&info_length,&screens,0))) DBUG_RETURN(1); db_file=get_new_handler((TABLE*) 0, create_info->db_type); + + /* If fixed row records, we need one bit to check for deleted rows */ + if (!(create_info->table_options & HA_OPTION_PACK_RECORD)) + create_info->null_bits++; + data_offset= (create_info->null_bits + 7) / 8; + if (pack_header(forminfo, create_info->db_type,create_fields,info_length, - screens, create_info->table_options, db_file)) + screens, create_info->table_options, + data_offset, db_file)) { NET *net=my_pthread_getspecific_ptr(NET*,THR_NET); my_free((gptr) screen_buff,MYF(0)); @@ -77,7 +87,7 @@ int rea_create_table(my_string file_name, if (!(screen_buff=pack_screens(create_fields,&info_length,&screens,1))) DBUG_RETURN(1); if (pack_header(forminfo, create_info->db_type, create_fields,info_length, - screens, create_info->table_options, db_file)) + screens, create_info->table_options, data_offset, db_file)) { my_free((gptr) screen_buff,MYF(0)); DBUG_RETURN(1); @@ -95,7 +105,7 @@ int rea_create_table(my_string file_name, uint key_buff_length=uint2korr(fileinfo+14); keybuff=(uchar*) my_alloca(key_buff_length); - key_info_length=pack_keys(keybuff,keys,key_info); + key_info_length= pack_keys(keybuff, keys, key_info, data_offset); VOID(get_form_pos(file,fileinfo,&formnames)); if (!(filepos=make_new_entry(file,fileinfo,&formnames,""))) goto err; @@ -117,13 +127,13 @@ int rea_create_table(my_string file_name, (ulong) uint2korr(fileinfo+6)+ (ulong) key_buff_length, MY_SEEK_SET,MYF(0))); if (make_empty_rec(file,create_info->db_type,create_info->table_options, - create_fields,reclength,null_fields)) + create_fields,reclength, null_fields, data_offset)) goto err; VOID(my_seek(file,filepos,MY_SEEK_SET,MYF(0))); if (my_write(file,(byte*) forminfo,288,MYF_RW) || my_write(file,(byte*) screen_buff,info_length,MYF_RW) || - pack_fields(file,create_fields)) + pack_fields(file, create_fields, data_offset)) goto err; #ifdef HAVE_CRYPTED_FRM @@ -248,7 +258,8 @@ static uchar * pack_screens(List &create_fields, /* Pack keyinfo and keynames to keybuff for save in form-file. */ -static uint pack_keys(uchar *keybuff,uint key_count,KEY *keyinfo) +static uint pack_keys(uchar *keybuff, uint key_count, KEY *keyinfo, + ulong data_offset) { uint key_parts,length; uchar *pos, *keyname_pos, *key_alg_pos; @@ -273,10 +284,13 @@ static uint pack_keys(uchar *keybuff,uint key_count,KEY *keyinfo) key_part++) { - DBUG_PRINT("loop",("field: %d startpos: %ld length: %ld", - key_part->fieldnr,key_part->offset,key_part->length)); + uint offset; + DBUG_PRINT("loop",("field: %d startpos: %lu length: %ld", + key_part->fieldnr, key_part->offset + data_offset, + key_part->length)); int2store(pos,key_part->fieldnr+1+FIELD_NAME_USED); - int2store(pos+2,key_part->offset+1); + offset= (uint) (key_part->offset+data_offset+1); + int2store(pos+2, offset); pos[4]=0; // Sort order int2store(pos+5,key_part->key_type); int2store(pos+7,key_part->length); @@ -316,8 +330,8 @@ static uint pack_keys(uchar *keybuff,uint key_count,KEY *keyinfo) static bool pack_header(uchar *forminfo, enum db_type table_type, List &create_fields, - uint info_length, uint screens,uint table_options, - handler *file) + uint info_length, uint screens, uint table_options, + ulong data_offset, handler *file) { uint length,int_count,int_length,no_empty, int_parts, time_stamp_pos,null_fields; @@ -351,10 +365,10 @@ static bool pack_header(uchar *forminfo, enum db_type table_type, if ((MTYP_TYPENR(field->unireg_check) == Field::TIMESTAMP_FIELD || f_packtype(field->pack_flag) == (int) FIELD_TYPE_TIMESTAMP) && !time_stamp_pos) - time_stamp_pos=(int) field->offset+1; + time_stamp_pos= (uint) field->offset+ (uint) data_offset + 1; length=field->pack_length; - if ((int) field->offset+length > reclength) - reclength=(int) field->offset+length; + if ((uint) field->offset+ (uint) data_offset+ length > reclength) + reclength=(uint) (field->offset+ data_offset + length); n_length+= (ulong) strlen(field->field_name)+1; field->interval_id=0; if (field->interval) @@ -440,7 +454,8 @@ static uint get_interval_id(uint *int_count,List &create_fields, /* Save fields, fieldnames and intervals */ -static bool pack_fields(File file,List &create_fields) +static bool pack_fields(File file, List &create_fields, + ulong data_offset) { reg2 uint i; uint int_count; @@ -455,11 +470,13 @@ static bool pack_fields(File file,List &create_fields) int_count=0; while ((field=it++)) { + uint recpos; buff[0]= (uchar) field->row; buff[1]= (uchar) field->col; buff[2]= (uchar) field->sc_length; buff[3]= (uchar) field->length; - uint recpos=(uint) field->offset+1; + /* The +1 is here becasue the col offset in .frm file have offset 1 */ + recpos= field->offset+1 + (uint) data_offset; int2store(buff+4,recpos); int2store(buff+6,field->pack_flag); int2store(buff+8,field->unireg_check); @@ -519,11 +536,12 @@ static bool pack_fields(File file,List &create_fields) static bool make_empty_rec(File file,enum db_type table_type, uint table_options, List &create_fields, - uint reclength, uint null_fields) + uint reclength, uint null_fields, + ulong data_offset) { int error; Field::utype type; - uint firstpos,null_count,null_length; + uint firstpos,null_count; uchar *buff,*null_pos; TABLE table; create_field *field; @@ -547,17 +565,16 @@ static bool make_empty_rec(File file,enum db_type table_type, firstpos=reclength; null_count=0; if (!(table_options & HA_OPTION_PACK_RECORD)) - { - null_fields++; // Need one bit for delete mark - null_count++; - } - bfill(buff,(null_length=(null_fields+7)/8),255); + null_count++; // Need one bit for delete mark + DBUG_ASSERT(data_offset == ((null_fields + null_count + 7) / 8)); + bfill(buff, (uint) data_offset, 255); null_pos=buff; List_iterator it(create_fields); while ((field=it++)) { - Field *regfield=make_field((char*) buff+field->offset,field->length, + Field *regfield=make_field((char*) buff+field->offset + data_offset, + field->length, field->flags & NOT_NULL_FLAG ? 0: null_pos+null_count/8, 1 << (null_count & 7), @@ -570,9 +587,9 @@ static bool make_empty_rec(File file,enum db_type table_type, if (!(field->flags & NOT_NULL_FLAG)) null_count++; - if ((uint) field->offset < firstpos && + if ((uint) (field->offset + data_offset) < firstpos && regfield->type() != FIELD_TYPE_NULL) - firstpos= field->offset; + firstpos= field->offset + data_offset; type= (Field::utype) MTYP_TYPENR(field->unireg_check); @@ -596,8 +613,8 @@ static bool make_empty_rec(File file,enum db_type table_type, } /* Fill not used startpos */ - bfill((byte*) buff+null_length,firstpos-null_length,255); - error=(int) my_write(file,(byte*) buff,(uint) reclength,MYF_RW); + bfill((byte*) buff+data_offset, firstpos- (uint) data_offset, 255); + error=(int) my_write(file,(byte*) buff, (uint) reclength,MYF_RW); my_free((gptr) buff,MYF(MY_FAE)); delete handler; DBUG_RETURN(error); From 89ef3990d93762ddf24af9f4c20a63afb42e8faa Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 13 May 2005 11:59:17 +0200 Subject: [PATCH 16/63] readline.h: Include for CodeWarrior and CTRL define cmd-line-utils/libedit/readline/readline.h: Include for CodeWarrior and CTRL define --- cmd-line-utils/libedit/readline/readline.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd-line-utils/libedit/readline/readline.h b/cmd-line-utils/libedit/readline/readline.h index 902179c208a..c43f71fb51d 100644 --- a/cmd-line-utils/libedit/readline/readline.h +++ b/cmd-line-utils/libedit/readline/readline.h @@ -73,7 +73,7 @@ typedef KEYMAP_ENTRY *Keymap; #ifndef CTRL #include -#ifdef __GLIBC__ +#if defined(__GLIBC__) || defined(__MWERKS__) #include #endif #ifndef CTRL From 2a695127a65a321b98f0db6f1b113af3403376e3 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 13 May 2005 14:04:32 +0300 Subject: [PATCH 17/63] Fixes during review mysql-test/r/select.result: Better error message mysql-test/t/select.test: Better error message sql/hostname.cc: Join identical code sql/sql_yacc.yy: Combine code (and get a better error message) strings/ctype-ucs2.c: Cast pointer differencess --- mysql-test/r/select.result | 4 ++-- mysql-test/t/select.test | 4 ++-- sql/hostname.cc | 4 ++-- sql/sql_yacc.yy | 29 ++++++++++------------------- strings/ctype-ucs2.c | 8 +++++--- 5 files changed, 21 insertions(+), 28 deletions(-) diff --git a/mysql-test/r/select.result b/mysql-test/r/select.result index 50300ed9b76..387e7eff693 100644 --- a/mysql-test/r/select.result +++ b/mysql-test/r/select.result @@ -2451,7 +2451,7 @@ a select distinct distinct * from t1; a select all distinct * from t1; -ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'distinct * from t1' at line 1 +ERROR HY000: Incorrect usage of ALL and DISTINCT select distinct all * from t1; -ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'all * from t1' at line 1 +ERROR HY000: Incorrect usage of ALL and DISTINCT drop table t1; diff --git a/mysql-test/t/select.test b/mysql-test/t/select.test index 6d6d5f6b6e1..a46522c1510 100644 --- a/mysql-test/t/select.test +++ b/mysql-test/t/select.test @@ -1987,9 +1987,9 @@ drop table t1; create table t1 (a int(11)); select all all * from t1; select distinct distinct * from t1; ---error 1064 +--error 1221 select all distinct * from t1; ---error 1064 +--error 1221 select distinct all * from t1; drop table t1; diff --git a/sql/hostname.cc b/sql/hostname.cc index ec5c6f29a27..39223556024 100644 --- a/sql/hostname.cc +++ b/sql/hostname.cc @@ -209,8 +209,8 @@ my_string ip_to_hostname(struct in_addr *in, uint *errors) DBUG_PRINT("error",("gethostbyaddr returned %d",errno)); if (errno == HOST_NOT_FOUND || errno == NO_DATA) - add_wrong_ip(in); /* only cache negative responses, not failures */ - + goto add_wrong_ip_and_return; + /* Failure, don't cache responce */ DBUG_RETURN(0); } if (!hp->h_name[0]) // Don't allow empty hostnames diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index abe7a716a69..28d3560e5f0 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -2467,7 +2467,14 @@ select_from: select_options: /* empty*/ - | select_option_list; + | select_option_list + { + if (test_all_bits(Select->options, SELECT_ALL | SELECT_DISTINCT)) + { + net_printf(Lex->thd, ER_WRONG_USAGE, "ALL", "DISTINCT"); + YYABORT; + } + } select_option_list: select_option_list select_option @@ -2481,15 +2488,7 @@ select_option: YYABORT; Lex->lock_option= TL_READ_HIGH_PRIORITY; } - | DISTINCT - { - if (Select->options & SELECT_ALL) - { - yyerror(ER(ER_SYNTAX_ERROR)); - YYABORT; - } - Select->options|= SELECT_DISTINCT; - } + | DISTINCT { Select->options|= SELECT_DISTINCT; } | SQL_SMALL_RESULT { Select->options|= SELECT_SMALL_RESULT; } | SQL_BIG_RESULT { Select->options|= SELECT_BIG_RESULT; } | SQL_BUFFER_RESULT @@ -2509,15 +2508,7 @@ select_option: { Lex->select_lex.options|= OPTION_TO_QUERY_CACHE; } - | ALL - { - if (Select->options & SELECT_DISTINCT) - { - yyerror(ER(ER_SYNTAX_ERROR)); - YYABORT; - } - Select->options|= SELECT_ALL; - } + | ALL { Select->options|= SELECT_ALL; } ; select_lock_type: diff --git a/strings/ctype-ucs2.c b/strings/ctype-ucs2.c index f12cfe3256e..12c1ae905cf 100644 --- a/strings/ctype-ucs2.c +++ b/strings/ctype-ucs2.c @@ -1251,7 +1251,7 @@ static uint my_numchars_ucs2(CHARSET_INFO *cs __attribute__((unused)), const char *b, const char *e) { - return (e-b)/2; + return (uint) (e-b)/2; } @@ -1261,7 +1261,8 @@ uint my_charpos_ucs2(CHARSET_INFO *cs __attribute__((unused)), const char *e __attribute__((unused)), uint pos) { - return pos > e - b ? e - b + 2 : pos * 2; + uint string_length= (uint) (e - b); + return pos > string_length ? string_length + 2 : pos * 2; } @@ -1270,7 +1271,8 @@ uint my_well_formed_len_ucs2(CHARSET_INFO *cs __attribute__((unused)), const char *b, const char *e, uint nchars, int *error) { - uint nbytes= (e-b) & ~ (uint)1; + /* Ensure string length is dividable with 2 */ + uint nbytes= ((uint) (e-b)) & ~(uint) 1; *error= 0; nchars*= 2; return min(nbytes, nchars); From 29f3f4a27fd2afa4a7fc57aaba86bb102e7cebe1 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 13 May 2005 15:06:11 +0200 Subject: [PATCH 18/63] added function mysql_set_character_set (reviewed by Monty) as a work around for #8317 and #9637 This function sends SET NAMES command and changes mysql->charset so mysql_real_escape_string will work as expected. libmysql/libmysql.def: added new function mysql_set_character_set --- libmysql/libmysql.c | 30 ++++++++++++++++++++++++++++++ libmysql/libmysql.def | 1 + 2 files changed, 31 insertions(+) diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index c663dab7476..4c9f06df38e 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -1509,6 +1509,36 @@ const char * STDCALL mysql_character_set_name(MYSQL *mysql) return mysql->charset->csname; } +int STDCALL mysql_set_character_set(MYSQL *mysql, char *cs_name) +{ + struct charset_info_st *cs; + const char *save_csdir = charsets_dir; + + if (mysql->options.charset_dir) + charsets_dir = mysql->options.charset_dir; + + if ( (cs = get_charset_by_csname(cs_name, MY_CS_PRIMARY, MYF(0))) ) + { + char buff[MY_CS_NAME_SIZE + 10]; + charsets_dir = save_csdir; + sprintf(buff, "SET NAMES %s", cs_name); + if (!mysql_query(mysql, buff)) { + mysql->charset = cs; + } + } else { + char cs_dir_name[FN_REFLEN]; + get_charsets_dir(cs_dir_name); + mysql->net.last_errno=CR_CANT_READ_CHARSET; + strmov(mysql->net.sqlstate, unknown_sqlstate); + my_snprintf(mysql->net.last_error, sizeof(mysql->net.last_error)-1, + ER(mysql->net.last_errno), + cs_name, + cs_dir_name); + + } + charsets_dir = save_csdir; + return mysql->net.last_errno; +} uint STDCALL mysql_thread_safe(void) { diff --git a/libmysql/libmysql.def b/libmysql/libmysql.def index c5579e9ec2b..57c97ab08ee 100644 --- a/libmysql/libmysql.def +++ b/libmysql/libmysql.def @@ -146,4 +146,5 @@ EXPORTS mysql_rpl_query_type mysql_slave_query mysql_embedded + mysql_set_character_set get_defaults_files From 92cb62c86fa68bacd5ab58703a704bd4d290ac72 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 13 May 2005 15:54:35 +0200 Subject: [PATCH 19/63] added prototype for mysql_set_character_set function --- include/mysql.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/mysql.h b/include/mysql.h index d8a56126756..ab61fe694d9 100644 --- a/include/mysql.h +++ b/include/mysql.h @@ -381,6 +381,7 @@ unsigned int STDCALL mysql_warning_count(MYSQL *mysql); const char * STDCALL mysql_info(MYSQL *mysql); unsigned long STDCALL mysql_thread_id(MYSQL *mysql); const char * STDCALL mysql_character_set_name(MYSQL *mysql); +int STDCALL mysql_set_character_set(MYSQL *mysql, char *csname); MYSQL * STDCALL mysql_init(MYSQL *mysql); my_bool STDCALL mysql_ssl_set(MYSQL *mysql, const char *key, From c4a1210fd4ef4a3bab2f5dddbdc8ededeb33a307 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 13 May 2005 18:37:22 +0300 Subject: [PATCH 20/63] row0mysql.c: InnoDB wrongly complained in the .err log that MySQL is trying to drop a non-existent table, if tablespace ran out (Bug #10607) innobase/row/row0mysql.c: InnoDB wrongly complained in the .err log that MySQL is trying to drop a non-existent table, if tablespace ran out (Bug #10607) --- innobase/row/row0mysql.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/innobase/row/row0mysql.c b/innobase/row/row0mysql.c index 9410f2ce7cc..280c306cce4 100644 --- a/innobase/row/row0mysql.c +++ b/innobase/row/row0mysql.c @@ -1606,10 +1606,18 @@ row_create_table_for_mysql( trx_general_rollback_for_mysql(trx, FALSE, NULL); if (err == DB_OUT_OF_FILE_SPACE) { - fputs("InnoDB: Warning: cannot create table ", stderr); + ut_print_timestamp(stderr); + + fputs(" InnoDB: Warning: cannot create table ", + stderr); ut_print_name(stderr, trx, table->name); fputs(" because tablespace full\n", stderr); - row_drop_table_for_mysql(table->name, trx, FALSE); + + if (dict_table_get_low(table->name)) { + + row_drop_table_for_mysql(table->name, trx, + FALSE); + } } else if (err == DB_DUPLICATE_KEY) { ut_print_timestamp(stderr); From c3f73a428193150df234881352875ca3383b9740 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 13 May 2005 21:43:26 +0200 Subject: [PATCH 21/63] sql/ha_blackhole.cc bug#10175 - blackhole.test hangs with "Warning: prev link 1 didn't point at previous lock at read: read lock with no write locks" sql/sql_base.cc libmysqld/examples/mysql.cc linking problem sql/ha_blackhole.cc: bug#10175 - blackhole.test hangs with "Warning: prev link 1 didn't point at previous lock at read: read lock with no write locks" sql/sql_base.cc: libmysqld/examples/mysql.cc linking problem --- sql/ha_blackhole.cc | 3 ++- sql/sql_base.cc | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/sql/ha_blackhole.cc b/sql/ha_blackhole.cc index 7c6e7cb56b6..c9c94b3a9d7 100644 --- a/sql/ha_blackhole.cc +++ b/sql/ha_blackhole.cc @@ -129,8 +129,9 @@ THR_LOCK_DATA **ha_blackhole::store_lock(THD *thd, THR_LOCK_DATA **to, enum thr_lock_type lock_type) { + if (lock_type != TL_IGNORE && lock.type == TL_UNLOCK) + lock.type=lock_type; *to++= &lock; - return to; } diff --git a/sql/sql_base.cc b/sql/sql_base.cc index c580842ce06..e86362c857b 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -2522,7 +2522,7 @@ bool get_key_map_from_key_list(key_map *map, TABLE *table, if ((pos= find_type(&table->keynames, name->ptr(), name->length(), 1)) <= 0) { - my_error(ER_KEY_COLUMN_DOES_NOT_EXITS, MYF(0), name->c_ptr(), + my_error(ER_KEY_COLUMN_DOES_NOT_EXITS, MYF(0), name->c_ptr_safe(), table->real_name); map->set_all(); return 1; From cdd6bc9bfeb1a82e7c7cfd8880f8e014ca5d9ff8 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 13 May 2005 23:08:29 +0300 Subject: [PATCH 22/63] Fixed wrong buffer usage for auto-increment key with blob part that caused CHECK TABLE to report that the table was wrong. (Bug #10045) myisam/mi_key.c: Fixed wrong buffer usage for auto-increment key with blob part that caused CHECK TABLE to report that the table was wrong. (Bug #10045) mysql-test/r/auto_increment.result: New test case mysql-test/t/auto_increment.test: New test case --- myisam/mi_key.c | 31 ++++++++++++++++++++---------- mysql-test/r/auto_increment.result | 14 ++++++++++++++ mysql-test/t/auto_increment.test | 12 ++++++++++++ 3 files changed, 47 insertions(+), 10 deletions(-) diff --git a/myisam/mi_key.c b/myisam/mi_key.c index 1688ab74823..06571c570e1 100644 --- a/myisam/mi_key.c +++ b/myisam/mi_key.c @@ -255,8 +255,25 @@ uint _mi_pack_key(register MI_INFO *info, uint keynr, uchar *key, uchar *old, } /* _mi_pack_key */ - /* Put a key in record */ - /* Used when only-keyread is wanted */ + +/* + Store found key in record + + SYNOPSIS + _mi_put_key_in_record() + info MyISAM handler + keynr Key number that was used + record Store key here + + Last read key is in info->lastkey + + NOTES + Used when only-keyread is wanted + + RETURN + 0 ok + 1 error +*/ static int _mi_put_key_in_record(register MI_INFO *info, uint keynr, byte *record) @@ -267,14 +284,8 @@ static int _mi_put_key_in_record(register MI_INFO *info, uint keynr, byte *blob_ptr; DBUG_ENTER("_mi_put_key_in_record"); - if (info->s->base.blobs && info->s->keyinfo[keynr].flag & HA_VAR_LENGTH_KEY) - { - if (!(blob_ptr= - mi_alloc_rec_buff(info, info->s->keyinfo[keynr].keylength, - &info->rec_buff))) - goto err; - } - key=(byte*) info->lastkey; + blob_ptr= info->lastkey2; /* Place to put blob parts */ + key=(byte*) info->lastkey; /* KEy that was read */ key_end=key+info->lastkey_length; for (keyseg=info->s->keyinfo[keynr].seg ; keyseg->type ;keyseg++) { diff --git a/mysql-test/r/auto_increment.result b/mysql-test/r/auto_increment.result index 2d6b058d9c5..9345c029127 100644 --- a/mysql-test/r/auto_increment.result +++ b/mysql-test/r/auto_increment.result @@ -131,3 +131,17 @@ a 1 2 drop table t1; +CREATE TABLE t1 ( a INT AUTO_INCREMENT, b BLOB, PRIMARY KEY (a,b(10))); +INSERT INTO t1 (b) VALUES ('aaaa'); +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +INSERT INTO t1 (b) VALUES (''); +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +INSERT INTO t1 (b) VALUES ('bbbb'); +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +DROP TABLE IF EXISTS t1; diff --git a/mysql-test/t/auto_increment.test b/mysql-test/t/auto_increment.test index c26983b5eec..e699415a838 100644 --- a/mysql-test/t/auto_increment.test +++ b/mysql-test/t/auto_increment.test @@ -89,3 +89,15 @@ select last_insert_id(); insert into t1 values (NULL); select * from t1; drop table t1; + +# +# BUG #10045: Problem with composite AUTO_INCREMENT + BLOB key + +CREATE TABLE t1 ( a INT AUTO_INCREMENT, b BLOB, PRIMARY KEY (a,b(10))); +INSERT INTO t1 (b) VALUES ('aaaa'); +CHECK TABLE t1; +INSERT INTO t1 (b) VALUES (''); +CHECK TABLE t1; +INSERT INTO t1 (b) VALUES ('bbbb'); +CHECK TABLE t1; +DROP TABLE IF EXISTS t1; From f8bb8923143b54904dfceb19208ad76ac6c52b46 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 14 May 2005 00:21:53 +0200 Subject: [PATCH 23/63] Fix for BUG#9622: Make index statistics collection in MyISAM behave the same way in ALTER TABLE ... ENABLE KEYS, ANALYZE TABLE and after bulk insert: now statistics collection always assumes NULLs are inequal. mysql-test/r/myisam.result: Testcase for BUG#9622 mysql-test/t/myisam.test: Testcase for BUG#9622 --- myisam/mi_check.c | 36 +++++++++++++++++++++++++++++++++++- mysql-test/r/myisam.result | 14 ++++++++++++++ mysql-test/t/myisam.test | 15 +++++++++++++++ 3 files changed, 64 insertions(+), 1 deletion(-) diff --git a/myisam/mi_check.c b/myisam/mi_check.c index f710d3a8454..d59c9b9c697 100644 --- a/myisam/mi_check.c +++ b/myisam/mi_check.c @@ -3243,6 +3243,9 @@ static int sort_key_write(MI_SORT_PARAM *sort_param, const void *a) cmp=ha_key_cmp(sort_param->seg,sort_info->key_block->lastkey, (uchar*) a, USE_WHOLE_KEY,SEARCH_FIND | SEARCH_UPDATE, &diff_pos); + ha_key_cmp(sort_param->seg,sort_info->key_block->lastkey, + (uchar*) a, USE_WHOLE_KEY,SEARCH_FIND | SEARCH_NULL_ARE_NOT_EQUAL, + &diff_pos); sort_param->unique[diff_pos-1]++; } else @@ -3955,7 +3958,38 @@ void update_auto_increment_key(MI_CHECK *param, MI_INFO *info, return; } - /* calculate unique keys for each part key */ + +/* + Update statistics for each part of an index + + SYNOPSIS + update_key_parts() + keyinfo Index information (only key->keysegs used) + rec_per_key_part OUT Store statistics here + unique IN Array of #distinct values collected over index + run. + records Number of records in the table + + NOTES + Unique is an array: + unique[0]= (#different values of {keypart1}) - 1 + unique[1]= (#different values of {keypart2,keypart1} tuple) - unique[0] - 1 + ... + Here we assume that NULL != NULL (see SEARCH_NULL_ARE_NOT_EQUAL). The + 'unique' array is collected in one sequential scan through the entire + index. This is done in two places: in chk_index() and in sort_key_write(). + + Output is an array: + rec_per_key_part[k] = + = E(#records in the table such that keypart_1=c_1 AND ... AND + keypart_k=c_k for arbitrary constants c_1 ... c_k) + + = {assuming that values have uniform distribution and index contains all + tuples from the domain (or that {c_1, ..., c_k} tuple is choosen from + index tuples} + + = #tuples-in-the-index / #distinct-tuples-in-the-index. +*/ void update_key_parts(MI_KEYDEF *keyinfo, ulong *rec_per_key_part, ulonglong *unique, ulonglong records) diff --git a/mysql-test/r/myisam.result b/mysql-test/r/myisam.result index 5b69ce68a79..4def82e5752 100644 --- a/mysql-test/r/myisam.result +++ b/mysql-test/r/myisam.result @@ -581,3 +581,17 @@ check table t1; Table Op Msg_type Msg_text test.t1 check status OK drop table t1; +create table t1 (a int, key(a)); +insert into t1 values (1),(2),(3),(4),(NULL),(NULL),(NULL),(NULL); +analyze table t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +show keys from t1; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment +t1 1 a 1 a A 8 NULL NULL YES BTREE +alter table t1 disable keys; +alter table t1 enable keys; +show keys from t1; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment +t1 1 a 1 a A 8 NULL NULL YES BTREE +drop table t1; diff --git a/mysql-test/t/myisam.test b/mysql-test/t/myisam.test index 46a6499adad..7d7985fd8ac 100644 --- a/mysql-test/t/myisam.test +++ b/mysql-test/t/myisam.test @@ -560,3 +560,18 @@ update t1 set c2='A B' where c1=2; check table t1; drop table t1; + +# BUG#9622 - ANALYZE TABLE and ALTER TABLE .. ENABLE INDEX produce +# different statistics on the same table with NULL values. +create table t1 (a int, key(a)); + +insert into t1 values (1),(2),(3),(4),(NULL),(NULL),(NULL),(NULL); +analyze table t1; +show keys from t1; + +alter table t1 disable keys; +alter table t1 enable keys; +show keys from t1; + +drop table t1; + From 752372f62626321f60563c6c825424801b5a7f60 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 14 May 2005 02:28:10 +0400 Subject: [PATCH 24/63] Fix wrong format specifier in error messages. Not to be pushed into 5.0 as there it's fixed differently (in the new format of error messages) sql/share/danish/errmsg.txt: Fix wrong format specifier in an error message. sql/share/serbian/errmsg.txt: Fix wrong format specifier in an error message. --- sql/share/danish/errmsg.txt | 2 +- sql/share/serbian/errmsg.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sql/share/danish/errmsg.txt b/sql/share/danish/errmsg.txt index 384625f7112..4983d39714a 100644 --- a/sql/share/danish/errmsg.txt +++ b/sql/share/danish/errmsg.txt @@ -262,7 +262,7 @@ character-set=latin1 "Key reference and table reference don't match", "Operand should contain %d column(s)", "Subquery returns more than 1 row", -"Unknown prepared statement handler (%ld) given to %s", +"Unknown prepared statement handler (%.*s) given to %s", "Help database is corrupt or does not exist", "Cyclic reference on subqueries", "Converting column '%s' from %s to %s", diff --git a/sql/share/serbian/errmsg.txt b/sql/share/serbian/errmsg.txt index accf1926abb..adda7d7cf53 100644 --- a/sql/share/serbian/errmsg.txt +++ b/sql/share/serbian/errmsg.txt @@ -252,7 +252,7 @@ character-set=cp1250 "Key reference and table reference don't match", "Operand should contain %d column(s)", "Subquery returns more than 1 row", -"Unknown prepared statement handler (%ld) given to %s", +"Unknown prepared statement handler (%.*s) given to %s", "Help database is corrupt or does not exist", "Cyclic reference on subqueries", "Converting column '%s' from %s to %s", From ba3540cc6991c49e0f43501e600018896b5e0dcb Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 14 May 2005 02:31:26 +0400 Subject: [PATCH 25/63] Fix a valgrind warning: memcpy does not allow its arguments to overlap. --- libmysql/libmysql.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index 4c9f06df38e..3fcdc6bdc4d 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -3944,9 +3944,12 @@ my_bool STDCALL mysql_stmt_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *bind) /* We only need to check that stmt->field_count - if it is not null stmt->bind was initialized in mysql_stmt_prepare - */ + stmt->bind overlaps with bind if mysql_stmt_bind_param + is called from mysql_stmt_store_result. + */ - memcpy((char*) stmt->bind, (char*) bind, sizeof(MYSQL_BIND) * bind_count); + if (stmt->bind != bind) + memcpy((char*) stmt->bind, (char*) bind, sizeof(MYSQL_BIND) * bind_count); for (param= stmt->bind, end= param + bind_count, field= stmt->fields ; param < end ; From 2059908b9ce2bde6848f247c4ee4a72a7e42738a Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 14 May 2005 16:24:36 +0300 Subject: [PATCH 26/63] After merge fixes BitKeeper/deleted/.del-outfile2.result~fb702ee2518d8e6d: Delete: mysql-test/r/outfile2.result libmysql/libmysql.c: Fix indentation for new function mysql_set_character_set() mysql-test/r/alter_table.result: Fix test to be in same order as in 4.0 mysql-test/r/innodb.result: After merge fix mysql-test/r/insert_update.result: Add extra test for insert into ... on duplicate key upate mysql-test/r/outfile.result: After merge fix mysql-test/t/alter_table.test: Fix test to be in same order as in 4.0 mysql-test/t/insert_update.test: Add extra test for insert into ... on duplicate key upate mysql-test/t/outfile.test: After merge fix sql/item_func.cc: After merge fix sql/sql_table.cc: After merge fix --- libmysql/libmysql.c | 31 ++-- mysql-test/r/alter_table.result | 225 +++++++++++++++--------------- mysql-test/r/innodb.result | 2 +- mysql-test/r/insert_update.result | 9 +- mysql-test/r/outfile.result | Bin 683 -> 959 bytes mysql-test/r/outfile2.result | 10 -- mysql-test/t/alter_table.test | 102 +++++++------- mysql-test/t/insert_update.test | 6 +- mysql-test/t/outfile.test | 1 + sql/item_func.cc | 2 +- sql/sql_table.cc | 2 +- 11 files changed, 200 insertions(+), 190 deletions(-) delete mode 100644 mysql-test/r/outfile2.result diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index 4c9f06df38e..ff90cfb6007 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -1509,37 +1509,40 @@ const char * STDCALL mysql_character_set_name(MYSQL *mysql) return mysql->charset->csname; } + int STDCALL mysql_set_character_set(MYSQL *mysql, char *cs_name) { struct charset_info_st *cs; - const char *save_csdir = charsets_dir; + const char *save_csdir= charsets_dir; if (mysql->options.charset_dir) - charsets_dir = mysql->options.charset_dir; + charsets_dir= mysql->options.charset_dir; - if ( (cs = get_charset_by_csname(cs_name, MY_CS_PRIMARY, MYF(0))) ) + if ((cs= get_charset_by_csname(cs_name, MY_CS_PRIMARY, MYF(0)))) { char buff[MY_CS_NAME_SIZE + 10]; - charsets_dir = save_csdir; + charsets_dir= save_csdir; sprintf(buff, "SET NAMES %s", cs_name); - if (!mysql_query(mysql, buff)) { - mysql->charset = cs; - } - } else { + if (!mysql_query(mysql, buff)) + { + mysql->charset= cs; + } + } + else + { char cs_dir_name[FN_REFLEN]; get_charsets_dir(cs_dir_name); - mysql->net.last_errno=CR_CANT_READ_CHARSET; + mysql->net.last_errno= CR_CANT_READ_CHARSET; strmov(mysql->net.sqlstate, unknown_sqlstate); - my_snprintf(mysql->net.last_error, sizeof(mysql->net.last_error)-1, - ER(mysql->net.last_errno), - cs_name, - cs_dir_name); + my_snprintf(mysql->net.last_error, sizeof(mysql->net.last_error) - 1, + ER(mysql->net.last_errno), cs_name, cs_dir_name); } - charsets_dir = save_csdir; + charsets_dir= save_csdir; return mysql->net.last_errno; } + uint STDCALL mysql_thread_safe(void) { #ifdef THREAD diff --git a/mysql-test/r/alter_table.result b/mysql-test/r/alter_table.result index 6cada0d5fb2..b7d47a09bee 100644 --- a/mysql-test/r/alter_table.result +++ b/mysql-test/r/alter_table.result @@ -303,6 +303,120 @@ ALTER TABLE t1 DISABLE KEYS; INSERT DELAYED INTO t1 VALUES(1),(2),(3); ALTER TABLE t1 ENABLE KEYS; drop table t1; +CREATE TABLE t1 ( +Host varchar(16) binary NOT NULL default '', +User varchar(16) binary NOT NULL default '', +PRIMARY KEY (Host,User) +) ENGINE=MyISAM; +ALTER TABLE t1 DISABLE KEYS; +LOCK TABLES t1 WRITE; +INSERT INTO t1 VALUES ('localhost','root'),('localhost',''),('games','monty'); +SHOW INDEX FROM t1; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment +t1 0 PRIMARY 1 Host A NULL NULL NULL BTREE +t1 0 PRIMARY 2 User A 3 NULL NULL BTREE +ALTER TABLE t1 ENABLE KEYS; +UNLOCK TABLES; +CHECK TABLES t1; +Table Op Msg_type Msg_text +test.t1 check status OK +DROP TABLE t1; +CREATE TABLE t1 ( +Host varchar(16) binary NOT NULL default '', +User varchar(16) binary NOT NULL default '', +PRIMARY KEY (Host,User), +KEY (Host) +) ENGINE=MyISAM; +ALTER TABLE t1 DISABLE KEYS; +SHOW INDEX FROM t1; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment +t1 0 PRIMARY 1 Host A NULL NULL NULL BTREE +t1 0 PRIMARY 2 User A 0 NULL NULL BTREE +t1 1 Host 1 Host A NULL NULL NULL BTREE disabled +LOCK TABLES t1 WRITE; +INSERT INTO t1 VALUES ('localhost','root'),('localhost',''); +SHOW INDEX FROM t1; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment +t1 0 PRIMARY 1 Host A NULL NULL NULL BTREE +t1 0 PRIMARY 2 User A 2 NULL NULL BTREE +t1 1 Host 1 Host A NULL NULL NULL BTREE disabled +ALTER TABLE t1 ENABLE KEYS; +SHOW INDEX FROM t1; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment +t1 0 PRIMARY 1 Host A NULL NULL NULL BTREE +t1 0 PRIMARY 2 User A 2 NULL NULL BTREE +t1 1 Host 1 Host A 1 NULL NULL BTREE +UNLOCK TABLES; +CHECK TABLES t1; +Table Op Msg_type Msg_text +test.t1 check status OK +LOCK TABLES t1 WRITE; +ALTER TABLE t1 RENAME t2; +UNLOCK TABLES; +select * from t2; +Host User +localhost +localhost root +DROP TABLE t2; +CREATE TABLE t1 ( +Host varchar(16) binary NOT NULL default '', +User varchar(16) binary NOT NULL default '', +PRIMARY KEY (Host,User), +KEY (Host) +) ENGINE=MyISAM; +LOCK TABLES t1 WRITE; +ALTER TABLE t1 DISABLE KEYS; +SHOW INDEX FROM t1; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment +t1 0 PRIMARY 1 Host A NULL NULL NULL BTREE +t1 0 PRIMARY 2 User A 0 NULL NULL BTREE +t1 1 Host 1 Host A NULL NULL NULL BTREE disabled +DROP TABLE t1; +create table t1 (a int); +alter table t1 rename to `t1\\`; +ERROR 42000: Incorrect table name 't1\\' +rename table t1 to `t1\\`; +ERROR 42000: Incorrect table name 't1\\' +drop table t1; +drop table if exists t1, t2; +Warnings: +Note 1051 Unknown table 't1' +Note 1051 Unknown table 't2' +create table t1 ( a varchar(10) not null primary key ) engine=myisam; +create table t2 ( a varchar(10) not null primary key ) engine=merge union=(t1); +flush tables; +alter table t1 modify a varchar(10); +show create table t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` varchar(10) NOT NULL default '', + PRIMARY KEY (`a`) +) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1 UNION=(`t1`) +flush tables; +alter table t1 modify a varchar(10) not null; +show create table t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` varchar(10) NOT NULL default '', + PRIMARY KEY (`a`) +) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1 UNION=(`t1`) +drop table if exists t1, t2; +create table t1 (a int, b int, c int, d int, e int, f int, g int, h int,i int, primary key (a,b,c,d,e,f,g,i,h)) engine=MyISAM; +insert into t1 (a) values(1); +show table status like 't1'; +Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment +t1 MyISAM 9 Fixed 1 37 X X X X X X X X latin1_swedish_ci NULL +alter table t1 modify a int; +show table status like 't1'; +Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment +t1 MyISAM 9 Fixed 1 37 X X X X X X X X latin1_swedish_ci NULL +drop table t1; +create table t1 (a int not null, b int not null, c int not null, d int not null, e int not null, f int not null, g int not null, h int not null,i int not null, primary key (a,b,c,d,e,f,g,i,h)) engine=MyISAM; +insert into t1 (a) values(1); +show table status like 't1'; +Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment +t1 MyISAM 9 Fixed 1 37 X X X X X X X X latin1_swedish_ci NULL +drop table t1; set names koi8r; create table t1 (a char(10) character set koi8r); insert into t1 values ('ÔÅÓÔ'); @@ -382,75 +496,6 @@ t1 CREATE TABLE `t1` ( `mytext` longtext character set latin1 collate latin1_general_cs ) ENGINE=MyISAM DEFAULT CHARSET=latin2 drop table t1; -CREATE TABLE t1 ( -Host varchar(16) binary NOT NULL default '', -User varchar(16) binary NOT NULL default '', -PRIMARY KEY (Host,User) -) ENGINE=MyISAM; -ALTER TABLE t1 DISABLE KEYS; -LOCK TABLES t1 WRITE; -INSERT INTO t1 VALUES ('localhost','root'),('localhost',''),('games','monty'); -SHOW INDEX FROM t1; -Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment -t1 0 PRIMARY 1 Host A NULL NULL NULL BTREE -t1 0 PRIMARY 2 User A 3 NULL NULL BTREE -ALTER TABLE t1 ENABLE KEYS; -UNLOCK TABLES; -CHECK TABLES t1; -Table Op Msg_type Msg_text -test.t1 check status OK -DROP TABLE t1; -CREATE TABLE t1 ( -Host varchar(16) binary NOT NULL default '', -User varchar(16) binary NOT NULL default '', -PRIMARY KEY (Host,User), -KEY (Host) -) ENGINE=MyISAM; -ALTER TABLE t1 DISABLE KEYS; -SHOW INDEX FROM t1; -Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment -t1 0 PRIMARY 1 Host A NULL NULL NULL BTREE -t1 0 PRIMARY 2 User A 0 NULL NULL BTREE -t1 1 Host 1 Host A NULL NULL NULL BTREE disabled -LOCK TABLES t1 WRITE; -INSERT INTO t1 VALUES ('localhost','root'),('localhost',''); -SHOW INDEX FROM t1; -Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment -t1 0 PRIMARY 1 Host A NULL NULL NULL BTREE -t1 0 PRIMARY 2 User A 2 NULL NULL BTREE -t1 1 Host 1 Host A NULL NULL NULL BTREE disabled -ALTER TABLE t1 ENABLE KEYS; -SHOW INDEX FROM t1; -Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment -t1 0 PRIMARY 1 Host A NULL NULL NULL BTREE -t1 0 PRIMARY 2 User A 2 NULL NULL BTREE -t1 1 Host 1 Host A 1 NULL NULL BTREE -UNLOCK TABLES; -CHECK TABLES t1; -Table Op Msg_type Msg_text -test.t1 check status OK -LOCK TABLES t1 WRITE; -ALTER TABLE t1 RENAME t2; -UNLOCK TABLES; -select * from t2; -Host User -localhost -localhost root -DROP TABLE t2; -CREATE TABLE t1 ( -Host varchar(16) binary NOT NULL default '', -User varchar(16) binary NOT NULL default '', -PRIMARY KEY (Host,User), -KEY (Host) -) ENGINE=MyISAM; -LOCK TABLES t1 WRITE; -ALTER TABLE t1 DISABLE KEYS; -SHOW INDEX FROM t1; -Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment -t1 0 PRIMARY 1 Host A NULL NULL NULL BTREE -t1 0 PRIMARY 2 User A 0 NULL NULL BTREE -t1 1 Host 1 Host A NULL NULL NULL BTREE disabled -DROP TABLE t1; CREATE TABLE t1 (a int PRIMARY KEY, b INT UNIQUE); ALTER TABLE t1 DROP PRIMARY KEY; SHOW CREATE TABLE t1; @@ -469,12 +514,6 @@ alter table t1 drop key no_such_key; ERROR 42000: Can't DROP 'no_such_key'; check that column/key exists alter table t1 drop key a; drop table t1; -create table t1 (a int); -alter table t1 rename to `t1\\`; -ERROR 42000: Incorrect table name 't1\\' -rename table t1 to `t1\\`; -ERROR 42000: Incorrect table name 't1\\' -drop table t1; create table t1 (a text) character set koi8r; insert into t1 values (_koi8r'ÔÅÓÔ'); select hex(a) from t1; @@ -489,39 +528,3 @@ create table t1 ( a timestamp ); alter table t1 add unique ( a(1) ); ERROR HY000: Incorrect sub part key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique sub keys drop table t1; -drop table if exists t1, t2; -create table t1 ( a varchar(10) not null primary key ) engine=myisam; -create table t2 ( a varchar(10) not null primary key ) engine=merge union=(t1); -flush tables; -alter table t1 modify a varchar(10); -show create table t2; -Table Create Table -t2 CREATE TABLE `t2` ( - `a` varchar(10) NOT NULL default '', - PRIMARY KEY (`a`) -) TYPE=MRG_MyISAM UNION=(t1) -flush tables; -alter table t1 modify a varchar(10) not null; -show create table t2; -Table Create Table -t2 CREATE TABLE `t2` ( - `a` varchar(10) NOT NULL default '', - PRIMARY KEY (`a`) -) TYPE=MRG_MyISAM UNION=(t1) -drop table if exists t1, t2; -create table t1 (a int, b int, c int, d int, e int, f int, g int, h int,i int, primary key (a,b,c,d,e,f,g,i,h)) engine=MyISAM; -insert into t1 (a) values(1); -show table status like 't1'; -Name Type Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Create_options Comment -t1 MyISAM Fixed 1 37 37 X X X X X X X X -alter table t1 modify a int; -show table status like 't1'; -Name Type Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Create_options Comment -t1 MyISAM Fixed 1 37 37 X X X X X X X X -drop table t1; -create table t1 (a int not null, b int not null, c int not null, d int not null, e int not null, f int not null, g int not null, h int not null,i int not null, primary key (a,b,c,d,e,f,g,i,h)) engine=MyISAM; -insert into t1 (a) values(1); -show table status like 't1'; -Name Type Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Create_options Comment -t1 MyISAM Fixed 1 37 37 X X X X X X X X -drop table t1; diff --git a/mysql-test/r/innodb.result b/mysql-test/r/innodb.result index def462fb521..4c983014d4b 100644 --- a/mysql-test/r/innodb.result +++ b/mysql-test/r/innodb.result @@ -1645,5 +1645,5 @@ concat(a, b) drop table t1; CREATE TABLE t1 ( a char(10) ) ENGINE=InnoDB; SELECT a FROM t1 WHERE MATCH (a) AGAINST ('test' IN BOOLEAN MODE); -The used table type doesn't support FULLTEXT indexes +ERROR HY000: The used table type doesn't support FULLTEXT indexes DROP TABLE t1; diff --git a/mysql-test/r/insert_update.result b/mysql-test/r/insert_update.result index f78372541f2..2143538469b 100644 --- a/mysql-test/r/insert_update.result +++ b/mysql-test/r/insert_update.result @@ -167,7 +167,7 @@ a b c VALUES(a) 2 1 11 NULL DROP TABLE t1; DROP TABLE t2; -create table t1 (a int not null unique); +create table t1 (a int not null unique) engine=myisam; insert into t1 values (1),(2); insert ignore into t1 select 1 on duplicate key update a=2; select * from t1; @@ -179,4 +179,11 @@ select * from t1; a 1 3 +insert into t1 select 1 on duplicate key update a=2; +select * from t1; +a +2 +3 +insert into t1 select a from t1 on duplicate key update a=a+1 ; +ERROR 23000: Duplicate entry '3' for key 1 drop table t1; diff --git a/mysql-test/r/outfile.result b/mysql-test/r/outfile.result index a7871592241104fe2a949c98379cfa21dcbe5d68..5eb24a78ef0d0242fcdd2f0ad1dfbf47f9d60dac 100644 GIT binary patch delta 348 zcmZXQ&q~8U5XMmu*?k5NgO{j?H3(jMO4F?@Y zpG+ZwP-z*hrJ?a@?VoU_hrj<%rt>6VA7x`&;>?mb`|b(bqMOs06nvZsMldG63m&Y9oCrbW!+}TKlZ9

zvZF(N`U{1WXL|qu delta 24 gcmdnbzM6HzU&e{cG$y}ifield->table; if (!(table->file->table_flags() & HA_CAN_FULLTEXT)) { - my_error(ER_TABLE_CANT_HANDLE_FULLTEXT, MYF(0)); + my_error(ER_TABLE_CANT_HANDLE_FT, MYF(0)); return 1; } table->fulltext_searched=1; diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 7b0f24bcc45..67aade519f5 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -1205,6 +1205,7 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, /* Sort keys in optimized order */ qsort((gptr) key_info_buffer, *key_count, sizeof(KEY), (qsort_cmp) sort_keys); + create_info->null_bits= null_fields; DBUG_RETURN(0); } @@ -1392,7 +1393,6 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name, if (thd->variables.sql_mode & MODE_NO_DIR_IN_CREATE) create_info->data_file_name= create_info->index_file_name= 0; create_info->table_options=db_options; - create_info->null_bits= null_fields; if (rea_create_table(thd, path, create_info, fields, key_count, key_info_buffer)) From faa12bf0c7fc73bfe54c655553869bff2a52e3af Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 14 May 2005 17:08:43 +0300 Subject: [PATCH 27/63] Fixed compiler failure --- sql/unireg.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/sql/unireg.cc b/sql/unireg.cc index f81370539c6..748e45f8b0a 100644 --- a/sql/unireg.cc +++ b/sql/unireg.cc @@ -27,6 +27,7 @@ #define USES_TYPES #include "mysql_priv.h" #include +#include #define FCOMP 11 /* Byte per packat f{lt */ From f4425b50e157cf35f89ed22043b8ffd5089abdae Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 15 May 2005 06:59:34 +0200 Subject: [PATCH 28/63] mysqltest.c, mysql-test-run.sh: Not to conflict with Windows return code 2 for "not found", use 62 for "skip" mysql-test-run.sh, suppress.purify: Use Purify suppress file mysql-test/suppress.purify: Purify suppress file mysql-test/mysql-test-run.sh: Use Purify suppress file Not to conflict with Windows return code 2 for "not found", use 62 for "skip" client/mysqltest.c: Not to conflict with Windows return code 2 for "not found", use 62 for "skip" --- client/mysqltest.c | 2 +- mysql-test/mysql-test-run.sh | 9 +++------ mysql-test/suppress.purify | 10 ++++++++++ 3 files changed, 14 insertions(+), 7 deletions(-) create mode 100644 mysql-test/suppress.purify diff --git a/client/mysqltest.c b/client/mysqltest.c index 3eab182a74d..362b6a0b1df 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -572,7 +572,7 @@ static void abort_not_supported_test() printf("skipped\n"); free_used_memory(); my_end(MY_CHECK_ERROR); - exit(2); + exit(62); } static void verbose_msg(const char* fmt, ...) diff --git a/mysql-test/mysql-test-run.sh b/mysql-test/mysql-test-run.sh index bdbd46ae8dd..581c6c66fdd 100644 --- a/mysql-test/mysql-test-run.sh +++ b/mysql-test/mysql-test-run.sh @@ -569,10 +569,7 @@ if [ x$SOURCE_DIST = x1 ] ; then NDB_MGM="$BASEDIR/ndb/src/mgmclient/ndb_mgm" if [ -n "$USE_PURIFY" ] ; then - PSUP="$MYSQL_TEST_DIR/purify.suppress" - echo "suppress UMR rw_read_held; mi_open; ha_myisam::open64; handler::ha_open; openfrm" > $PSUP - echo "suppress UMR my_end; main" >> $PSUP - echo "suppress UMR _doprnt; fprintf; my_end; main" >> $PSUP + PSUP="$MYSQL_TEST_DIR/suppress.purify" PURIFYOPTIONS="-windows=no -log-file=%v.purifylog -append-logfile -add-suppression-files=$PSUP" if [ -f "${MYSQL_TEST}-purify" ] ; then MYSQL_TEST="${MYSQL_TEST}-purify" @@ -1660,11 +1657,11 @@ run_testcase () $ECHO "$RES$RES_SPACE [ pass ] $TIMER" else # why the following ``if'' ? That is why res==1 is special ? - if [ $res = 2 ]; then + if [ $res = 62 ]; then skip_inc $ECHO "$RES$RES_SPACE [ skipped ]" else - if [ $res -gt 2 ]; then + if [ $res -ne 1 ]; then $ECHO "mysqltest returned unexpected code $res, it has probably crashed" >> $TIMEFILE fi total_inc diff --git a/mysql-test/suppress.purify b/mysql-test/suppress.purify new file mode 100644 index 00000000000..58553130c51 --- /dev/null +++ b/mysql-test/suppress.purify @@ -0,0 +1,10 @@ +suppress UMR rw_read_held; mi_open; ha_myisam::open64; handler::ha_open; openfrm +suppress UMR my_end; main +suppress UMR _doprnt; fprintf; my_end; main +suppress umr rw_read_held; mi_open +suppress umr _putmsg; putmsg; _tx_sndudata +suppress umr rw_read_held; Query_cache::store_query(THD*,st_table_list*); mysql_execute_command(THD*) +suppress sig ...; _select; select; handle_connections_sockets; main; _start +suppress sig ...; read; vio_read; my_real_read(st_net*,unsigned long*); my_net_read; do_command(THD*) +suppress sig ...; read; vio_read; my_real_read(st_net*,unsigned long*); my_net_read; net_safe_read +suppress sig ...; write; vio_write; net_real_write; net_write_buff(st_net*,const char*,unsigned long); my_net_write From 657469bab80c56d97e375903c61c755103b36058 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 15 May 2005 07:34:09 +0200 Subject: [PATCH 29/63] mysql-test-run.pl: Not to conflict with Windows return code 2 for "not found", use 62 for "skip" init_db.sql: Initial db updates mysql-test/lib/init_db.sql: Initial db updates mysql-test/mysql-test-run.pl: Not to conflict with Windows return code 2 for "not found", use 62 for "skip" --- mysql-test/lib/init_db.sql | 5 +++-- mysql-test/mysql-test-run.pl | 8 ++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/mysql-test/lib/init_db.sql b/mysql-test/lib/init_db.sql index 902af0b0842..6d5ec55a6ae 100644 --- a/mysql-test/lib/init_db.sql +++ b/mysql-test/lib/init_db.sql @@ -1,4 +1,5 @@ -USE mysql; +use mysql; +set table_type=myisam; CREATE TABLE db ( Host char(60) binary DEFAULT '' NOT NULL, @@ -193,7 +194,7 @@ INSERT INTO time_zone_name (Name, Time_Zone_id) VALUES CREATE TABLE time_zone ( Time_zone_id int unsigned NOT NULL auto_increment, - Use_leap_seconds enum('Y','N') DEFAULT 'N' NOT NULL, + Use_leap_seconds enum('Y','N') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, PRIMARY KEY TzId (Time_zone_id) ) engine=MyISAM CHARACTER SET utf8 diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 5a188dc6927..30e92e07da1 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -1497,15 +1497,15 @@ sub run_testcase ($) { { mtr_report_test_passed($tinfo); } - elsif ( $res == 2 ) + elsif ( $res == 62 ) { # Testcase itself tell us to skip this one mtr_report_test_skipped($tinfo); } else { - # Test case failed - if ( $res > 2 ) + # Test case failed, if in control mysqltest returns 1 + if ( $res != 1 ) { mtr_tofile($path_timefile, "mysqltest returned unexpected code $res, " . @@ -2129,7 +2129,7 @@ sub run_mysqltest ($$) { mysqld_arguments($args,'master',0,$tinfo->{'master_opt'},[]); } - return mtr_run_test($exe_mysqltest,$args,$tinfo->{'path'},"",$path_timefile,""); + return mtr_run_test($exe,$args,$tinfo->{'path'},"",$path_timefile,""); } ############################################################################## From bea0e79f57cff77cd74bd4063c87bd27ae62fe4a Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 15 May 2005 17:22:54 +0200 Subject: [PATCH 30/63] mtr_report.pl, mtr_process.pl, mysql-test-run.pl: Added option --vardir= for feature bug#10096 mysql-test/mysql-test-run.pl: Added option --vardir= for feature bug#10096 mysql-test/lib/mtr_process.pl: Added option --vardir= for feature bug#10096 mysql-test/lib/mtr_report.pl: Added option --vardir= for feature bug#10096 --- mysql-test/lib/mtr_process.pl | 2 +- mysql-test/lib/mtr_report.pl | 13 +- mysql-test/mysql-test-run.pl | 223 ++++++++++++++++++++-------------- 3 files changed, 137 insertions(+), 101 deletions(-) diff --git a/mysql-test/lib/mtr_process.pl b/mysql-test/lib/mtr_process.pl index 8aefc235d72..78758e54aa4 100644 --- a/mysql-test/lib/mtr_process.pl +++ b/mysql-test/lib/mtr_process.pl @@ -344,7 +344,7 @@ sub mtr_kill_leftovers () { # We scan the "var/run/" directory for other process id's to kill # FIXME $path_run_dir or something - my $rundir= "$::glob_mysql_test_dir/var/run"; + my $rundir= "$::opt_vardir/run"; if ( -d $rundir ) { diff --git a/mysql-test/lib/mtr_report.pl b/mysql-test/lib/mtr_report.pl index fd665b154b8..cb41549422f 100644 --- a/mysql-test/lib/mtr_report.pl +++ b/mysql-test/lib/mtr_report.pl @@ -89,9 +89,10 @@ sub mtr_report_test_passed ($) { my $tinfo= shift; my $timer= ""; - if ( $::opt_timer and -f "$::glob_mysql_test_dir/var/log/timer" ) + if ( $::opt_timer and -f "$::opt_vardir/log/timer" ) { - $timer= mtr_fromfile("$::glob_mysql_test_dir/var/log/timer"); + $timer= mtr_fromfile("$::opt_vardir/log/timer"); + $::glob_tot_real_time += $timer; $timer= sprintf "%12s", $timer; } $tinfo->{'result'}= 'MTR_RES_PASSED'; @@ -177,8 +178,8 @@ sub mtr_report_stats ($) { # Report if there was any fatal warnings/errors in the log files # - unlink("$::glob_mysql_test_dir/var/log/warnings"); - unlink("$::glob_mysql_test_dir/var/log/warnings.tmp"); + unlink("$::opt_vardir/log/warnings"); + unlink("$::opt_vardir/log/warnings.tmp"); # Remove some non fatal warnings from the log files # FIXME what is going on ????? ;-) @@ -196,11 +197,11 @@ sub mtr_report_stats ($) { # found_error=1 # } # done -# unlink("$::glob_mysql_test_dir/var/log/warnings.tmp"); +# unlink("$::opt_vardir/log/warnings.tmp"); # if ( $found_error= "1" ) # { # print "WARNING: Got errors/warnings while running tests. Please examine\n" -# print "$::glob_mysql_test_dir/var/log/warnings for details.\n" +# print "$::opt_vardir/log/warnings for details.\n" # } # } } diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 30e92e07da1..106ed2ec179 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -84,7 +84,7 @@ use Sys::Hostname; #use Carp; use IO::Socket; use IO::Socket::INET; -#use Data::Dumper; +use Data::Dumper; use strict; #use diagnostics; @@ -177,6 +177,7 @@ our $path_timefile; our $path_manager_log; # Used by mysqldadmin our $path_slave_load_tmpdir; # What is this?! our $path_my_basedir; +our $opt_vardir; # A path but set directly on cmd line our $opt_tmpdir; # A path but set directly on cmd line our $opt_usage; @@ -447,8 +448,6 @@ sub initial_setup () { $glob_basedir= dirname($glob_mysql_test_dir); $glob_mysql_bench_dir= "$glob_basedir/mysql-bench"; # FIXME make configurable - $path_timefile= "$glob_mysql_test_dir/var/log/mysqltest-time"; - # needs to be same length to test logging (FIXME what???) $path_slave_load_tmpdir= "../../var/tmp"; @@ -469,11 +468,6 @@ sub command_line_setup () { # These are defaults for things that are set on the command line $opt_suite= "main"; # Special default suite - $opt_tmpdir= "$glob_mysql_test_dir/var/tmp"; - # FIXME maybe unneded? - $path_manager_log= "$glob_mysql_test_dir/var/log/manager.log"; - $opt_current_test= "$glob_mysql_test_dir/var/log/current_test"; - my $opt_master_myport= 9306; my $opt_slave_myport= 9308; $opt_ndbcluster_port= 9350; @@ -549,6 +543,7 @@ sub command_line_setup () { 'unified-diff|udiff' => \$opt_udiff, 'user-test=s' => \$opt_user_test, 'user=s' => \$opt_user, + 'vardir=s' => \$opt_vardir, 'verbose' => \$opt_verbose, 'wait-timeout=i' => \$opt_wait_timeout, 'warnings|log-warnings' => \$opt_warnings, @@ -564,51 +559,35 @@ sub command_line_setup () { @opt_cases= @ARGV; - # Put this into a hash, will be a C struct + # -------------------------------------------------------------------------- + # Set the "var/" directory, as it is the base for everything else + # -------------------------------------------------------------------------- - $master->[0]->{'path_myddir'}= "$glob_mysql_test_dir/var/master-data"; - $master->[0]->{'path_myerr'}= "$glob_mysql_test_dir/var/log/master.err"; - $master->[0]->{'path_mylog'}= "$glob_mysql_test_dir/var/log/master.log"; - $master->[0]->{'path_mypid'}= "$glob_mysql_test_dir/var/run/master.pid"; - $master->[0]->{'path_mysock'}= "$opt_tmpdir/master.sock"; - $master->[0]->{'path_myport'}= $opt_master_myport; - $master->[0]->{'start_timeout'}= 400; # enough time create innodb tables + if ( ! $opt_vardir ) + { + $opt_vardir= "$glob_mysql_test_dir/var"; + } - $master->[0]->{'ndbcluster'}= 1; # ndbcluster not started + if ( $opt_vardir !~ m,^/, ) + { + # Make absolute path, relative test dir + $opt_vardir= "$glob_mysql_test_dir/$opt_vardir"; + } - $master->[1]->{'path_myddir'}= "$glob_mysql_test_dir/var/master1-data"; - $master->[1]->{'path_myerr'}= "$glob_mysql_test_dir/var/log/master1.err"; - $master->[1]->{'path_mylog'}= "$glob_mysql_test_dir/var/log/master1.log"; - $master->[1]->{'path_mypid'}= "$glob_mysql_test_dir/var/run/master1.pid"; - $master->[1]->{'path_mysock'}= "$opt_tmpdir/master1.sock"; - $master->[1]->{'path_myport'}= $opt_master_myport + 1; - $master->[1]->{'start_timeout'}= 400; # enough time create innodb tables + # -------------------------------------------------------------------------- + # If not set, set these to defaults + # -------------------------------------------------------------------------- - $slave->[0]->{'path_myddir'}= "$glob_mysql_test_dir/var/slave-data"; - $slave->[0]->{'path_myerr'}= "$glob_mysql_test_dir/var/log/slave.err"; - $slave->[0]->{'path_mylog'}= "$glob_mysql_test_dir/var/log/slave.log"; - $slave->[0]->{'path_mypid'}= "$glob_mysql_test_dir/var/run/slave.pid"; - $slave->[0]->{'path_mysock'}= "$opt_tmpdir/slave.sock"; - $slave->[0]->{'path_myport'}= $opt_slave_myport; - $slave->[0]->{'start_timeout'}= 400; - - $slave->[1]->{'path_myddir'}= "$glob_mysql_test_dir/var/slave1-data"; - $slave->[1]->{'path_myerr'}= "$glob_mysql_test_dir/var/log/slave1.err"; - $slave->[1]->{'path_mylog'}= "$glob_mysql_test_dir/var/log/slave1.log"; - $slave->[1]->{'path_mypid'}= "$glob_mysql_test_dir/var/run/slave1.pid"; - $slave->[1]->{'path_mysock'}= "$opt_tmpdir/slave1.sock"; - $slave->[1]->{'path_myport'}= $opt_slave_myport + 1; - $slave->[1]->{'start_timeout'}= 300; - - $slave->[2]->{'path_myddir'}= "$glob_mysql_test_dir/var/slave2-data"; - $slave->[2]->{'path_myerr'}= "$glob_mysql_test_dir/var/log/slave2.err"; - $slave->[2]->{'path_mylog'}= "$glob_mysql_test_dir/var/log/slave2.log"; - $slave->[2]->{'path_mypid'}= "$glob_mysql_test_dir/var/run/slave2.pid"; - $slave->[2]->{'path_mysock'}= "$opt_tmpdir/slave2.sock"; - $slave->[2]->{'path_myport'}= $opt_slave_myport + 2; - $slave->[2]->{'start_timeout'}= 300; + $opt_tmpdir= "$opt_vardir/tmp" unless $opt_tmpdir; + # FIXME maybe not needed? + $path_manager_log= "$opt_vardir/log/manager.log" + unless $path_manager_log; + $opt_current_test= "$opt_vardir/log/current_test" + unless $opt_current_test; + # -------------------------------------------------------------------------- # Do sanity checks of command line arguments + # -------------------------------------------------------------------------- if ( $opt_extern and $opt_local ) { @@ -621,13 +600,6 @@ sub command_line_setup () { $opt_socket= "/tmp/mysql.sock"; # FIXME } - if ( $opt_extern ) - { - $glob_use_running_server= 1; - $opt_skip_rpl= 1; # We don't run rpl test cases - $master->[0]->{'path_mysock'}= $opt_socket; - } - # -------------------------------------------------------------------------- # Look at the command line options and set script flags # -------------------------------------------------------------------------- @@ -746,6 +718,58 @@ sub command_line_setup () { } } + # Put this into a hash, will be a C struct + + $master->[0]->{'path_myddir'}= "$opt_vardir/master-data"; + $master->[0]->{'path_myerr'}= "$opt_vardir/log/master.err"; + $master->[0]->{'path_mylog'}= "$opt_vardir/log/master.log"; + $master->[0]->{'path_mypid'}= "$opt_vardir/run/master.pid"; + $master->[0]->{'path_mysock'}= "$opt_tmpdir/master.sock"; + $master->[0]->{'path_myport'}= $opt_master_myport; + $master->[0]->{'start_timeout'}= 400; # enough time create innodb tables + + $master->[0]->{'ndbcluster'}= 1; # ndbcluster not started + + $master->[1]->{'path_myddir'}= "$opt_vardir/master1-data"; + $master->[1]->{'path_myerr'}= "$opt_vardir/log/master1.err"; + $master->[1]->{'path_mylog'}= "$opt_vardir/log/master1.log"; + $master->[1]->{'path_mypid'}= "$opt_vardir/run/master1.pid"; + $master->[1]->{'path_mysock'}= "$opt_tmpdir/master1.sock"; + $master->[1]->{'path_myport'}= $opt_master_myport + 1; + $master->[1]->{'start_timeout'}= 400; # enough time create innodb tables + + $slave->[0]->{'path_myddir'}= "$opt_vardir/slave-data"; + $slave->[0]->{'path_myerr'}= "$opt_vardir/log/slave.err"; + $slave->[0]->{'path_mylog'}= "$opt_vardir/log/slave.log"; + $slave->[0]->{'path_mypid'}= "$opt_vardir/run/slave.pid"; + $slave->[0]->{'path_mysock'}= "$opt_tmpdir/slave.sock"; + $slave->[0]->{'path_myport'}= $opt_slave_myport; + $slave->[0]->{'start_timeout'}= 400; + + $slave->[1]->{'path_myddir'}= "$opt_vardir/slave1-data"; + $slave->[1]->{'path_myerr'}= "$opt_vardir/log/slave1.err"; + $slave->[1]->{'path_mylog'}= "$opt_vardir/log/slave1.log"; + $slave->[1]->{'path_mypid'}= "$opt_vardir/run/slave1.pid"; + $slave->[1]->{'path_mysock'}= "$opt_tmpdir/slave1.sock"; + $slave->[1]->{'path_myport'}= $opt_slave_myport + 1; + $slave->[1]->{'start_timeout'}= 300; + + $slave->[2]->{'path_myddir'}= "$opt_vardir/slave2-data"; + $slave->[2]->{'path_myerr'}= "$opt_vardir/log/slave2.err"; + $slave->[2]->{'path_mylog'}= "$opt_vardir/log/slave2.log"; + $slave->[2]->{'path_mypid'}= "$opt_vardir/run/slave2.pid"; + $slave->[2]->{'path_mysock'}= "$opt_tmpdir/slave2.sock"; + $slave->[2]->{'path_myport'}= $opt_slave_myport + 2; + $slave->[2]->{'start_timeout'}= 300; + + if ( $opt_extern ) + { + $glob_use_running_server= 1; + $opt_skip_rpl= 1; # We don't run rpl test cases + $master->[0]->{'path_mysock'}= $opt_socket; + } + + $path_timefile= "$opt_vardir/log/mysqltest-time"; } @@ -892,8 +916,8 @@ sub executable_setup () { } $path_ndb_backup_dir= - "$glob_mysql_test_dir/var/ndbcluster-$opt_ndbcluster_port"; - $file_ndb_testrun_log= "$glob_mysql_test_dir/var/log/ndb_testrun.log"; + "$opt_vardir/ndbcluster-$opt_ndbcluster_port"; + $file_ndb_testrun_log= "$opt_vardir/log/ndb_testrun.log"; } @@ -981,7 +1005,7 @@ sub kill_running_server () { # leftovers from previous runs. mtr_report("Killing Possible Leftover Processes"); - mkpath("$glob_mysql_test_dir/var/log"); # Needed for mysqladmin log + mkpath("$opt_vardir/log"); # Needed for mysqladmin log mtr_kill_leftovers(); ndbcluster_stop(); @@ -995,15 +1019,18 @@ sub kill_and_cleanup () { mtr_report("Removing Stale Files"); - rmtree("$glob_mysql_test_dir/var/log"); - rmtree("$glob_mysql_test_dir/var/ndbcluster-$opt_ndbcluster_port"); - rmtree("$glob_mysql_test_dir/var/run"); - rmtree("$glob_mysql_test_dir/var/tmp"); + rmtree("$opt_vardir/log"); + rmtree("$opt_vardir/ndbcluster-$opt_ndbcluster_port"); + rmtree("$opt_vardir/run"); + rmtree("$opt_vardir/tmp"); - mkpath("$glob_mysql_test_dir/var/log"); - mkpath("$glob_mysql_test_dir/var/run"); - mkpath("$glob_mysql_test_dir/var/tmp"); - mkpath($opt_tmpdir); + mkpath("$opt_vardir/log"); + mkpath("$opt_vardir/run"); + mkpath("$opt_vardir/tmp"); + if ( $opt_tmpdir ne "$opt_vardir/tmp" ) + { + mkpath($opt_tmpdir); + } # FIXME do we really need to create these all, or are they # created for us when tables are created? @@ -1027,6 +1054,16 @@ sub kill_and_cleanup () { rmtree("$slave->[2]->{'path_myddir'}"); mkpath("$slave->[2]->{'path_myddir'}/mysql"); mkpath("$slave->[2]->{'path_myddir'}/test"); + + # To make some old test cases work, we create a soft + # link from the old "var" location to the new one + + if ( ! $glob_win32 and $opt_vardir ne "$glob_mysql_test_dir/var" ) + { + # FIXME why bother with the above, why not always remove all of var?! + rmtree("$glob_mysql_test_dir/var"); # Clean old var, FIXME or rename it?! + symlink($opt_vardir, "$glob_mysql_test_dir/var"); + } } @@ -1050,7 +1087,7 @@ sub ndbcluster_install () { if ( mtr_run("$glob_mysql_test_dir/ndb/ndbcluster", ["--port=$opt_ndbcluster_port", "--port-base=$ndbcluster_port_base", - "--data-dir=$glob_mysql_test_dir/var", + "--data-dir=$opt_vardir", $ndbcluster_opts, "--initial"], "", "", "", "") ) @@ -1074,7 +1111,7 @@ sub ndbcluster_start () { # FIXME, we want to _append_ output to file $file_ndb_testrun_log instead of /dev/null if ( mtr_run("$glob_mysql_test_dir/ndb/ndbcluster", ["--port=$opt_ndbcluster_port", - "--data-dir=$glob_mysql_test_dir/var"], + "--data-dir=$opt_vardir"], "", "/dev/null", "", "") ) { mtr_error("Error ndbcluster_start"); @@ -1094,7 +1131,7 @@ sub ndbcluster_stop () { # FIXME, we want to _append_ output to file $file_ndb_testrun_log instead of /dev/null mtr_run("$glob_mysql_test_dir/ndb/ndbcluster", ["--port=$opt_ndbcluster_port", - "--data-dir=$glob_mysql_test_dir/var", + "--data-dir=$opt_vardir", "--stop"], "", "/dev/null", "", ""); @@ -1566,17 +1603,17 @@ sub do_before_start_master ($$) { $tname ne "rpl_crash_binlog_ib_3b") { # FIXME we really want separate dir for binlogs - foreach my $bin ( glob("$glob_mysql_test_dir/var/log/master*-bin.*") ) + foreach my $bin ( glob("$opt_vardir/log/master*-bin.*") ) { unlink($bin); } } # Remove old master.info and relay-log.info files - unlink("$glob_mysql_test_dir/var/master-data/master.info"); - unlink("$glob_mysql_test_dir/var/master-data/relay-log.info"); - unlink("$glob_mysql_test_dir/var/master1-data/master.info"); - unlink("$glob_mysql_test_dir/var/master1-data/relay-log.info"); + unlink("$opt_vardir/master-data/master.info"); + unlink("$opt_vardir/master-data/relay-log.info"); + unlink("$opt_vardir/master1-data/master.info"); + unlink("$opt_vardir/master1-data/relay-log.info"); # Run master initialization shell script if one exists if ( $init_script ) @@ -1603,13 +1640,13 @@ sub do_before_start_slave ($$) { $tname ne "rpl_crash_binlog_ib_3b" ) { # FIXME we really want separate dir for binlogs - foreach my $bin ( glob("$glob_mysql_test_dir/var/log/slave*-bin.*") ) + foreach my $bin ( glob("$opt_vardir/log/slave*-bin.*") ) { unlink($bin); } # FIXME really master?! - unlink("$glob_mysql_test_dir/var/slave-data/master.info"); - unlink("$glob_mysql_test_dir/var/slave-data/relay-log.info"); + unlink("$opt_vardir/slave-data/master.info"); + unlink("$opt_vardir/slave-data/relay-log.info"); } # Run slave initialization shell script if one exists @@ -1623,8 +1660,8 @@ sub do_before_start_slave ($$) { } } - `rm -f $glob_mysql_test_dir/var/slave-data/log.*`; -# unlink("$glob_mysql_test_dir/var/slave-data/log.*"); + `rm -f $opt_vardir/slave-data/log.*`; +# unlink("$opt_vardir/slave-data/log.*"); } sub mysqld_arguments ($$$$$) { @@ -1670,8 +1707,7 @@ sub mysqld_arguments ($$$$$) { if ( $type eq 'master' ) { - mtr_add_arg($args, "%s--log-bin=%s/var/log/master-bin", $prefix, - $glob_mysql_test_dir); + mtr_add_arg($args, "%s--log-bin=%s/log/master-bin", $prefix, $opt_vardir); mtr_add_arg($args, "%s--pid-file=%s", $prefix, $master->[$idx]->{'path_mypid'}); mtr_add_arg($args, "%s--port=%d", $prefix, @@ -1695,8 +1731,8 @@ sub mysqld_arguments ($$$$$) { # FIXME slave get this option twice?! mtr_add_arg($args, "%s--exit-info=256", $prefix); mtr_add_arg($args, "%s--init-rpl-role=slave", $prefix); - mtr_add_arg($args, "%s--log-bin=%s/var/log/slave%s-bin", $prefix, - $glob_mysql_test_dir, $sidx); # FIXME use own dir for binlogs + mtr_add_arg($args, "%s--log-bin=%s/log/slave%s-bin", $prefix, + $opt_vardir, $sidx); # FIXME use own dir for binlogs mtr_add_arg($args, "%s--log-slave-updates", $prefix); # FIXME option duplicated for slave mtr_add_arg($args, "%s--log=%s", $prefix, @@ -1706,8 +1742,8 @@ sub mysqld_arguments ($$$$$) { $slave->[$idx]->{'path_mypid'}); mtr_add_arg($args, "%s--port=%d", $prefix, $slave->[$idx]->{'path_myport'}); - mtr_add_arg($args, "%s--relay-log=%s/var/log/slave%s-relay-bin", $prefix, - $glob_mysql_test_dir, $sidx); + mtr_add_arg($args, "%s--relay-log=%s/log/slave%s-relay-bin", $prefix, + $opt_vardir, $sidx); mtr_add_arg($args, "%s--report-host=127.0.0.1", $prefix); mtr_add_arg($args, "%s--report-port=%d", $prefix, $slave->[$idx]->{'path_myport'}); @@ -1745,13 +1781,13 @@ sub mysqld_arguments ($$$$$) { { if ( $type eq 'master' ) { - mtr_add_arg($args, "%s--debug=d:t:i:A,%s/var/log/master%s.trace", - $prefix, $glob_mysql_test_dir, $sidx); + mtr_add_arg($args, "%s--debug=d:t:i:A,%s/log/master%s.trace", + $prefix, $opt_vardir, $sidx); } if ( $type eq 'slave' ) { - mtr_add_arg($args, "%s--debug=d:t:i:A,%s/var/log/slave%s.trace", - $prefix, $glob_mysql_test_dir, $sidx); + mtr_add_arg($args, "%s--debug=d:t:i:A,%s/log/slave%s.trace", + $prefix, $opt_vardir, $sidx); } } @@ -2003,7 +2039,7 @@ sub run_mysqltest ($$) { if ( $opt_debug ) { $cmdline_mysqldump .= - " --debug=d:t:A,$glob_mysql_test_dir/var/log/mysqldump.trace"; + " --debug=d:t:A,$opt_vardir/log/mysqldump.trace"; } my $cmdline_mysqlbinlog= @@ -2012,7 +2048,7 @@ sub run_mysqltest ($$) { if ( $opt_debug ) { $cmdline_mysqlbinlog .= - " --debug=d:t:A,$glob_mysql_test_dir/var/log/mysqlbinlog.trace"; + " --debug=d:t:A,$opt_vardir/log/mysqlbinlog.trace"; } my $cmdline_mysql= @@ -2075,13 +2111,13 @@ sub run_mysqltest ($$) { { $exe= "strace"; # FIXME there are ktrace, .... mtr_add_arg($args, "-o"); - mtr_add_arg($args, "%s/var/log/mysqltest.strace", $glob_mysql_test_dir); + mtr_add_arg($args, "%s/log/mysqltest.strace", $opt_vardir); mtr_add_arg($args, "$exe_mysqltest"); } if ( $opt_timer ) { - mtr_add_arg($args, "--timer-file=%s/var/log/timer", $glob_mysql_test_dir); + mtr_add_arg($args, "--timer-file=%s/log/timer", $opt_vardir); } if ( $opt_big_test ) @@ -2106,8 +2142,7 @@ sub run_mysqltest ($$) { if ( $opt_debug ) { - mtr_add_arg($args, "--debug=d:t:A,%s/var/log/mysqltest.trace", - $glob_mysql_test_dir); + mtr_add_arg($args, "--debug=d:t:A,%s/log/mysqltest.trace", $opt_vardir); } if ( $opt_with_openssl ) From 8fd8d819d0ee7f048b6a40b6e96f0d5e23c0943f Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 15 May 2005 20:38:54 +0200 Subject: [PATCH 31/63] mysqltest.c: To solve bug#6193, also reset require when using 'eval' for running query mysql-test-run.pl: In cleanup, remove possible soft link to var directory mysql-test/mysql-test-run.pl: In cleanup, remove possible soft link to var directory client/mysqltest.c: To solve bug#6193, also reset require when using 'eval' for running query --- client/mysqltest.c | 6 ++++++ mysql-test/mysql-test-run.pl | 10 ++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/client/mysqltest.c b/client/mysqltest.c index 362b6a0b1df..1f95f1eaeeb 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -3522,6 +3522,12 @@ int main(int argc, char **argv) if (q->query == q->query_buf) q->query += q->first_word_len + 1; display_result_vertically= (q->type==Q_QUERY_VERTICAL); + if (save_file[0]) + { + strmov(q->record_file,save_file); + q->require_file=require_file; + save_file[0]=0; + } error|= run_query(&cur_con->mysql, q, QUERY_REAP|QUERY_SEND); display_result_vertically= old_display_result_vertically; break; diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 106ed2ec179..9d809593ea7 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -1019,6 +1019,11 @@ sub kill_and_cleanup () { mtr_report("Removing Stale Files"); + if ( -l $opt_vardir and ! unlink($opt_vardir) ) + { + mtr_error("Can't remove soft link \"$opt_vardir\""); + } + rmtree("$opt_vardir/log"); rmtree("$opt_vardir/ndbcluster-$opt_ndbcluster_port"); rmtree("$opt_vardir/run"); @@ -1027,10 +1032,7 @@ sub kill_and_cleanup () { mkpath("$opt_vardir/log"); mkpath("$opt_vardir/run"); mkpath("$opt_vardir/tmp"); - if ( $opt_tmpdir ne "$opt_vardir/tmp" ) - { - mkpath($opt_tmpdir); - } + mkpath($opt_tmpdir) if $opt_tmpdir ne "$opt_vardir/tmp"; # FIXME do we really need to create these all, or are they # created for us when tables are created? From 06736ab48a6ea988c230127896a8083bf88557d9 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 15 May 2005 22:56:45 +0200 Subject: [PATCH 32/63] Fix for BUG#10095: {wrong query results because of incorrect constant propagation} The problem: base_list::remove didn't modify base_list::last when removing the last list element. The fix: If we remove the last element, find the element before it (by walking from the beginning of the list) and set base_list::last accordingly. The list gets corrupted in both 4.0 and 4.1. There are no visible problems in current 4.1 because current 4.1 doesn't call where_cond->fix_fields() after constant propagation step. mysql-test/r/select.result: Testcase for BUG#10095 mysql-test/t/select.test: Testcase for BUG#10095 sql/sql_list.h: Fix for BUG#10095: {wrong query results because of incorrect constant propagation} The problem: base_list::remove didn't modify base_list::last when removing the last list element. The fix: If we remove the last element, find the element before it (by walking from the beginning of the list) and set base_list::last accordingly. --- mysql-test/r/select.result | 54 ++++++++++++++++++++++++++++ mysql-test/t/select.test | 59 ++++++++++++++++++++++++++++++ sql/sql_list.h | 74 ++++++++++++++++++++++++++++++++++++-- 3 files changed, 185 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/select.result b/mysql-test/r/select.result index 17897b2f549..3c7a74c0c57 100644 --- a/mysql-test/r/select.result +++ b/mysql-test/r/select.result @@ -2377,3 +2377,57 @@ table type possible_keys key key_len ref rows Extra t1 ALL NULL NULL NULL NULL 5 t2 ref a a 23 t1.a 5 DROP TABLE t1, t2; +CREATE TABLE t1 ( +kunde_intern_id int(10) unsigned NOT NULL default '0', +kunde_id int(10) unsigned NOT NULL default '0', +FK_firma_id int(10) unsigned NOT NULL default '0', +aktuell enum('Ja','Nein') NOT NULL default 'Ja', +vorname varchar(128) NOT NULL default '', +nachname varchar(128) NOT NULL default '', +geloescht enum('Ja','Nein') NOT NULL default 'Nein', +firma varchar(128) NOT NULL default '' +); +INSERT INTO t1 VALUES +(3964,3051,1,'Ja','Vorname1','1Nachname','Nein','Print Schau XXXX'), +(3965,3051111,1,'Ja','Vorname1111','1111Nachname','Nein','Print Schau XXXX'); +SELECT kunde_id ,FK_firma_id ,aktuell, vorname, nachname, geloescht FROM t1 +WHERE +( +( +( '' != '' AND firma LIKE CONCAT('%', '', '%')) +OR +(vorname LIKE CONCAT('%', 'Vorname1', '%') AND +nachname LIKE CONCAT('%', '1Nachname', '%') AND +'Vorname1' != '' AND 'xxxx' != '') +) +AND +( +aktuell = 'Ja' AND geloescht = 'Nein' AND FK_firma_id = 2 +) +) +; +kunde_id FK_firma_id aktuell vorname nachname geloescht +SELECT kunde_id ,FK_firma_id ,aktuell, vorname, nachname, +geloescht FROM t1 +WHERE +( +( +aktuell = 'Ja' AND geloescht = 'Nein' AND FK_firma_id = 2 +) +AND +( +( '' != '' AND firma LIKE CONCAT('%', '', '%') ) +OR +( vorname LIKE CONCAT('%', 'Vorname1', '%') AND +nachname LIKE CONCAT('%', '1Nachname', '%') AND 'Vorname1' != '' AND +'xxxx' != '') +) +) +; +kunde_id FK_firma_id aktuell vorname nachname geloescht +SELECT COUNT(*) FROM t1 WHERE +( 0 OR (vorname LIKE '%Vorname1%' AND nachname LIKE '%1Nachname%' AND 1)) +AND FK_firma_id = 2; +COUNT(*) +0 +drop table t1; diff --git a/mysql-test/t/select.test b/mysql-test/t/select.test index 9be08b8390b..6626397e9e5 100644 --- a/mysql-test/t/select.test +++ b/mysql-test/t/select.test @@ -1924,3 +1924,62 @@ EXPLAIN SELECT * FROM t1 LEFT JOIN t2 USE INDEX (a) ON t1.a=t2.a; EXPLAIN SELECT * FROM t1 LEFT JOIN t2 FORCE INDEX (a) ON t1.a=t2.a; DROP TABLE t1, t2; + +# Test for BUG#10095 +CREATE TABLE t1 ( + kunde_intern_id int(10) unsigned NOT NULL default '0', + kunde_id int(10) unsigned NOT NULL default '0', + FK_firma_id int(10) unsigned NOT NULL default '0', + aktuell enum('Ja','Nein') NOT NULL default 'Ja', + vorname varchar(128) NOT NULL default '', + nachname varchar(128) NOT NULL default '', + geloescht enum('Ja','Nein') NOT NULL default 'Nein', + firma varchar(128) NOT NULL default '' +); + +INSERT INTO t1 VALUES + (3964,3051,1,'Ja','Vorname1','1Nachname','Nein','Print Schau XXXX'), + (3965,3051111,1,'Ja','Vorname1111','1111Nachname','Nein','Print Schau XXXX'); + + +SELECT kunde_id ,FK_firma_id ,aktuell, vorname, nachname, geloescht FROM t1 + WHERE + ( + ( + ( '' != '' AND firma LIKE CONCAT('%', '', '%')) + OR + (vorname LIKE CONCAT('%', 'Vorname1', '%') AND + nachname LIKE CONCAT('%', '1Nachname', '%') AND + 'Vorname1' != '' AND 'xxxx' != '') + ) + AND + ( + aktuell = 'Ja' AND geloescht = 'Nein' AND FK_firma_id = 2 + ) + ) + ; + +SELECT kunde_id ,FK_firma_id ,aktuell, vorname, nachname, +geloescht FROM t1 + WHERE + ( + ( + aktuell = 'Ja' AND geloescht = 'Nein' AND FK_firma_id = 2 + ) + AND + ( + ( '' != '' AND firma LIKE CONCAT('%', '', '%') ) + OR + ( vorname LIKE CONCAT('%', 'Vorname1', '%') AND +nachname LIKE CONCAT('%', '1Nachname', '%') AND 'Vorname1' != '' AND +'xxxx' != '') + ) + ) + ; + +SELECT COUNT(*) FROM t1 WHERE +( 0 OR (vorname LIKE '%Vorname1%' AND nachname LIKE '%1Nachname%' AND 1)) +AND FK_firma_id = 2; + +drop table t1; + diff --git a/sql/sql_list.h b/sql/sql_list.h index 370642df2d0..9e62b7ce730 100644 --- a/sql/sql_list.h +++ b/sql/sql_list.h @@ -110,10 +110,32 @@ public: void remove(list_node **prev) { list_node *node=(*prev)->next; + if (&(*prev)->next == last) + { + /* + We're removing the last element from the list. Adjust "last" to point + to the previous element. + The other way to fix this would be to change this function to + remove_next() and have base_list_iterator save ptr to previous node + (one extra assignment in iterator++) but as the remove() of the last + element isn't a common operation it's faster to just walk through the + list from the beginning here. + */ + list_node *cur= first; + if (cur == *prev) + { + last= &first; + } + else + { + while (cur->next != *prev) + cur= cur->next; + last= &(cur->next); + } + } delete *prev; *prev=node; - if (!--elements) - last= &first; + elements--; } inline void *pop(void) { @@ -130,6 +152,54 @@ public: inline list_node *last_ref() { return &end_of_list; } friend class base_list_iterator; +#ifdef LIST_EXTRA_DEBUG + /* + Check list invariants and print results into trace. Invariants are: + - (*last) points to end_of_list + - There are no NULLs in the list. + - base_list::elements is the number of elements in the list. + + SYNOPSIS + check_list() + name Name to print to trace file + + RETURN + 1 The list is Ok. + 0 List invariants are not met. + */ + + bool check_list(const char *name) + { + base_list *list= this; + list_node *node= first; + uint cnt= 0; + + while (node->next != &end_of_list) + { + if (!node->info) + { + DBUG_PRINT("list_invariants",("%s: error: NULL element in the list", + name)); + return FALSE; + } + node= node->next; + cnt++; + } + if (last != &(node->next)) + { + DBUG_PRINT("list_invariants", ("%s: error: wrong last pointer", name)); + return FALSE; + } + if (cnt+1 != elements) + { + DBUG_PRINT("list_invariants", ("%s: error: wrong element count", name)); + return FALSE; + } + DBUG_PRINT("list_invariants", ("%s: list is ok", name)); + return TRUE; + } +#endif // LIST_EXTRA_DEBUG + protected: void after(void *info,list_node *node) { From 94f3584bc7455b7ac48bac6e69d9179ff31e46d7 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 16 May 2005 01:08:42 +0200 Subject: [PATCH 33/63] mysqltest.c: To solve bug#8455, call mysql_affected_rows() earlier, before query to find warnings client/mysqltest.c: To solve bug#8455, call mysql_affected_rows() earlier, before query to find warnings --- client/mysqltest.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/client/mysqltest.c b/client/mysqltest.c index 1f95f1eaeeb..e60d9ecd1c5 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -2597,6 +2597,8 @@ static int run_query_normal(MYSQL* mysql, struct st_query* q, int flags) if (!disable_result_log) { + ulong affected_rows; /* Ok to be undef if 'disable_info' is set */ + if (res) { MYSQL_FIELD *field= mysql_fetch_fields(res); @@ -2619,6 +2621,13 @@ static int run_query_normal(MYSQL* mysql, struct st_query* q, int flags) append_result(ds, res); } + /* + Need to call mysql_affected_rows() before the new + query to find the warnings + */ + if (!disable_info) + affected_rows= (ulong)mysql_affected_rows(mysql); + /* Add all warnings to the result */ if (!disable_warnings && mysql_warning_count(mysql)) { @@ -2641,7 +2650,7 @@ static int run_query_normal(MYSQL* mysql, struct st_query* q, int flags) if (!disable_info) { char buf[40]; - sprintf(buf,"affected rows: %lu\n",(ulong) mysql_affected_rows(mysql)); + sprintf(buf,"affected rows: %lu\n", affected_rows); dynstr_append(ds, buf); if (mysql_info(mysql)) { From bc933962a3a74b58a5e5db404a22f0f775012178 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 16 May 2005 12:19:10 +0300 Subject: [PATCH 34/63] relaxed DBUG_ASSERT in Item_int_with_ref::new_item() to "any constant" (BUG#10020) mysql-test/r/subselect.result: test fro bug 10020 mysql-test/t/subselect.test: bug 10020 test suite sql/item.cc: any constant allowed here BUG#10020) BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted --- BitKeeper/etc/logging_ok | 1 + mysql-test/r/subselect.result | 24 ++++++++++++++++++++++++ mysql-test/t/subselect.test | 24 ++++++++++++++++++++++++ sql/item.cc | 2 +- 4 files changed, 50 insertions(+), 1 deletion(-) diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index 246de2fffa2..daacb337570 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -29,6 +29,7 @@ bar@gw.udmsearch.izhnet.ru bar@mysql.com bar@noter.intranet.mysql.r18.ru bell@51.0.168.192.in-addr.arpa +bell@book.sanja.is.com.ua bell@laptop.sanja.is.com.ua bell@sanja.is.com.ua bk@admin.bk diff --git a/mysql-test/r/subselect.result b/mysql-test/r/subselect.result index 8f17f545d1a..1f3542802a7 100644 --- a/mysql-test/r/subselect.result +++ b/mysql-test/r/subselect.result @@ -2697,3 +2697,27 @@ select (1,2,3) = (select * from t1); ERROR 21000: Operand should contain 3 column(s) select (select * from t1) = (1,2,3); ERROR 21000: Operand should contain 2 column(s) +drop table t1 +#; +CREATE TABLE `t1` ( +`itemid` bigint(20) unsigned NOT NULL auto_increment, +`sessionid` bigint(20) unsigned default NULL, +`time` int(10) unsigned NOT NULL default '0', +`type` set('A','D','E','F','G','I','L','N','U') collate latin1_general_ci NOT +NULL default '', +`data` text collate latin1_general_ci NOT NULL, +PRIMARY KEY (`itemid`) +) DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `t1` VALUES (1, 1, 1, 'D', ''); +CREATE TABLE `t2` ( +`sessionid` bigint(20) unsigned NOT NULL auto_increment, +`pid` int(10) unsigned NOT NULL default '0', +`date` int(10) unsigned NOT NULL default '0', +`ip` varchar(15) collate latin1_general_ci NOT NULL default '', +PRIMARY KEY (`sessionid`) +) DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `t2` VALUES (1, 1, 1, '10.10.10.1'); +SELECT s.ip, count( e.itemid ) FROM `t1` e JOIN t2 s ON s.sessionid = e.sessionid WHERE e.sessionid = ( SELECT sessionid FROM t2 ORDER BY sessionid DESC LIMIT 1 ) GROUP BY s.ip HAVING count( e.itemid ) >0 LIMIT 0 , 30; +ip count( e.itemid ) +10.10.10.1 1 +drop tables t1,t2; diff --git a/mysql-test/t/subselect.test b/mysql-test/t/subselect.test index 1882a04936c..e585022563f 100644 --- a/mysql-test/t/subselect.test +++ b/mysql-test/t/subselect.test @@ -1722,3 +1722,27 @@ select (1,2,3) = (select * from t1); -- error 1241 select (select * from t1) = (1,2,3); drop table t1 + +# +# Item_int_with_ref check (BUG#10020) +# +CREATE TABLE `t1` ( + `itemid` bigint(20) unsigned NOT NULL auto_increment, + `sessionid` bigint(20) unsigned default NULL, + `time` int(10) unsigned NOT NULL default '0', + `type` set('A','D','E','F','G','I','L','N','U') collate latin1_general_ci NOT +NULL default '', + `data` text collate latin1_general_ci NOT NULL, + PRIMARY KEY (`itemid`) +) DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `t1` VALUES (1, 1, 1, 'D', ''); +CREATE TABLE `t2` ( + `sessionid` bigint(20) unsigned NOT NULL auto_increment, + `pid` int(10) unsigned NOT NULL default '0', + `date` int(10) unsigned NOT NULL default '0', + `ip` varchar(15) collate latin1_general_ci NOT NULL default '', + PRIMARY KEY (`sessionid`) +) DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `t2` VALUES (1, 1, 1, '10.10.10.1'); +SELECT s.ip, count( e.itemid ) FROM `t1` e JOIN t2 s ON s.sessionid = e.sessionid WHERE e.sessionid = ( SELECT sessionid FROM t2 ORDER BY sessionid DESC LIMIT 1 ) GROUP BY s.ip HAVING count( e.itemid ) >0 LIMIT 0 , 30; +drop tables t1,t2; diff --git a/sql/item.cc b/sql/item.cc index 6c1506e10e8..59785813566 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -2034,7 +2034,7 @@ bool Item_int::eq(const Item *arg, bool binary_cmp) const Item *Item_int_with_ref::new_item() { - DBUG_ASSERT(ref->basic_const_item()); + DBUG_ASSERT(ref->const_item()); /* We need to evaluate the constant to make sure it works with parameter markers. From 4b2020c575c1604dd5955f1296f4a3f57c671d9b Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 16 May 2005 14:06:52 +0000 Subject: [PATCH 35/63] Some improvement in Item_int_with_ref class comment. --- sql/item.h | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/sql/item.h b/sql/item.h index 8fed871e623..2edbeef400c 100644 --- a/sql/item.h +++ b/sql/item.h @@ -1027,12 +1027,14 @@ public: void print(String *str); }; + /* The following class is used to optimize comparing of date and bigint columns - We need to save the original item, to be able to set the field to the - original value in 'opt_range'. - An instance of Item_int_with_ref may refer to a signed or an unsigned - integer. + We need to save the original item ('ref') to be able to call + ref->save_in_field(). This is used to create index search keys. + + An instance of Item_int_with_ref may have signed or unsigned integer value. + */ class Item_int_with_ref :public Item_int From f80fa96d1c1eb867d65598fd8ad1e3044fb7362a Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 16 May 2005 20:16:46 +0300 Subject: [PATCH 36/63] Fix memory leak client/mysql.cc: Remove usage of c_ptr_safe() as this causes a linkage problem when compiling MySQL without inline functions sql/sql_base.cc: Don't use c_ptr_safe() on this string as this causes a realloc and the String object (allocated by sql_yacc.yy) is never freed --- client/mysql.cc | 7 ++++--- sql/sql_base.cc | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/client/mysql.cc b/client/mysql.cc index 6a76a1fbd1b..a3262c818f3 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -2051,7 +2051,8 @@ print_table_data(MYSQL_RES *result) separator.fill(separator.length()+length+2,'-'); separator.append('+'); } - tee_puts(separator.c_ptr_safe(), PAGER); + separator.append('\0'); // End marker for \0 + tee_puts((char*) separator.ptr(), PAGER); if (column_names) { mysql_field_seek(result,0); @@ -2064,7 +2065,7 @@ print_table_data(MYSQL_RES *result) num_flag[off]= IS_NUM(field->type); } (void) tee_fputs("\n", PAGER); - tee_puts(separator.c_ptr(), PAGER); + tee_puts((char*) separator.ptr(), PAGER); } while ((cur= mysql_fetch_row(result))) @@ -2093,7 +2094,7 @@ print_table_data(MYSQL_RES *result) } (void) tee_fputs("\n", PAGER); } - tee_puts(separator.c_ptr(), PAGER); + tee_puts((char*) separator.ptr(), PAGER); my_afree((gptr) num_flag); } diff --git a/sql/sql_base.cc b/sql/sql_base.cc index e86362c857b..c580842ce06 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -2522,7 +2522,7 @@ bool get_key_map_from_key_list(key_map *map, TABLE *table, if ((pos= find_type(&table->keynames, name->ptr(), name->length(), 1)) <= 0) { - my_error(ER_KEY_COLUMN_DOES_NOT_EXITS, MYF(0), name->c_ptr_safe(), + my_error(ER_KEY_COLUMN_DOES_NOT_EXITS, MYF(0), name->c_ptr(), table->real_name); map->set_all(); return 1; From 26b619b3381fbc095649cab69c9c2e7ca8907867 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 18 May 2005 10:22:27 +0200 Subject: [PATCH 37/63] ndberror.c: updated error message for ndb ndb/src/ndbapi/ndberror.c: updated error message for ndb BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted --- BitKeeper/etc/logging_ok | 1 + ndb/src/ndbapi/ndberror.c | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index daacb337570..2ed4bf2a5d3 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -250,6 +250,7 @@ tonu@x3.internalnet tsmith@build.mysql.com tulin@build.mysql.com tulin@dl145b.mysql.com +tulin@dl145c.mysql.com tulin@mysql.com ulli@morbus.(none) venu@hundin.mysql.fi diff --git a/ndb/src/ndbapi/ndberror.c b/ndb/src/ndbapi/ndberror.c index 71b0ed6a82f..04c25f31387 100644 --- a/ndb/src/ndbapi/ndberror.c +++ b/ndb/src/ndbapi/ndberror.c @@ -298,8 +298,8 @@ ErrorBundle ErrorCodes[] = { { 703, SE, "Invalid table format" }, { 704, SE, "Attribute name too long" }, { 705, SE, "Table name too long" }, - { 707, SE, "No more table metadata records" }, - { 708, SE, "No more attribute metadata records" }, + { 707, SE, "No more table metadata records (increase MaxNoOfTables)" }, + { 708, SE, "No more attribute metadata records (increase MaxNoOfAttributes)" }, { 709, SE, "No such table existed" }, { 721, SE, "Table or index with given name already exists" }, { 723, SE, "No such table existed" }, From afe67793856b04a4888696dff18b731ad4882241 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 18 May 2005 10:57:07 +0200 Subject: [PATCH 38/63] test fixes mysql-test/mysql-test-run.sh: always use --no-defaults mysql-test/t/range.test: range.test does not requires innodb --- mysql-test/mysql-test-run.sh | 2 +- mysql-test/t/range.test | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/mysql-test/mysql-test-run.sh b/mysql-test/mysql-test-run.sh index 581c6c66fdd..4fee560ee44 100644 --- a/mysql-test/mysql-test-run.sh +++ b/mysql-test/mysql-test-run.sh @@ -691,7 +691,7 @@ fi MYSQL_DUMP="$MYSQL_DUMP --no-defaults -uroot --socket=$MASTER_MYSOCK --password=$DBPASSWD $EXTRA_MYSQLDUMP_OPT" MYSQL_BINLOG="$MYSQL_BINLOG --no-defaults --local-load=$MYSQL_TMP_DIR $EXTRA_MYSQLBINLOG_OPT" MYSQL_FIX_SYSTEM_TABLES="$MYSQL_FIX_SYSTEM_TABLES --no-defaults --host=localhost --port=$MASTER_MYPORT --socket=$MASTER_MYSOCK --user=root --password=$DBPASSWD --basedir=$BASEDIR --bindir=$CLIENT_BINDIR --verbose" -MYSQL="$MYSQL --host=localhost --port=$MASTER_MYPORT --socket=$MASTER_MYSOCK --user=root --password=$DBPASSWD" +MYSQL="$MYSQL --no-defaults --host=localhost --port=$MASTER_MYPORT --socket=$MASTER_MYSOCK --user=root --password=$DBPASSWD" export MYSQL MYSQL_DUMP MYSQL_BINLOG MYSQL_FIX_SYSTEM_TABLES export CLIENT_BINDIR MYSQL_CLIENT_TEST CHARSETSDIR export NDB_TOOLS_DIR diff --git a/mysql-test/t/range.test b/mysql-test/t/range.test index 8c27d876bc8..b51a79fba77 100644 --- a/mysql-test/t/range.test +++ b/mysql-test/t/range.test @@ -1,5 +1,3 @@ --- source include/have_innodb.inc - # # Problem with range optimizer # From fce1521033206932e71d7ecf7c07dd82f8238200 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 18 May 2005 04:17:13 -0700 Subject: [PATCH 39/63] sql_yacc.yy: Added missing ';'. sql/sql_yacc.yy: Added missing ';'. --- sql/sql_yacc.yy | 1 + 1 file changed, 1 insertion(+) diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 28d3560e5f0..2edad446499 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -2475,6 +2475,7 @@ select_options: YYABORT; } } + ; select_option_list: select_option_list select_option From 0a2b07254f85b9e3a1a5a4bc52bb44957006cc31 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 18 May 2005 05:15:48 -0700 Subject: [PATCH 40/63] olap.result, olap.test: Added test cases for bug #7914. sql_select.cc: Fixed bug #7914: rollup over expresssions such as sum(a)+1. sql/sql_select.cc: Fixed bug #7914: rollup over expresssions such as sum(a)+1. mysql-test/t/olap.test: Added test cases for bug #7914. mysql-test/r/olap.result: Added test cases for bug #7914. --- mysql-test/r/olap.result | 33 +++++++++++++++++++++++++++++++++ mysql-test/t/olap.test | 24 ++++++++++++++++++++++++ sql/sql_select.cc | 6 +++--- 3 files changed, 60 insertions(+), 3 deletions(-) diff --git a/mysql-test/r/olap.result b/mysql-test/r/olap.result index 341d51033f2..013952403d7 100644 --- a/mysql-test/r/olap.result +++ b/mysql-test/r/olap.result @@ -405,3 +405,36 @@ a m 2 2 NULL 3 DROP TABLE t1; +CREATE TABLE t1 (a int(11)); +INSERT INTO t1 VALUES (1),(2); +SELECT a, SUM(a), SUM(a)+1 FROM (SELECT a FROM t1 UNION select 2) d +GROUP BY a; +a SUM(a) SUM(a)+1 +1 1 2 +2 2 3 +SELECT a, SUM(a), SUM(a)+1 FROM (SELECT a FROM t1 UNION select 2) d +GROUP BY a WITH ROLLUP; +a SUM(a) SUM(a)+1 +1 1 2 +2 2 3 +NULL 3 4 +SELECT a, SUM(a), SUM(a)+1 FROM (SELECT 1 a UNION select 2) d +GROUP BY a; +a SUM(a) SUM(a)+1 +1 1 2 +2 2 3 +SELECT a, SUM(a), SUM(a)+1 FROM (SELECT 1 a UNION select 2) d +GROUP BY a WITH ROLLUP; +a SUM(a) SUM(a)+1 +1 1 2 +2 2 3 +NULL 3 4 +SELECT a, SUM(a), SUM(a)+1, CONCAT(SUM(a),'x'), SUM(a)+SUM(a), SUM(a) +FROM (SELECT 1 a, 2 b UNION SELECT 2,3 UNION SELECT 5,6 ) d +GROUP BY a WITH ROLLUP; +a SUM(a) SUM(a)+1 CONCAT(SUM(a),'x') SUM(a)+SUM(a) SUM(a) +1 1 2 1x 2 1 +2 2 3 2x 4 2 +5 5 6 5x 10 5 +NULL 8 9 8x 16 8 +DROP TABLE t1; diff --git a/mysql-test/t/olap.test b/mysql-test/t/olap.test index 4f3b0f51286..09ba537bf3b 100644 --- a/mysql-test/t/olap.test +++ b/mysql-test/t/olap.test @@ -184,3 +184,27 @@ SELECT a, SUM(a) m FROM t1 GROUP BY a WITH ROLLUP; SELECT * FROM ( SELECT a, SUM(a) m FROM t1 GROUP BY a WITH ROLLUP ) t2; DROP TABLE t1; + +# +# Tests for bug #7914: ROLLUP over expressions on temporary table +# + +CREATE TABLE t1 (a int(11)); +INSERT INTO t1 VALUES (1),(2); + +SELECT a, SUM(a), SUM(a)+1 FROM (SELECT a FROM t1 UNION select 2) d + GROUP BY a; +SELECT a, SUM(a), SUM(a)+1 FROM (SELECT a FROM t1 UNION select 2) d + GROUP BY a WITH ROLLUP; + +SELECT a, SUM(a), SUM(a)+1 FROM (SELECT 1 a UNION select 2) d + GROUP BY a; +SELECT a, SUM(a), SUM(a)+1 FROM (SELECT 1 a UNION select 2) d + GROUP BY a WITH ROLLUP; + +SELECT a, SUM(a), SUM(a)+1, CONCAT(SUM(a),'x'), SUM(a)+SUM(a), SUM(a) + FROM (SELECT 1 a, 2 b UNION SELECT 2,3 UNION SELECT 5,6 ) d + GROUP BY a WITH ROLLUP; + +DROP TABLE t1; + diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 1ff3328b8a8..fb7f10abb52 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -1181,7 +1181,7 @@ JOIN::exec() } curr_all_fields= &tmp_all_fields1; curr_fields_list= &tmp_fields_list1; - set_items_ref_array(items1); + curr_join->set_items_ref_array(items1); if (sort_and_group || curr_tmp_table->group) { @@ -1314,7 +1314,7 @@ JOIN::exec() } curr_fields_list= &curr_join->tmp_fields_list2; curr_all_fields= &curr_join->tmp_all_fields2; - set_items_ref_array(items2); + curr_join->set_items_ref_array(items2); curr_join->tmp_table_param.field_count+= curr_join->tmp_table_param.sum_func_count; curr_join->tmp_table_param.sum_func_count= 0; @@ -1375,7 +1375,7 @@ JOIN::exec() } curr_fields_list= &tmp_fields_list3; curr_all_fields= &tmp_all_fields3; - set_items_ref_array(items3); + curr_join->set_items_ref_array(items3); if (curr_join->make_sum_func_list(*curr_all_fields, *curr_fields_list, 1) || thd->is_fatal_error) From 8c4e286064d04e06bc6e1efa87dcb2e04fb09e25 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 18 May 2005 16:41:32 +0300 Subject: [PATCH 41/63] reduced 1 server reloding during test BitKeeper/deleted/.del-grant_cache-master.opt~1b04b4b1116a7a2: Delete: mysql-test/t/grant_cache-master.opt mysql-test/r/grant_cache.result: query cache management moved inside test mysql-test/t/grant_cache.test: query cache management moved inside test to privent server reloading during test --- mysql-test/r/grant_cache.result | 2 ++ mysql-test/t/grant_cache-master.opt | 1 - mysql-test/t/grant_cache.test | 4 ++++ 3 files changed, 6 insertions(+), 1 deletion(-) delete mode 100644 mysql-test/t/grant_cache-master.opt diff --git a/mysql-test/r/grant_cache.result b/mysql-test/r/grant_cache.result index d905e9319fd..2c6840d77d0 100644 --- a/mysql-test/r/grant_cache.result +++ b/mysql-test/r/grant_cache.result @@ -1,5 +1,6 @@ drop table if exists test.t1,mysqltest.t1,mysqltest.t2; drop database if exists mysqltest; +set GLOBAL query_cache_size=1355776; reset query cache; flush status; show grants for current_user; @@ -206,3 +207,4 @@ delete from mysql.columns_priv where user in ("mysqltest_1","mysqltest_2","mysql flush privileges; drop table test.t1,mysqltest.t1,mysqltest.t2; drop database mysqltest; +set GLOBAL query_cache_size=default; diff --git a/mysql-test/t/grant_cache-master.opt b/mysql-test/t/grant_cache-master.opt deleted file mode 100644 index cfdce628e74..00000000000 --- a/mysql-test/t/grant_cache-master.opt +++ /dev/null @@ -1 +0,0 @@ ---set-variable=query_cache_size=1355776 diff --git a/mysql-test/t/grant_cache.test b/mysql-test/t/grant_cache.test index 7d6f7262f0a..0fb0b3c2fc0 100644 --- a/mysql-test/t/grant_cache.test +++ b/mysql-test/t/grant_cache.test @@ -10,6 +10,8 @@ drop table if exists test.t1,mysqltest.t1,mysqltest.t2; drop database if exists mysqltest; --enable_warnings +set GLOBAL query_cache_size=1355776; + reset query cache; flush status; connect (root,localhost,root,,test,$MASTER_MYPORT,master.sock); @@ -145,3 +147,5 @@ delete from mysql.columns_priv where user in ("mysqltest_1","mysqltest_2","mysql flush privileges; drop table test.t1,mysqltest.t1,mysqltest.t2; drop database mysqltest; + +set GLOBAL query_cache_size=default; From fed9e19112195386c1b354f50ca18d9a3933c10c Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 18 May 2005 17:47:43 +0200 Subject: [PATCH 42/63] ndb - allow upgrade 4.1.10->4.1.12 ndb/src/common/util/version.c: allow upgrade 4.1.10->4.1.12 --- ndb/src/common/util/version.c | 1 + 1 file changed, 1 insertion(+) diff --git a/ndb/src/common/util/version.c b/ndb/src/common/util/version.c index 8cc6de0fc24..ed2e2565eea 100644 --- a/ndb/src/common/util/version.c +++ b/ndb/src/common/util/version.c @@ -90,6 +90,7 @@ void ndbSetOwnVersion() {} #ifndef TEST_VERSION struct NdbUpGradeCompatible ndbCompatibleTable_full[] = { + { MAKE_VERSION(4,1,12), MAKE_VERSION(4,1,10), UG_Range }, { MAKE_VERSION(4,1,10), MAKE_VERSION(4,1,9), UG_Exact }, { MAKE_VERSION(4,1,9), MAKE_VERSION(4,1,8), UG_Exact }, { MAKE_VERSION(3,5,2), MAKE_VERSION(3,5,1), UG_Exact }, From eff871bd6ce85c5e4eedcac8bc756f8d1799233b Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 18 May 2005 09:12:37 -0700 Subject: [PATCH 43/63] Small optimization to bug fix, from Monty. client/mysqldump.c: Optimize away a call to strend() by using return value of my_snprintf() --- client/mysqldump.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/client/mysqldump.c b/client/mysqldump.c index 8cfd76cd64a..a3487ed6f50 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -1104,6 +1104,7 @@ static uint getTableStructure(char *table, char* db) char table_buff2[NAME_LEN*2+3]; char query_buff[512]; FILE *sql_file = md_result_file; + int len; DBUG_ENTER("getTableStructure"); if (!insert_pat_inited) @@ -1118,11 +1119,11 @@ static uint getTableStructure(char *table, char* db) if (verbose) fprintf(stderr, "-- Retrieving table structure for table %s...\n", table); - my_snprintf(query_buff, sizeof(query_buff), - "SET OPTION SQL_QUOTE_SHOW_CREATE=%d", - (opt_quoted || opt_keywords)); + len= my_snprintf(query_buff, sizeof(query_buff), + "SET OPTION SQL_QUOTE_SHOW_CREATE=%d", + (opt_quoted || opt_keywords)); if (!create_options) - strmov(strend(query_buff), "/*!40102 ,SQL_MODE=concat(@@sql_mode, _utf8 ',NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS') */"); + strmov(query_buff+len, "/*!40102 ,SQL_MODE=concat(@@sql_mode, _utf8 ',NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS') */"); result_table= quote_name(table, table_buff, 1); opt_quoted_table= quote_name(table, table_buff2, 0); From 53af474ba0f27752bfded418c424cae296e07da6 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 18 May 2005 09:40:12 -0700 Subject: [PATCH 44/63] Update mysqldump test and results mysql-test/r/mysqldump.result: Update results mysql-test/t/mysqldump.test: Fix test to not include version number in results --- mysql-test/r/mysqldump.result | 134 +++++++++++++++------------------- mysql-test/t/mysqldump.test | 2 +- 2 files changed, 61 insertions(+), 75 deletions(-) diff --git a/mysql-test/r/mysqldump.result b/mysql-test/r/mysqldump.result index 43741b244cd..493c6d6404a 100644 --- a/mysql-test/r/mysqldump.result +++ b/mysql-test/r/mysqldump.result @@ -559,6 +559,66 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +DROP TABLE t1; +CREATE TABLE t1 (a decimal(240, 20)); +INSERT INTO t1 VALUES ("1234567890123456789012345678901234567890"), +("0987654321098765432109876543210987654321"); + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; +DROP TABLE IF EXISTS `t1`; +CREATE TABLE `t1` ( + `a` decimal(240,20) default NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + + +/*!40000 ALTER TABLE `t1` DISABLE KEYS */; +LOCK TABLES `t1` WRITE; +INSERT IGNORE INTO `t1` VALUES ('1234567890123456789012345678901234567890.00000000000000000000'),('0987654321098765432109876543210987654321.00000000000000000000'); +UNLOCK TABLES; +/*!40000 ALTER TABLE `t1` ENABLE KEYS */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; +DROP TABLE IF EXISTS `t1`; +CREATE TABLE `t1` ( + `a` decimal(240,20) default NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + + +/*!40000 ALTER TABLE `t1` DISABLE KEYS */; +INSERT DELAYED IGNORE INTO `t1` VALUES ('1234567890123456789012345678901234567890.00000000000000000000'),('0987654321098765432109876543210987654321.00000000000000000000'); +/*!40000 ALTER TABLE `t1` ENABLE KEYS */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + DROP TABLE t1; create table t1 ( F_c4ca4238a0b923820dcc509a6f75849b int, @@ -892,11 +952,6 @@ F_cd00692c3bfe59267d5ecfac5310286c int, F_6faa8040da20ef399b63a72d0e4ab575 int, F_fe73f687e5bc5280214e0486b273a5f9 int); insert into t1 (F_8d3bba7425e7c98c50f52ca1b52d3735) values (1); --- MySQL dump 10.9 --- --- Host: localhost Database: test --- ------------------------------------------------------ --- Server version 4.1.12-debug-log /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; @@ -906,11 +961,6 @@ insert into t1 (F_8d3bba7425e7c98c50f52ca1b52d3735) values (1); /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; - --- --- Table structure for table `t1` --- - DROP TABLE IF EXISTS `t1`; CREATE TABLE `t1` ( `F_c4ca4238a0b923820dcc509a6f75849b` int(11) default NULL, @@ -1245,10 +1295,6 @@ CREATE TABLE `t1` ( `F_fe73f687e5bc5280214e0486b273a5f9` int(11) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1; --- --- Dumping data for table `t1` --- - /*!40000 ALTER TABLE `t1` DISABLE KEYS */; LOCK TABLES `t1` WRITE; @@ -1265,63 +1311,3 @@ UNLOCK TABLES; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; drop table t1; -CREATE TABLE t1 (a decimal(240, 20)); -INSERT INTO t1 VALUES ("1234567890123456789012345678901234567890"), -("0987654321098765432109876543210987654321"); - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8 */; -/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -DROP TABLE IF EXISTS `t1`; -CREATE TABLE `t1` ( - `a` decimal(240,20) default NULL -) ENGINE=MyISAM DEFAULT CHARSET=latin1; - - -/*!40000 ALTER TABLE `t1` DISABLE KEYS */; -LOCK TABLES `t1` WRITE; -INSERT IGNORE INTO `t1` VALUES ('1234567890123456789012345678901234567890.00000000000000000000'),('0987654321098765432109876543210987654321.00000000000000000000'); -UNLOCK TABLES; -/*!40000 ALTER TABLE `t1` ENABLE KEYS */; - -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; - - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8 */; -/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -DROP TABLE IF EXISTS `t1`; -CREATE TABLE `t1` ( - `a` decimal(240,20) default NULL -) ENGINE=MyISAM DEFAULT CHARSET=latin1; - - -/*!40000 ALTER TABLE `t1` DISABLE KEYS */; -INSERT DELAYED IGNORE INTO `t1` VALUES ('1234567890123456789012345678901234567890.00000000000000000000'),('0987654321098765432109876543210987654321.00000000000000000000'); -/*!40000 ALTER TABLE `t1` ENABLE KEYS */; - -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; - -DROP TABLE t1; diff --git a/mysql-test/t/mysqldump.test b/mysql-test/t/mysqldump.test index 6237279f8a2..2681e690ff5 100644 --- a/mysql-test/t/mysqldump.test +++ b/mysql-test/t/mysqldump.test @@ -532,5 +532,5 @@ create table t1 ( F_6faa8040da20ef399b63a72d0e4ab575 int, F_fe73f687e5bc5280214e0486b273a5f9 int); insert into t1 (F_8d3bba7425e7c98c50f52ca1b52d3735) values (1); ---exec $MYSQL_DUMP -c test +--exec $MYSQL_DUMP --skip-comments -c test drop table t1; From 0461b482cb5151a9d52edc732ac6413e1dc3c000 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 18 May 2005 19:40:39 +0200 Subject: [PATCH 45/63] Bug#10400 - Improperly-defined MERGE table crashes with INSERT ... ON DUPLICATE KEY UPDATE After review version. Added a condition for MERGE tables. These do not have unique indexes. But every key could be a unique key on the underlying MyISAM table. So get the maximum key length for MERGE tables instead of the maximum unique key length. This is used for buffer allocation in write_record(). mysql-test/r/merge.result: Bug#10400 - Improperly-defined MERGE table crashes with INSERT ... ON DUPLICATE KEY UPDATE The test result. mysql-test/t/merge.test: Bug#10400 - Improperly-defined MERGE table crashes with INSERT ... ON DUPLICATE KEY UPDATE The test case does not in all cases show the problem without the bugfix. The improper memory allocation might get through undetected in many cases. sql/ha_myisammrg.h: Bug#10400 - Improperly-defined MERGE table crashes with INSERT ... ON DUPLICATE KEY UPDATE Set a table_flag for the MERGE engine telling that any index might be unique without being specified as such. sql/handler.h: Bug#10400 - Improperly-defined MERGE table crashes with INSERT ... ON DUPLICATE KEY UPDATE Added a new table_flag telling that any index might be unique without being specified as such. sql/sql_insert.cc: Bug#10400 - Improperly-defined MERGE table crashes with INSERT ... ON DUPLICATE KEY UPDATE Changed the freeing of the memory to be symmetric to its allocation (my_safe_alloc -> my_safe_afree). This is not directly related to the bug. sql/table.cc: Bug#10400 - Improperly-defined MERGE table crashes with INSERT ... ON DUPLICATE KEY UPDATE Added a condition for MERGE tables. These do not have unique indexes. But every key could be a unique key on the underlying MyISAM table. So get the maximum key length for MERGE tables instead of the maximum unique key length. This is used for buffer allocation in write_record(). --- mysql-test/r/merge.result | 10 ++++++++++ mysql-test/t/merge.test | 12 ++++++++++++ sql/ha_myisammrg.h | 2 +- sql/handler.h | 1 + sql/sql_insert.cc | 2 +- sql/table.cc | 7 ++++++- 6 files changed, 31 insertions(+), 3 deletions(-) diff --git a/mysql-test/r/merge.result b/mysql-test/r/merge.result index 79d8f019ce3..6e14e9a56a8 100644 --- a/mysql-test/r/merge.result +++ b/mysql-test/r/merge.result @@ -681,3 +681,13 @@ t3 1 a 1 a A NULL NULL NULL YES BTREE t3 1 a 2 b A NULL NULL NULL YES BTREE t3 1 a 3 c A NULL NULL NULL YES BTREE drop table t1, t2, t3; +CREATE TABLE t1 ( a INT AUTO_INCREMENT PRIMARY KEY, b VARCHAR(10), UNIQUE (b) ) +ENGINE=MyISAM; +CREATE TABLE t2 ( a INT AUTO_INCREMENT, b VARCHAR(10), INDEX (a), INDEX (b) ) +ENGINE=MERGE UNION (t1) INSERT_METHOD=FIRST; +INSERT INTO t2 (b) VALUES (1) ON DUPLICATE KEY UPDATE b=2; +INSERT INTO t2 (b) VALUES (1) ON DUPLICATE KEY UPDATE b=3; +SELECT b FROM t2; +b +3 +DROP TABLE t1, t2; diff --git a/mysql-test/t/merge.test b/mysql-test/t/merge.test index 508f9da225e..999dd2bed9b 100644 --- a/mysql-test/t/merge.test +++ b/mysql-test/t/merge.test @@ -306,3 +306,15 @@ show index from t3; drop table t1, t2, t3; +# +# Bug#10400 - Improperly-defined MERGE table crashes with INSERT ... ON DUPLICATE KEY UPDATE +# +CREATE TABLE t1 ( a INT AUTO_INCREMENT PRIMARY KEY, b VARCHAR(10), UNIQUE (b) ) + ENGINE=MyISAM; +CREATE TABLE t2 ( a INT AUTO_INCREMENT, b VARCHAR(10), INDEX (a), INDEX (b) ) + ENGINE=MERGE UNION (t1) INSERT_METHOD=FIRST; +INSERT INTO t2 (b) VALUES (1) ON DUPLICATE KEY UPDATE b=2; +INSERT INTO t2 (b) VALUES (1) ON DUPLICATE KEY UPDATE b=3; +SELECT b FROM t2; +DROP TABLE t1, t2; + diff --git a/sql/ha_myisammrg.h b/sql/ha_myisammrg.h index 3bc9c11d4be..7348096b695 100644 --- a/sql/ha_myisammrg.h +++ b/sql/ha_myisammrg.h @@ -37,7 +37,7 @@ class ha_myisammrg: public handler { return (HA_REC_NOT_IN_SEQ | HA_AUTO_PART_KEY | HA_READ_RND_SAME | HA_NULL_IN_KEY | HA_CAN_INDEX_BLOBS | HA_FILE_BASED | - HA_CAN_INSERT_DELAYED); + HA_CAN_INSERT_DELAYED | HA_ANY_INDEX_MAY_BE_UNIQUE); } ulong index_flags(uint inx, uint part, bool all_parts) const { diff --git a/sql/handler.h b/sql/handler.h index de932cd51a4..75e83082d10 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -73,6 +73,7 @@ #define HA_HAS_CHECKSUM (1 << 24) /* Table data are stored in separate files (for lower_case_table_names) */ #define HA_FILE_BASED (1 << 26) +#define HA_ANY_INDEX_MAY_BE_UNIQUE (1 << 30) /* bits in index_flags(index_number) for what you can do with index */ diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index a3a42ce385d..0258f2c3e07 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -682,7 +682,7 @@ int write_record(TABLE *table,COPY_INFO *info) err: if (key) - my_afree(key); + my_safe_afree(key,table->max_unique_length,MAX_KEY_LENGTH); info->last_errno= error; table->file->print_error(error,MYF(0)); DBUG_RETURN(1); diff --git a/sql/table.cc b/sql/table.cc index 012defa116d..d9000933ee0 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -688,7 +688,12 @@ int openfrm(const char *name, const char *alias, uint db_stat, uint prgflag, set_if_bigger(outparam->max_key_length,keyinfo->key_length+ keyinfo->key_parts); outparam->total_key_length+= keyinfo->key_length; - if (keyinfo->flags & HA_NOSAME) + /* + MERGE tables do not have unique indexes. But every key could be + an unique index on the underlying MyISAM table. (Bug #10400) + */ + if ((keyinfo->flags & HA_NOSAME) || + (ha_option & HA_ANY_INDEX_MAY_BE_UNIQUE)) set_if_bigger(outparam->max_unique_length,keyinfo->key_length); } if (primary_key < MAX_KEY && From e507f6a15ec33b762c7d6475a49d8c760316d19c Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 18 May 2005 21:31:39 +0200 Subject: [PATCH 46/63] udf: when banning paths from soname in CREATE FUNCTION, check for \ on windows. when reporting an error, use an appropriate buffer for udf->name --- sql/sql_udf.cc | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/sql/sql_udf.cc b/sql/sql_udf.cc index ae83cfef305..556e015e111 100644 --- a/sql/sql_udf.cc +++ b/sql/sql_udf.cc @@ -190,7 +190,9 @@ void udf_init() This is done to ensure that only approved dll from the system directories are used (to make this even remotely secure). */ - if (strchr(dl_name, '/') || strlen(name) > NAME_LEN) + if (strchr(dl_name, '/') || + IF_WIN(strchr(dl_name, '\\'),0) || + strlen(name) > NAME_LEN) { sql_print_error("Invalid row in mysql.func table for function '%.64s'", name); @@ -219,7 +221,7 @@ void udf_init() } tmp->dlhandle = dl; { - char buf[MAX_FIELD_NAME+16], *missing; + char buf[NAME_LEN+16], *missing; if ((missing= init_syms(tmp, buf))) { sql_print_error(ER(ER_CANT_FIND_DL_ENTRY), missing); @@ -403,7 +405,7 @@ int mysql_create_function(THD *thd,udf_func *udf) This is done to ensure that only approved dll from the system directories are used (to make this even remotely secure). */ - if (strchr(udf->dl, '/')) + if (strchr(udf->dl, '/') || IF_WIN(strchr(dl_name, '\\'),0)) { send_error(&thd->net, ER_UDF_NO_PATHS,ER(ER_UDF_NO_PATHS)); DBUG_RETURN(1); @@ -433,7 +435,7 @@ int mysql_create_function(THD *thd,udf_func *udf) } udf->dlhandle=dl; { - char buf[MAX_FIELD_NAME+16], *missing; + char buf[NAME_LEN+16], *missing; if ((missing= init_syms(udf, buf))) { net_printf(&thd->net, ER_CANT_FIND_DL_ENTRY, missing); From 275aa247405e3fbd364598132858b27e9e47cc7d Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 19 May 2005 09:47:13 +0200 Subject: [PATCH 47/63] after merge fix --- mysql-test/r/select.result | 2 +- sql/sql_udf.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/select.result b/mysql-test/r/select.result index 38ebd26abe4..c39d1a322e4 100644 --- a/mysql-test/r/select.result +++ b/mysql-test/r/select.result @@ -2454,7 +2454,7 @@ select all distinct * from t1; ERROR HY000: Incorrect usage of ALL and DISTINCT select distinct all * from t1; ERROR HY000: Incorrect usage of ALL and DISTINCT -DROP TABLE t1; +drop table t1; CREATE TABLE t1 ( kunde_intern_id int(10) unsigned NOT NULL default '0', kunde_id int(10) unsigned NOT NULL default '0', diff --git a/sql/sql_udf.cc b/sql/sql_udf.cc index 7157111b25c..31205c0a614 100644 --- a/sql/sql_udf.cc +++ b/sql/sql_udf.cc @@ -195,7 +195,7 @@ void udf_init() */ if (strchr(dl_name, '/') || IF_WIN(strchr(dl_name, '\\'),0) || - strlen(name) > NAME_LEN) + strlen(name.str) > NAME_LEN) { sql_print_error("Invalid row in mysql.func table for function '%.64s'", name.str); From e439e7c649132351c7807a15ff76917d0a6d7280 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 19 May 2005 12:34:15 +0200 Subject: [PATCH 48/63] CSC#4944: Adding File_size to output of SHOW BINARY lOGS mysql-test/r/rpl_log.result: Adding File_size to output of SHOW BINARY lOGS mysql-test/r/rpl_rotate_logs.result: Adding File_size to output of SHOW BINARY lOGS sql/sql_repl.cc: Adding File_size to output of SHOW BINARY lOGS --- mysql-test/r/rpl_log.result | 12 +++++------ mysql-test/r/rpl_rotate_logs.result | 30 +++++++++++++------------- sql/sql_repl.cc | 33 ++++++++++++++++++++++++++--- 3 files changed, 51 insertions(+), 24 deletions(-) diff --git a/mysql-test/r/rpl_log.result b/mysql-test/r/rpl_log.result index 2f8a54369c9..7813d4d779d 100644 --- a/mysql-test/r/rpl_log.result +++ b/mysql-test/r/rpl_log.result @@ -67,14 +67,14 @@ master-bin.000002 110 Query 1 110 use `test`; create table t1 (n int) master-bin.000002 168 Query 1 168 use `test`; insert into t1 values (1) master-bin.000002 228 Query 1 228 use `test`; drop table t1 show binary logs; -Log_name -master-bin.000001 -master-bin.000002 +Log_name File_size +master-bin.000001 0 +master-bin.000002 276 start slave; show binary logs; -Log_name -slave-bin.000001 -slave-bin.000002 +Log_name File_size +slave-bin.000001 0 +slave-bin.000002 170 show binlog events in 'slave-bin.000001' from 4; Log_name Pos Event_type Server_id Orig_log_pos Info slave-bin.000001 4 Start 2 4 Server ver: VERSION, Binlog ver: 3 diff --git a/mysql-test/r/rpl_rotate_logs.result b/mysql-test/r/rpl_rotate_logs.result index 62e5522fad9..66eef482a63 100644 --- a/mysql-test/r/rpl_rotate_logs.result +++ b/mysql-test/r/rpl_rotate_logs.result @@ -26,10 +26,10 @@ create table t2(m int not null auto_increment primary key); insert into t2 values (34),(67),(123); flush logs; show binary logs; -Log_name -master-bin.000001 -master-bin.000002 -master-bin.000003 +Log_name File_size +master-bin.000001 0 +master-bin.000002 0 +master-bin.000003 4 create table t3 select * from temp_table; select * from t3; a @@ -42,18 +42,18 @@ set global sql_slave_skip_counter=1; start slave; purge master logs to 'master-bin.000002'; show master logs; -Log_name -master-bin.000002 -master-bin.000003 +Log_name File_size +master-bin.000002 0 +master-bin.000003 229 purge binary logs to 'master-bin.000002'; show binary logs; -Log_name -master-bin.000002 -master-bin.000003 +Log_name File_size +master-bin.000002 0 +master-bin.000003 229 purge master logs before now(); show binary logs; -Log_name -master-bin.000003 +Log_name File_size +master-bin.000003 229 insert into t2 values (65); show slave status; Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master @@ -73,9 +73,9 @@ count(*) 100 create table t4 select * from temp_table; show binary logs; -Log_name -master-bin.000003 -master-bin.000004 +Log_name File_size +master-bin.000003 0 +master-bin.000004 2886 show master status; File Position Binlog_Do_DB Binlog_Ignore_DB master-bin.000004 2886 diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc index d02bb5ff0a3..24b78bc9a3d 100644 --- a/sql/sql_repl.cc +++ b/sql/sql_repl.cc @@ -1337,6 +1337,11 @@ int show_binlog_info(THD* thd) int show_binlogs(THD* thd) { IO_CACHE *index_file; + LOG_INFO cur; + IO_CACHE log; + File file; + const char *errmsg= 0; + MY_STAT stat_area; char fname[FN_REFLEN]; List field_list; uint length; @@ -1351,20 +1356,42 @@ int show_binlogs(THD* thd) } field_list.push_back(new Item_empty_string("Log_name", 255)); + field_list.push_back(new Item_return_int("File_size", 20, + MYSQL_TYPE_LONGLONG)); if (protocol->send_fields(&field_list, 1)) DBUG_RETURN(1); mysql_bin_log.lock_index(); index_file=mysql_bin_log.get_index_file(); - + + mysql_bin_log.get_current_log(&cur); + int cur_dir_len = dirname_length(cur.log_file_name); + reinit_io_cache(index_file, READ_CACHE, (my_off_t) 0, 0, 0); /* The file ends with EOF or empty line */ while ((length=my_b_gets(index_file, fname, sizeof(fname))) > 1) { + fname[--length] = '\0'; /* remove the newline */ + protocol->prepare_for_resend(); int dir_len = dirname_length(fname); - /* The -1 is for removing newline from fname */ - protocol->store(fname + dir_len, length-1-dir_len, &my_charset_bin); + protocol->store(fname + dir_len, length-dir_len, &my_charset_bin); + if(!(strncmp(fname+dir_len, cur.log_file_name+cur_dir_len, length-dir_len))) + { + /* this is the active log, use the active position */ + protocol->store((ulonglong) cur.pos); + } else { + /* this is an old log, open it and find the size */ + if ((file=open_binlog(&log, fname+dir_len, &errmsg)) >= 0) + { + protocol->store((ulonglong) my_b_filelength(&log)); + end_io_cache(&log); + my_close(file, MYF(0)); + } else { + /* the file wasn't openable, but 0 is an invalid value anyway */ + protocol->store((ulonglong) 0); + } + } if (protocol->write()) goto err; } From b8d22413c0cd11d7cb6d8a45a67bf2359e604fe1 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 19 May 2005 22:53:35 +0500 Subject: [PATCH 49/63] hf's fix for bug #10626 ( gis.test fails) sql/spatial.cc: just float8get doesn't work well with the local variables - they can be of processor-specific floating type - not the standard decimal (by hf) --- sql/spatial.cc | 47 ++++++++++++++++++++++------------------------- 1 file changed, 22 insertions(+), 25 deletions(-) diff --git a/sql/spatial.cc b/sql/spatial.cc index bcfefd9dde8..1afb7bb7dec 100644 --- a/sql/spatial.cc +++ b/sql/spatial.cc @@ -96,6 +96,12 @@ static Geometry::Class_info geometrycollection_class("GEOMETRYCOLLECTION",Geometry::wkb_geometrycollection, create_geometrycollection); +static void get_point(double *x, double *y, const char *data) +{ + float8get(*x, data); + float8get(*y, data + SIZEOF_STORED_DOUBLE); +} + /***************************** Geometry *******************************/ Geometry::Class_info *Geometry::find_class(const char *name, uint32 len) @@ -266,14 +272,13 @@ const char *Geometry::append_points(String *txt, uint32 n_points, { while (n_points--) { - double d; + double x,y; data+= offset; - float8get(d, data); - txt->qs_append(d); - txt->qs_append(' '); - float8get(d, data + SIZEOF_STORED_DOUBLE); + get_point(&x, &y, data); data+= SIZEOF_STORED_DOUBLE * 2; - txt->qs_append(d); + txt->qs_append(x); + txt->qs_append(' '); + txt->qs_append(y); txt->qs_append(','); } return data; @@ -426,8 +431,7 @@ bool Gis_line_string::get_data_as_wkt(String *txt, const char **end) const while (n_points--) { double x, y; - float8get(x, data); - float8get(y, data + SIZEOF_STORED_DOUBLE); + get_point(&x, &y, data); data+= SIZEOF_STORED_DOUBLE * 2; txt->qs_append(x); txt->qs_append(' '); @@ -460,15 +464,13 @@ int Gis_line_string::length(double *len) const if (n_points < 1 || no_data(data, SIZEOF_STORED_DOUBLE * 2 * n_points)) return 1; - float8get(prev_x, data); - float8get(prev_y, data + SIZEOF_STORED_DOUBLE); + get_point(&prev_x, &prev_y, data); data+= SIZEOF_STORED_DOUBLE*2; while (--n_points) { double x, y; - float8get(x, data); - float8get(y, data + SIZEOF_STORED_DOUBLE); + get_point(&x, &y, data); data+= SIZEOF_STORED_DOUBLE * 2; *len+= sqrt(pow(prev_x-x,2)+pow(prev_y-y,2)); prev_x= x; @@ -497,13 +499,11 @@ int Gis_line_string::is_closed(int *closed) const return 1; /* Get first point */ - float8get(x1, data); - float8get(y1, data + SIZEOF_STORED_DOUBLE); + get_point(&x1, &y1, data); /* get last point */ data+= SIZEOF_STORED_DOUBLE*2 + (n_points-2)*POINT_DATA_SIZE; - float8get(x2, data); - float8get(y2, data + SIZEOF_STORED_DOUBLE); + get_point(&x2, &y2, data); *closed= (x1==x2) && (y1==y2); return 0; @@ -681,15 +681,13 @@ int Gis_polygon::area(double *ar, const char **end_of_data) const n_points= uint4korr(data); if (no_data(data, (SIZEOF_STORED_DOUBLE*2) * n_points)) return 1; - float8get(prev_x, data+4); - float8get(prev_y, data+(4+SIZEOF_STORED_DOUBLE)); + get_point(&prev_x, &prev_y, data+4); data+= (4+SIZEOF_STORED_DOUBLE*2); while (--n_points) // One point is already read { double x, y; - float8get(x, data); - float8get(y, data + SIZEOF_STORED_DOUBLE); + get_point(&x, &y, data); data+= (SIZEOF_STORED_DOUBLE*2); /* QQ: Is the following prev_x+x right ? */ lr_area+= (prev_x + x)* (prev_y - y); @@ -779,7 +777,8 @@ int Gis_polygon::interior_ring_n(uint32 num, String *result) const int Gis_polygon::centroid_xy(double *x, double *y) const { uint32 n_linear_rings; - double res_area, res_cx, res_cy; + double res_area; + double res_cx, res_cy; const char *data= m_data; bool first_loop= 1; LINT_INIT(res_area); @@ -805,15 +804,13 @@ int Gis_polygon::centroid_xy(double *x, double *y) const data+= 4; if (no_data(data, (SIZEOF_STORED_DOUBLE*2) * n_points)) return 1; - float8get(prev_x, data); - float8get(prev_y, data+SIZEOF_STORED_DOUBLE); + get_point(&prev_x, &prev_y, data); data+= (SIZEOF_STORED_DOUBLE*2); while (--n_points) // One point is already read { double x, y; - float8get(x, data); - float8get(y, data + SIZEOF_STORED_DOUBLE); + get_point(&x, &y, data); data+= (SIZEOF_STORED_DOUBLE*2); /* QQ: Is the following prev_x+x right ? */ cur_area+= (prev_x + x) * (prev_y - y); From f4a584f5013373f3c939df7cd7ef7ab444b18168 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 19 May 2005 15:18:49 -0500 Subject: [PATCH 50/63] This fixed a compile problem on Windows sql_udf.cc: changed dl_name to udf->dl in mysql_create_function sql/sql_udf.cc: changed dl_name to udf->dl in mysql_create_function --- sql/sql_udf.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/sql_udf.cc b/sql/sql_udf.cc index 31205c0a614..126d2e5d894 100644 --- a/sql/sql_udf.cc +++ b/sql/sql_udf.cc @@ -411,7 +411,7 @@ int mysql_create_function(THD *thd,udf_func *udf) This is done to ensure that only approved dll from the system directories are used (to make this even remotely secure). */ - if (strchr(udf->dl, '/') || IF_WIN(strchr(dl_name, '\\'),0)) + if (strchr(udf->dl, '/') || IF_WIN(strchr(udf->dl, '\\'),0)) { send_error(thd, ER_UDF_NO_PATHS,ER(ER_UDF_NO_PATHS)); DBUG_RETURN(1); From 1da5382a9fa37ffd9ebdf30b74b0a515af879a64 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 19 May 2005 16:02:14 -0500 Subject: [PATCH 51/63] BUG# 10687 - MERGE engine fails under Windows This patch was submitted by Ingo and it appears to work correctly. sql/ha_myisammrg.cc: use FN_LIBCHAR instead of / so buff works correctly on Windows strings/my_vsnprintf.c: add support for %c to my_vsnprintf --- sql/ha_myisammrg.cc | 5 +++-- strings/my_vsnprintf.c | 8 +++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/sql/ha_myisammrg.cc b/sql/ha_myisammrg.cc index 7a5d4fcf0a1..1bf2f8a31ad 100644 --- a/sql/ha_myisammrg.cc +++ b/sql/ha_myisammrg.cc @@ -406,8 +406,8 @@ int ha_myisammrg::create(const char *name, register TABLE *form, This means that it might not be possible to move the DATADIR of an embedded server without changing the paths in the .MRG file. */ - uint length= my_snprintf(buff, FN_REFLEN, "%s/%s/%s", mysql_data_home, - tables->db, tables->real_name); + uint length= my_snprintf(buff, FN_REFLEN, "%s%c%s/%s", mysql_data_home, + FN_LIBCHAR, tables->db, tables->real_name); /* If a MyISAM table is in the same directory as the MERGE table, we use the table name without a path. This means that the @@ -422,6 +422,7 @@ int ha_myisammrg::create(const char *name, register TABLE *form, } else table_name=(*tbl)->path; + DBUG_PRINT("info",("MyISAM table_name: '%s'", table_name)); *pos++= table_name; } *pos=0; diff --git a/strings/my_vsnprintf.c b/strings/my_vsnprintf.c index 268f7d18f2a..d92b291321b 100644 --- a/strings/my_vsnprintf.c +++ b/strings/my_vsnprintf.c @@ -28,7 +28,8 @@ %#[l]u %#[l]x %#.#s Note first # is ignored - + %c + RETURN length of result string */ @@ -120,6 +121,11 @@ int my_vsnprintf(char *to, size_t n, const char* fmt, va_list ap) to+= res_length; continue; } + else if (*fmt == 'c') + { + *(to++)= (char) va_arg(ap, int); + continue; + } /* We come here on '%%', unknown code or too long parameter */ if (to == end) break; From 2ef41d3d214282c993be2a2ea377150cf05a9e4b Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 20 May 2005 18:48:18 +0500 Subject: [PATCH 52/63] a fix (bug #10757: gis-rtree.test fails) myisam/sp_key.c: a fix (bug #10757: gis-rtree.test fails) float8get() doesn't properly work with local variables sometimes. --- myisam/sp_key.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/myisam/sp_key.c b/myisam/sp_key.c index b61e8094cde..1d43f89cba9 100644 --- a/myisam/sp_key.c +++ b/myisam/sp_key.c @@ -32,7 +32,11 @@ static int sp_get_geometry_mbr(uchar *(*wkb), uchar *end, uint n_dims, double *mbr, int top); static int sp_mbr_from_wkb(uchar (*wkb), uint size, uint n_dims, double *mbr); - +static void get_double(double *d, const byte *pos) +{ + float8get(*d, pos); +} + uint sp_make_key(register MI_INFO *info, uint keynr, uchar *key, const byte *record, my_off_t filepos) { @@ -80,7 +84,7 @@ uint sp_make_key(register MI_INFO *info, uint keynr, uchar *key, else if (keyseg->type == HA_KEYTYPE_DOUBLE) { double nr; - float8get(nr, pos); + get_double(&nr, pos); if (isnan(nr)) { bzero(key, length); @@ -138,7 +142,7 @@ static int sp_add_point_to_mbr(uchar *(*wkb), uchar *end, uint n_dims, { if ((*wkb) > end - 8) return -1; - float8get(ord, (*wkb)); + get_double(&ord, *wkb); (*wkb)+= 8; if (ord < *mbr) float8store((char*) mbr, ord); From c1ae672adda45a1b8c5637b8f4d6a3f91378ea20 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 20 May 2005 16:04:10 -0500 Subject: [PATCH 53/63] BUG# 9148: Denial of service The problem was that on Windows the access method indicates that access to file such as "com1" and "lpt1" is allowed (since they are device names) and this causes mysql to attempt to open them as databases or tables. The fix was to write our own my_access method that uses other Win32 functions to determine if the given argument is indeed a file and has to requested mode. VC++Files/mysys/mysys.dsp: added my_access VC++Files/mysys/mysys_ia64.dsp: added my_access.c include/my_sys.h: if on windows, we use my_access. if not on windows, then my_access points to the native access method mysys/Makefile.am: added my_access to mysys build file mysys/mf_pack.c: changed call to access to my_access sql/sql_db.cc: changed call to access to my_access --- VC++Files/mysys/mysys.dsp | 5 ++ VC++Files/mysys/mysys_ia64.dsp | 7 +++ include/my_sys.h | 5 ++ mysql-test/r/reserved_win_names.require | 2 + mysql-test/r/reserved_win_names.result | 7 +++ mysql-test/t/reserved_win_names-master.opt | 1 + mysql-test/t/reserved_win_names.test | 12 +++++ mysys/Makefile.am | 2 +- mysys/mf_pack.c | 2 +- mysys/my_access.c | 53 ++++++++++++++++++++++ sql/sql_db.cc | 2 +- 11 files changed, 95 insertions(+), 3 deletions(-) create mode 100644 mysql-test/r/reserved_win_names.require create mode 100644 mysql-test/r/reserved_win_names.result create mode 100644 mysql-test/t/reserved_win_names-master.opt create mode 100644 mysql-test/t/reserved_win_names.test create mode 100644 mysys/my_access.c diff --git a/VC++Files/mysys/mysys.dsp b/VC++Files/mysys/mysys.dsp index ad6caf1986e..f47203d37bf 100644 --- a/VC++Files/mysys/mysys.dsp +++ b/VC++Files/mysys/mysys.dsp @@ -186,6 +186,11 @@ SOURCE=.\array.c !ENDIF # End Source File + +# Begin Source File +SOURCE=".\my_access.c" +# End Source File + # Begin Source File SOURCE=".\charset-def.c" diff --git a/VC++Files/mysys/mysys_ia64.dsp b/VC++Files/mysys/mysys_ia64.dsp index ed2dac53579..a0877457286 100644 --- a/VC++Files/mysys/mysys_ia64.dsp +++ b/VC++Files/mysys/mysys_ia64.dsp @@ -163,6 +163,13 @@ LIB32=link.exe -lib # Name "mysys - WinIA64 Max" # Name "mysys - WinIA64 TLS_DEBUG" # Name "mysys - WinIA64 TLS" + +# Begin Source File + +SOURCE=.\my_access.c + +# End Source File + # Begin Source File SOURCE=.\array.c diff --git a/include/my_sys.h b/include/my_sys.h index c9552f8558b..a0a008056ae 100644 --- a/include/my_sys.h +++ b/include/my_sys.h @@ -573,6 +573,11 @@ extern char *_my_strdup_with_length(const byte *from, uint length, const char *sFile, uint uLine, myf MyFlag); +#ifdef __WIN__ +extern int my_access(const char *path, int amode); +#else +#define my_access access +#endif #ifndef TERMINATE extern void TERMINATE(FILE *file); diff --git a/mysql-test/r/reserved_win_names.require b/mysql-test/r/reserved_win_names.require new file mode 100644 index 00000000000..7f803aca482 --- /dev/null +++ b/mysql-test/r/reserved_win_names.require @@ -0,0 +1,2 @@ +Variable_name Value +lower_case_table_names 1 diff --git a/mysql-test/r/reserved_win_names.result b/mysql-test/r/reserved_win_names.result new file mode 100644 index 00000000000..eaa0f71513f --- /dev/null +++ b/mysql-test/r/reserved_win_names.result @@ -0,0 +1,7 @@ +use COM1; +ERROR 42000: Unknown database 'com1' +use LPT1; +ERROR 42000: Unknown database 'lpt1' +use PRN; +ERROR 42000: Unknown database 'prn' + diff --git a/mysql-test/t/reserved_win_names-master.opt b/mysql-test/t/reserved_win_names-master.opt new file mode 100644 index 00000000000..62ab6dad1e0 --- /dev/null +++ b/mysql-test/t/reserved_win_names-master.opt @@ -0,0 +1 @@ +--lower_case_table_names=1 diff --git a/mysql-test/t/reserved_win_names.test b/mysql-test/t/reserved_win_names.test new file mode 100644 index 00000000000..d9b23935ddf --- /dev/null +++ b/mysql-test/t/reserved_win_names.test @@ -0,0 +1,12 @@ +# +# Test of reserved Windows names +# +--require r/reserved_win_names.require + +--error 1049 +use COM1; +--error 1049 +use LPT1; +--error 1049 +use PRN; + diff --git a/mysys/Makefile.am b/mysys/Makefile.am index 3ae9c05bff5..ab35ccb21ba 100644 --- a/mysys/Makefile.am +++ b/mysys/Makefile.am @@ -53,7 +53,7 @@ libmysys_a_SOURCES = my_init.c my_getwd.c mf_getdate.c \ my_net.c my_semaphore.c my_port.c my_sleep.c \ charset.c charset-def.c my_bitmap.c my_bit.c md5.c \ my_gethostbyname.c rijndael.c my_aes.c sha1.c \ - my_handler.c my_netware.c my_windac.c + my_handler.c my_netware.c my_windac.c my_access.c EXTRA_DIST = thr_alarm.c thr_lock.c my_pthread.c my_thr_init.c \ thr_mutex.c thr_rwlock.c libmysys_a_LIBADD = @THREAD_LOBJECTS@ diff --git a/mysys/mf_pack.c b/mysys/mf_pack.c index 9193238708d..79b194289c6 100644 --- a/mysys/mf_pack.c +++ b/mysys/mf_pack.c @@ -226,7 +226,7 @@ void symdirget(char *dir) { char buff[FN_REFLEN]; char *pos=strend(dir); - if (dir[0] && pos[-1] != FN_DEVCHAR && access(dir, F_OK)) + if (dir[0] && pos[-1] != FN_DEVCHAR && !my_access(dir, F_OK)) { File file; uint length; diff --git a/mysys/my_access.c b/mysys/my_access.c new file mode 100644 index 00000000000..6a8887e42a6 --- /dev/null +++ b/mysys/my_access.c @@ -0,0 +1,53 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#include "mysys_priv.h" + +#ifdef __WIN__ + +/* + * Check a file or path for accessability. + * + * SYNOPSIS + * file_access() + * pathpath to check + * amodemode to check + * + * DESCRIPTION + * This function wraps the normal access method because the access + * available in MSVCRT> +reports that filenames such as LPT1 and + * COM1 are valid (they are but should not be so for us). + * + * RETURN VALUES + * 0 ok + * -1 error + */ +int my_access(const char *path, int amode) +{ + WIN32_FILE_ATTRIBUTE_DATA fileinfo; + BOOL result; + + result = GetFileAttributesEx(path, GetFileExInfoStandard, + &fileinfo); + if (! result) + return -1; + if ((fileinfo.dwFileAttributes & FILE_ATTRIBUTE_READONLY) && + (amode & 2)) + return -1; + return 0; +} + +#endif diff --git a/sql/sql_db.cc b/sql/sql_db.cc index c918480812c..ad6845572e1 100644 --- a/sql/sql_db.cc +++ b/sql/sql_db.cc @@ -946,7 +946,7 @@ bool mysql_change_db(THD *thd, const char *name) length=unpack_dirname(path,path); // Convert if not unix if (length && path[length-1] == FN_LIBCHAR) path[length-1]=0; // remove ending '\' - if (access(path,F_OK)) + if (my_access(path,F_OK)) { net_printf(thd,ER_BAD_DB_ERROR,dbname); my_free(dbname,MYF(0)); From 9b8e02741ab73838ffa9dd26dd94a560d9d3d667 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 20 May 2005 16:53:41 -0500 Subject: [PATCH 54/63] fixed stupid typo that added a ! before my_access --- mysys/mf_pack.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysys/mf_pack.c b/mysys/mf_pack.c index 79b194289c6..86172f648f4 100644 --- a/mysys/mf_pack.c +++ b/mysys/mf_pack.c @@ -226,7 +226,7 @@ void symdirget(char *dir) { char buff[FN_REFLEN]; char *pos=strend(dir); - if (dir[0] && pos[-1] != FN_DEVCHAR && !my_access(dir, F_OK)) + if (dir[0] && pos[-1] != FN_DEVCHAR && my_access(dir, F_OK)) { File file; uint length; From 442c072fdf6c7dd2b7fcad5a44c6438b980629f4 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 21 May 2005 12:31:58 -0500 Subject: [PATCH 55/63] BUG# 9148: Denial of service This is a second patch needing another review. The first patch didn't solve the entire problem. open and fopen on Windows will still open files like "com1.sym" when they shouldn't. This patch checks that the file exists before trying to open it. mysys/my_fopen.c: on Windows, if we are not creating a file the we call my_access to make sure the file exists before trying to open it. mysys/my_open.c: on Windows, if we are not creating a file the we call my_access to make sure the file exists before trying to open it. --- mysys/my_fopen.c | 18 +++++++++++++++--- mysys/my_open.c | 6 ++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/mysys/my_fopen.c b/mysys/my_fopen.c index e918b7b0de2..208e7e80fd8 100644 --- a/mysys/my_fopen.c +++ b/mysys/my_fopen.c @@ -33,9 +33,21 @@ FILE *my_fopen(const char *FileName, int Flags, myf MyFlags) DBUG_ENTER("my_fopen"); DBUG_PRINT("my",("Name: '%s' Flags: %d MyFlags: %d", FileName, Flags, MyFlags)); - - make_ftype(type,Flags); - if ((fd = fopen(FileName, type)) != 0) + /* + * if we are not creating, then we need to use my_access to make sure + * the file exists since Windows doesn't handle files like "com1.sym" very well + */ +#ifdef __WIN__ + if (! (Flags & O_CREAT) && my_access(FileName, F_OK)) + fd=0; + else +#endif + { + make_ftype(type,Flags); + fd = fopen(FileName, type); + } + + if (fd != 0) { /* The test works if MY_NFILE < 128. The problem is that fileno() is char diff --git a/mysys/my_open.c b/mysys/my_open.c index ca5c0d8683f..1f3bb95b5a2 100644 --- a/mysys/my_open.c +++ b/mysys/my_open.c @@ -46,6 +46,12 @@ File my_open(const char *FileName, int Flags, myf MyFlags) DBUG_PRINT("my",("Name: '%s' Flags: %d MyFlags: %d", FileName, Flags, MyFlags)); #if defined(MSDOS) || defined(__WIN__) || defined(__EMX__) || defined(OS2) + /* if we are not creating, then we need to use my_access to make + * sure the file exists since Windows doesn't handle files like + * "com1.sym" very well + */ + if (! (Flags & O_CREAT) && my_access(FileName, F_OK)) + return -1; if (Flags & O_SHARE) fd = sopen((my_string) FileName, (Flags & ~O_SHARE) | O_BINARY, SH_DENYNO, MY_S_IREAD | MY_S_IWRITE); From 6b964f0f102efb51c761091a4ee8f715604fb78a Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 23 May 2005 11:53:16 -0500 Subject: [PATCH 56/63] BUG# 10687: MERGE Engine fails on Windows This is a replacement for the original patch given by Ingo. This one comes from Monty. The problem is that merge files now use unix style pathnames on all platforms. The merge file open code was not properly converting those pathnames back to non-unix when necessary. myisammrg/myrg_open.c: use fn_format to convert pathnames if the files in the merge file have a pathname mysys/my_getwd.c: add a test for '/' in the code that determines if a string inlucdes a pathname --- myisammrg/myrg_open.c | 4 +++- mysys/my_getwd.c | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/myisammrg/myrg_open.c b/myisammrg/myrg_open.c index 0dc2f4f9768..f9cdc2bb205 100644 --- a/myisammrg/myrg_open.c +++ b/myisammrg/myrg_open.c @@ -67,7 +67,7 @@ MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking) while ((length=my_b_gets(&file,buff,FN_REFLEN-1))) { if ((end=buff+length)[-1] == '\n') - end[-1]='\0'; + *--end='\0'; if (!buff[0]) continue; /* Skip empty lines */ if (buff[0] == '#') @@ -86,6 +86,8 @@ MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking) sizeof(name_buff)-1-dir_length)); VOID(cleanup_dirname(buff,name_buff)); } + else + fn_format(buff, buff, "", "", 0); if (!(isam=mi_open(buff,mode,(handle_locking?HA_OPEN_WAIT_IF_LOCKED:0)))) goto err; if (!m_info) /* First file */ diff --git a/mysys/my_getwd.c b/mysys/my_getwd.c index 89f949eca27..14d68168acd 100644 --- a/mysys/my_getwd.c +++ b/mysys/my_getwd.c @@ -208,7 +208,7 @@ int test_if_hard_path(register const char *dir_name) my_bool has_path(const char *name) { - return test(strchr(name, FN_LIBCHAR)) + return test(strchr(name, FN_LIBCHAR)) || test(strchr(name,'/')) #ifdef FN_DEVCHAR || test(strchr(name, FN_DEVCHAR)) #endif From 3ca4caef3fa58fd48c1f14777e08f617e434a049 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 23 May 2005 18:53:53 +0200 Subject: [PATCH 57/63] Build fixes for icc, compile _without_ "-no-gnu" include/my_global.h: icc does not define __ICC when emulating gcc. Use __INTEL_COMPILER to check for icc. ndb/src/cw/cpcd/Process.cpp: Remove rlimit64 ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp: Remove dirent64 --- include/my_global.h | 2 +- ndb/src/cw/cpcd/Process.cpp | 5 +---- ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp | 4 ---- 3 files changed, 2 insertions(+), 9 deletions(-) diff --git a/include/my_global.h b/include/my_global.h index 62c6a5d1e4a..f059d603976 100644 --- a/include/my_global.h +++ b/include/my_global.h @@ -44,7 +44,7 @@ #endif /* __CYGWIN__ */ /* Determine when to use "#pragma interface" */ -#if !defined(__CYGWIN__) && !defined(__ICC) && defined(__GNUC__) && (__GNUC__ < 3) +#if !defined(__CYGWIN__) && !defined(__INTEL_COMPILER) && defined(__GNUC__) && (__GNUC__ < 3) #define USE_PRAGMA_INTERFACE #endif diff --git a/ndb/src/cw/cpcd/Process.cpp b/ndb/src/cw/cpcd/Process.cpp index cfffec7d0ce..431c96e3320 100644 --- a/ndb/src/cw/cpcd/Process.cpp +++ b/ndb/src/cw/cpcd/Process.cpp @@ -223,11 +223,8 @@ set_ulimit(const BaseString & pair){ if(!(list[1].trim() == "unlimited")){ value = atoi(list[1].c_str()); } -#if defined(__INTEL_COMPILER) - struct rlimit64 rlp; -#else + struct rlimit rlp; -#endif #define _RLIMIT_FIX(x) { res = getrlimit(x,&rlp); if(!res){ rlp.rlim_cur = value; res = setrlimit(x, &rlp); }} if(list[0].trim() == "c"){ diff --git a/ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp b/ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp index b3fc6e04d6c..f76440a462a 100644 --- a/ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp +++ b/ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp @@ -799,11 +799,7 @@ AsyncFile::rmrfReq(Request * request, char * path, bool removePath){ request->error = errno; return; } -#if defined(__INTEL_COMPILER) - struct dirent64 * dp; -#else struct dirent * dp; -#endif while ((dp = readdir(dirp)) != NULL){ if ((strcmp(".", dp->d_name) != 0) && (strcmp("..", dp->d_name) != 0)) { BaseString::snprintf(path_add, (size_t)path_max_copy, "%s%s", From 36b3f0a0529ab92fdedcbdefa7d1686b61f90429 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 23 May 2005 12:05:15 -0500 Subject: [PATCH 58/63] BUG# 10687: Merge engine fails under Windows This cset is to roll out the cset applied earlier from Ingo. This bug has been fixed with a different cset. sql/ha_myisammrg.cc: removed the patch applied earlier strings/my_vsnprintf.c: removed the patch applied earlier. The patch was to add %c ability. Monty has already done this. --- sql/ha_myisammrg.cc | 4 ++-- strings/my_vsnprintf.c | 6 ------ 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/sql/ha_myisammrg.cc b/sql/ha_myisammrg.cc index 1bf2f8a31ad..9270361980f 100644 --- a/sql/ha_myisammrg.cc +++ b/sql/ha_myisammrg.cc @@ -406,8 +406,8 @@ int ha_myisammrg::create(const char *name, register TABLE *form, This means that it might not be possible to move the DATADIR of an embedded server without changing the paths in the .MRG file. */ - uint length= my_snprintf(buff, FN_REFLEN, "%s%c%s/%s", mysql_data_home, - FN_LIBCHAR, tables->db, tables->real_name); + uint length= my_snprintf(buff, FN_REFLEN, "%s%s/%s", mysql_data_home, + tables->db, tables->real_name); /* If a MyISAM table is in the same directory as the MERGE table, we use the table name without a path. This means that the diff --git a/strings/my_vsnprintf.c b/strings/my_vsnprintf.c index d92b291321b..d0e529288f7 100644 --- a/strings/my_vsnprintf.c +++ b/strings/my_vsnprintf.c @@ -28,7 +28,6 @@ %#[l]u %#[l]x %#.#s Note first # is ignored - %c RETURN length of result string @@ -121,11 +120,6 @@ int my_vsnprintf(char *to, size_t n, const char* fmt, va_list ap) to+= res_length; continue; } - else if (*fmt == 'c') - { - *(to++)= (char) va_arg(ap, int); - continue; - } /* We come here on '%%', unknown code or too long parameter */ if (to == end) break; From 67c5514b908a6adfb0cd91dfe6dc9d0b0e21e1c1 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 23 May 2005 12:31:22 -0500 Subject: [PATCH 59/63] BUG#10687 - Merge engine fails under Windows This final cset is to fix a syntax problem in ha_myisammrg.cc where a / was left out of a format string. It also adds a check in has_path to avoid a possible redundant comparison. ha_myisammrg.cc: Replaced missing / in format string my_getwd.c: Added test to see if FN_LIBCHAR != '/' before doing comparison to avoid redundant comparison mysys/my_getwd.c: Added test to see if FN_LIBCHAR != '/' before doing comparison to avoid redundant comparison sql/ha_myisammrg.cc: Replaced missing / in format string --- mysys/my_getwd.c | 5 ++++- sql/ha_myisammrg.cc | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/mysys/my_getwd.c b/mysys/my_getwd.c index 14d68168acd..5663ceaa60e 100644 --- a/mysys/my_getwd.c +++ b/mysys/my_getwd.c @@ -208,7 +208,10 @@ int test_if_hard_path(register const char *dir_name) my_bool has_path(const char *name) { - return test(strchr(name, FN_LIBCHAR)) || test(strchr(name,'/')) + return test(strchr(name, FN_LIBCHAR)) +#if FN_LIBCHAR != '/' + || test(strchr(name,'/')) +#endif #ifdef FN_DEVCHAR || test(strchr(name, FN_DEVCHAR)) #endif diff --git a/sql/ha_myisammrg.cc b/sql/ha_myisammrg.cc index 9270361980f..0b160d72aab 100644 --- a/sql/ha_myisammrg.cc +++ b/sql/ha_myisammrg.cc @@ -406,7 +406,7 @@ int ha_myisammrg::create(const char *name, register TABLE *form, This means that it might not be possible to move the DATADIR of an embedded server without changing the paths in the .MRG file. */ - uint length= my_snprintf(buff, FN_REFLEN, "%s%s/%s", mysql_data_home, + uint length= my_snprintf(buff, FN_REFLEN, "%s/%s/%s", mysql_data_home, tables->db, tables->real_name); /* If a MyISAM table is in the same directory as the MERGE table, From 97bde75e4ed215354f86f1fd220e5eaf25920fc7 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 23 May 2005 14:48:25 -0500 Subject: [PATCH 60/63] BUG# 9148 Denial of service fixups of test case and comment formatting BitKeeper/deleted/.del-reserved_win_names-master.opt~e56da049a7ce9a5b: ***MISSING TEXT*** mysql-test/r/lowercase_table.result: added my test for bug #9148 to this test case mysql-test/t/lowercase_table.test: added my test for bug #9148 to this test case mysys/my_fopen.c: reformatted comments mysys/my_open.c: reformatted comments --- mysql-test/r/lowercase_table.result | 6 ++++++ mysql-test/t/lowercase_table.test | 11 +++++++++++ mysql-test/t/reserved_win_names-master.opt | 1 - mysys/my_fopen.c | 5 +++-- mysys/my_open.c | 7 ++++--- 5 files changed, 24 insertions(+), 6 deletions(-) delete mode 100644 mysql-test/t/reserved_win_names-master.opt diff --git a/mysql-test/r/lowercase_table.result b/mysql-test/r/lowercase_table.result index ef379cebaa9..499f46a237e 100644 --- a/mysql-test/r/lowercase_table.result +++ b/mysql-test/r/lowercase_table.result @@ -83,3 +83,9 @@ create table t2 like T1; drop table t1, t2; show tables; Tables_in_test +use lpt1; +ERROR 42000: Unknown database 'lpt1' +use com1; +ERROR 42000: Unknown database 'com1' +use prn; +ERROR 42000: Unknown database 'prn' diff --git a/mysql-test/t/lowercase_table.test b/mysql-test/t/lowercase_table.test index ee8dc403981..ca81c7c66bc 100644 --- a/mysql-test/t/lowercase_table.test +++ b/mysql-test/t/lowercase_table.test @@ -82,3 +82,14 @@ create table t2 like T1; drop table t1, t2; show tables; + +# +#Bug 9148: Denial of service +# +--error 1049 +use lpt1; +--error 1049 +use com1; +--error 1049 +use prn; + diff --git a/mysql-test/t/reserved_win_names-master.opt b/mysql-test/t/reserved_win_names-master.opt deleted file mode 100644 index 62ab6dad1e0..00000000000 --- a/mysql-test/t/reserved_win_names-master.opt +++ /dev/null @@ -1 +0,0 @@ ---lower_case_table_names=1 diff --git a/mysys/my_fopen.c b/mysys/my_fopen.c index 208e7e80fd8..4310250bd0d 100644 --- a/mysys/my_fopen.c +++ b/mysys/my_fopen.c @@ -34,8 +34,9 @@ FILE *my_fopen(const char *FileName, int Flags, myf MyFlags) DBUG_PRINT("my",("Name: '%s' Flags: %d MyFlags: %d", FileName, Flags, MyFlags)); /* - * if we are not creating, then we need to use my_access to make sure - * the file exists since Windows doesn't handle files like "com1.sym" very well + if we are not creating, then we need to use my_access to make sure + the file exists since Windows doesn't handle files like "com1.sym" + very well */ #ifdef __WIN__ if (! (Flags & O_CREAT) && my_access(FileName, F_OK)) diff --git a/mysys/my_open.c b/mysys/my_open.c index 1f3bb95b5a2..ea4d99c3e8c 100644 --- a/mysys/my_open.c +++ b/mysys/my_open.c @@ -46,9 +46,10 @@ File my_open(const char *FileName, int Flags, myf MyFlags) DBUG_PRINT("my",("Name: '%s' Flags: %d MyFlags: %d", FileName, Flags, MyFlags)); #if defined(MSDOS) || defined(__WIN__) || defined(__EMX__) || defined(OS2) - /* if we are not creating, then we need to use my_access to make - * sure the file exists since Windows doesn't handle files like - * "com1.sym" very well + /* + if we are not creating, then we need to use my_access to make + sure the file exists since Windows doesn't handle files like + "com1.sym" very well */ if (! (Flags & O_CREAT) && my_access(FileName, F_OK)) return -1; From b6c1f2302ab77e6cfd37bd05f8444ff0c82bc459 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 23 May 2005 23:54:39 +0200 Subject: [PATCH 61/63] marking the file gone again to hopefully get the tree on its feet BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted --- BitKeeper/etc/gone | 1 + BitKeeper/etc/logging_ok | 1 + 2 files changed, 2 insertions(+) diff --git a/BitKeeper/etc/gone b/BitKeeper/etc/gone index 63a759cf131..2d5522899d2 100644 --- a/BitKeeper/etc/gone +++ b/BitKeeper/etc/gone @@ -750,6 +750,7 @@ mwagner@work.mysql.com|mysql-test/r/3.23/sel000001.result|20001010091454|28284|3 mwagner@work.mysql.com|mysql-test/r/3.23/sel000002.result|20001010091454|29230|d1787e6fd5dbc1cc nick@nick.leippe.com|mysql-test/r/rpl_empty_master_crash.result|20020531235552|47718|615f521be2132141 nick@nick.leippe.com|mysql-test/t/rpl_empty_master_crash.test|20020531235552|52328|99464e737639ccc6 +reggie@mdk10.(none)|mysql-test/t/reserved_win_names-master.opt|20050520210356|14878|e56da049a7ce9a5b sasha@mysql.sashanet.com|BitKeeper/etc/logging_ok|20000801000905|12967|5b7d847a2158554 sasha@mysql.sashanet.com|build-tags|20011125054855|05181|7afb7e785b80f97 sasha@mysql.sashanet.com|build-tags|20011201050944|25384|b6f6fff142121618 diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index 2ed4bf2a5d3..aad4399302e 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -49,6 +49,7 @@ dlenev@mysql.com ejonore@mc03.ndb.mysql.com evgen@moonbone.(none) evgen@moonbone.local +gbichot@bk-internal.mysql.com gbichot@production.mysql.com gbichot@quadita2.mysql.com gbichot@quadxeon.mysql.com From efc7b884ebaa81416743b98fdbf909189443e70a Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 24 May 2005 11:44:34 +0100 Subject: [PATCH 62/63] Bug#7241 - Invalid response when DELETE .. USING and LOCK TABLES used. Only acquire necessary write lock for multi-delete mysql-test/r/lock.result: Test for Bug#7241 mysql-test/t/lock.test: Test for Bug#7241 sql/sql_parse.cc: Bug#7241 Don't acquire write lock on all tables. Make sure to set lock_type on real table_list --- mysql-test/r/lock.result | 10 ++++++++++ mysql-test/t/lock.test | 14 ++++++++++++++ sql/sql_parse.cc | 6 ++++++ 3 files changed, 30 insertions(+) diff --git a/mysql-test/r/lock.result b/mysql-test/r/lock.result index 429bc5ed352..54162a36d83 100644 --- a/mysql-test/r/lock.result +++ b/mysql-test/r/lock.result @@ -47,3 +47,13 @@ unlock tables; lock tables t1 write, t1 as t1_alias read; insert into t1 select index1,nr from t1 as t1_alias; drop table t1,t2; +create table t1 ( a int(11) not null auto_increment, primary key(a)); +create table t2 ( a int(11) not null auto_increment, primary key(a)); +lock tables t1 write, t2 read; +delete from t1 using t1,t2 where t1.a=t2.a; +delete t1 from t1,t2 where t1.a=t2.a; +delete from t2 using t1,t2 where t1.a=t2.a; +ERROR HY000: Table 't2' was locked with a READ lock and can't be updated +delete t2 from t1,t2 where t1.a=t2.a; +ERROR HY000: Table 't2' was locked with a READ lock and can't be updated +drop table t1,t2; diff --git a/mysql-test/t/lock.test b/mysql-test/t/lock.test index 26fc4e32bda..261c01b405c 100644 --- a/mysql-test/t/lock.test +++ b/mysql-test/t/lock.test @@ -59,3 +59,17 @@ unlock tables; lock tables t1 write, t1 as t1_alias read; insert into t1 select index1,nr from t1 as t1_alias; drop table t1,t2; + +# +# Bug7241 - Invalid response when DELETE .. USING and LOCK TABLES used. +# +create table t1 ( a int(11) not null auto_increment, primary key(a)); +create table t2 ( a int(11) not null auto_increment, primary key(a)); +lock tables t1 write, t2 read; +delete from t1 using t1,t2 where t1.a=t2.a; +delete t1 from t1,t2 where t1.a=t2.a; +--error 1099 +delete from t2 using t1,t2 where t1.a=t2.a; +--error 1099 +delete t2 from t1,t2 where t1.a=t2.a; +drop table t1,t2; diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index c5b429ec8fc..2c1723be5d9 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -4141,6 +4141,7 @@ void mysql_init_multi_delete(LEX *lex) lex->select_lex.select_limit= lex->unit.select_limit_cnt= HA_POS_ERROR; lex->select_lex.table_list.save_and_clear(&lex->auxilliary_table_list); + lex->lock_option= using_update_log ? TL_READ_NO_INSERT : TL_READ; } @@ -5437,6 +5438,11 @@ int multi_delete_precheck(THD *thd, TABLE_LIST *tables, uint *table_count) } walk->lock_type= target_tbl->lock_type; target_tbl->table_list= walk; // Remember corresponding table + if (walk->table_list) + { + target_tbl->table_list= walk->table_list; + walk->table_list->lock_type= walk->lock_type; + } } DBUG_RETURN(0); } From 1a8f64d71557fee049497827a6fbc6da46fed3d8 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 24 May 2005 13:38:46 +0100 Subject: [PATCH 63/63] Add comments --- sql/sql_parse.cc | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 2c1723be5d9..80c68dad247 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1992,6 +1992,10 @@ mysql_execute_command(THD *thd) #endif } #endif /* !HAVE_REPLICATION */ + + /* When subselects or time_zone info is used in a query + * we create a new TABLE_LIST containing all referenced tables + * and set local variable 'tables' to point to this list. */ if ((&lex->select_lex != lex->all_selects_list || lex->time_zone_tables_used) && lex->unit.create_total_list(thd, lex, &tables)) @@ -5438,6 +5442,9 @@ int multi_delete_precheck(THD *thd, TABLE_LIST *tables, uint *table_count) } walk->lock_type= target_tbl->lock_type; target_tbl->table_list= walk; // Remember corresponding table + + /* in case of subselects, we need to set lock_type in + * corresponding table in list of all tables */ if (walk->table_list) { target_tbl->table_list= walk->table_list;