From a2873d545f39ef804dc5d220b6380bc40838948a Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 23 Apr 2007 17:58:33 -0400 Subject: [PATCH 001/194] =?UTF-8?q?Contributed=20patch=20from=20Jorge=20Be?= =?UTF-8?q?rnal=20Ordov=C3=A1s.=20=20CLA#42?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug#27894: mysqlbinlog formats timestamp wrong in comment Date stamps lack zero padding, and so are meaningless. Implement minimum-width zero padding for the percent-escape sequences used in the logging code. mysql-test/r/mysqlbinlog2.result: Include the long form, so we notice that it may be broken. Replace away specific elements that vary from run to run. mysql-test/t/mysqlbinlog2.test: Include the long form, so we notice that it may be broken. Replace away specific elements that vary from run to run. mysys/mf_iocache2.c: Implement minimum-width padding for printf-style percent-expressions. --- mysql-test/r/mysqlbinlog2.result | 26 ++++++++++++++++++++++ mysql-test/t/mysqlbinlog2.test | 3 ++- mysys/mf_iocache2.c | 38 +++++++++++++++++++++++++++++--- 3 files changed, 63 insertions(+), 4 deletions(-) diff --git a/mysql-test/r/mysqlbinlog2.result b/mysql-test/r/mysqlbinlog2.result index ef6e4ee80fd..bb73ebde777 100644 --- a/mysql-test/r/mysqlbinlog2.result +++ b/mysql-test/r/mysqlbinlog2.result @@ -18,7 +18,11 @@ insert into t1 values(null, "f"); /*!40019 SET @@session.max_insert_delayed_threads=0*/; /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; DELIMITER /*!*/; +# at {pos} +#{yymmdd} {HH:MM:SS} server id 1 end_log_pos {pos} Start: binlog v 4, server v 5.1.18-beta-debug-log created {yymmdd} {HH:MM:SS} at startup ROLLBACK/*!*/; +# at {pos} +#{yymmdd} {HH:MM:SS} server id 1 end_log_pos {pos} Query thread_id={integer} exec_time={integer} error_code=0 use test/*!*/; SET TIMESTAMP=1579609942/*!*/; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1/*!*/; @@ -26,21 +30,43 @@ SET @@session.sql_mode=0/*!*/; /*!\C latin1 *//*!*/; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/; create table t1 (a int auto_increment not null primary key, b char(3))/*!*/; +# at {pos} +#{yymmdd} {HH:MM:SS} server id 1 end_log_pos {pos} Intvar SET INSERT_ID=1/*!*/; +# at {pos} +#{yymmdd} {HH:MM:SS} server id 1 end_log_pos {pos} Query thread_id={integer} exec_time={integer} error_code=0 SET TIMESTAMP=1579609942/*!*/; insert into t1 values(null, "a")/*!*/; +# at {pos} +#{yymmdd} {HH:MM:SS} server id 1 end_log_pos {pos} Intvar SET INSERT_ID=2/*!*/; +# at {pos} +#{yymmdd} {HH:MM:SS} server id 1 end_log_pos {pos} Query thread_id={integer} exec_time={integer} error_code=0 SET TIMESTAMP=1579609942/*!*/; insert into t1 values(null, "b")/*!*/; +# at {pos} +#{yymmdd} {HH:MM:SS} server id 1 end_log_pos {pos} Intvar SET INSERT_ID=3/*!*/; +# at {pos} +#{yymmdd} {HH:MM:SS} server id 1 end_log_pos {pos} Query thread_id={integer} exec_time={integer} error_code=0 SET TIMESTAMP=1579609944/*!*/; insert into t1 values(null, "c")/*!*/; +# at {pos} +#{yymmdd} {HH:MM:SS} server id 1 end_log_pos {pos} Intvar SET INSERT_ID=4/*!*/; +# at {pos} +#{yymmdd} {HH:MM:SS} server id 1 end_log_pos {pos} Query thread_id={integer} exec_time={integer} error_code=0 SET TIMESTAMP=1579609946/*!*/; insert into t1 values(null, "d")/*!*/; +# at {pos} +#{yymmdd} {HH:MM:SS} server id 1 end_log_pos {pos} Intvar SET INSERT_ID=5/*!*/; +# at {pos} +#{yymmdd} {HH:MM:SS} server id 1 end_log_pos {pos} Query thread_id={integer} exec_time={integer} error_code=0 SET TIMESTAMP=1579609946/*!*/; insert into t1 values(null, "e")/*!*/; +# at {pos} +#{yymmdd} {HH:MM:SS} server id 1 end_log_pos {pos} Rotate to master-bin.000002 pos: {pos} DELIMITER ; # End of log file ROLLBACK /* added by mysqlbinlog */; diff --git a/mysql-test/t/mysqlbinlog2.test b/mysql-test/t/mysqlbinlog2.test index ac647f772b1..3dadc970069 100644 --- a/mysql-test/t/mysqlbinlog2.test +++ b/mysql-test/t/mysqlbinlog2.test @@ -43,7 +43,8 @@ select "--- Local --" as ""; # be time dependent (the Start events). Better than nothing. # ---exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000001 +--replace_regex /[[:<:]][0-9]{6} [0-9 ][0-9]:[0-9]{2}:[0-9]{2}[[:>:]]/{yymmdd} {HH:MM:SS}/ /=[0-9]+ /={integer} / /# at [0-9]+/# at {pos}/ /(pos:?) [0-9]+/\1 {pos}/ +--exec $MYSQL_BINLOG $MYSQLTEST_VARDIR/log/master-bin.000001 --disable_query_log select "--- offset --" as ""; diff --git a/mysys/mf_iocache2.c b/mysys/mf_iocache2.c index bdb5d057a16..1d33b88e269 100644 --- a/mysys/mf_iocache2.c +++ b/mysys/mf_iocache2.c @@ -299,6 +299,7 @@ uint my_b_vprintf(IO_CACHE *info, const char* fmt, va_list args) uint minimum_width; /* as yet unimplemented */ uint minimum_width_sign; uint precision; /* as yet unimplemented for anything but %b */ + my_bool is_zero_padded; /* Store the location of the beginning of a format directive, for the @@ -334,11 +335,27 @@ uint my_b_vprintf(IO_CACHE *info, const char* fmt, va_list args) backtrack= fmt; fmt++; + is_zero_padded= FALSE; + minimum_width_sign= 1; minimum_width= 0; precision= 0; - minimum_width_sign= 1; /* Skip if max size is used (to be compatible with printf) */ - while (*fmt == '-') { fmt++; minimum_width_sign= -1; } + +process_flags: + switch (*fmt) + { + case '-': + minimum_width_sign= -1; fmt++; goto process_flags; + case '0': + is_zero_padded= TRUE; fmt++; goto process_flags; + case '#': + /** @todo Implement "#" conversion flag. */ fmt++; goto process_flags; + case ' ': + /** @todo Implement " " conversion flag. */ fmt++; goto process_flags; + case '+': + /** @todo Implement "+" conversion flag. */ fmt++; goto process_flags; + } + if (*fmt == '*') { precision= (int) va_arg(args, int); fmt++; @@ -367,7 +384,7 @@ uint my_b_vprintf(IO_CACHE *info, const char* fmt, va_list args) { reg2 char *par = va_arg(args, char *); uint length2 = (uint) strlen(par); - /* TODO: implement minimum width and precision */ + /* TODO: implement precision */ out_length+= length2; if (my_b_write(info, par, length2)) goto err; @@ -390,6 +407,21 @@ uint my_b_vprintf(IO_CACHE *info, const char* fmt, va_list args) length2= (uint) (int10_to_str((long) iarg,buff, -10) - buff); else length2= (uint) (int10_to_str((long) (uint) iarg,buff,10)- buff); + + /* minimum width padding */ + if (minimum_width > length2) + { + char *buffz; + + buffz= my_alloca(minimum_width - length2); + if (is_zero_padded) + memset(buffz, '0', minimum_width - length2); + else + memset(buffz, ' ', minimum_width - length2); + my_b_write(info, buffz, minimum_width - length2); + my_afree(buffz); + } + out_length+= length2; if (my_b_write(info, buff, length2)) goto err; From 32d280ba3202c416ecf3ad15f5d2a6316c7dd128 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 24 Apr 2007 18:42:46 +0500 Subject: [PATCH 002/194] bug #27405 (Partitioning InnoDB auto_increment bug) InnoDB engine changes internal auto_increment counter only after ha_innodb::write_row, so two threads can't simultaneously operate between ha_innodb::update_autoincrement and ha_innodb::write_row. So concurrent execution of ha_partition::write_row prevented sql/ha_partition.cc: use table_share->mutex to avoid concurrent write_row for AUTO_INCREMENTed table --- sql/ha_partition.cc | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc index 3c25dcd202f..5247e665b0f 100644 --- a/sql/ha_partition.cc +++ b/sql/ha_partition.cc @@ -2647,6 +2647,7 @@ int ha_partition::write_row(byte * buf) uint32 part_id; int error; longlong func_value; + bool autoincrement_lock= false; #ifdef NOT_NEEDED byte *rec0= m_rec0; #endif @@ -2662,7 +2663,21 @@ int ha_partition::write_row(byte * buf) or a new row, then update the auto_increment value in the record. */ if (table->next_number_field && buf == table->record[0]) + { + /* + Some engines (InnoDB for example) can change autoincrement + counter only after 'table->write_row' operation. + So if another thread gets inside the ha_partition::write_row + before it is complete, it gets same auto_increment value, + which means DUP_KEY error (bug #27405) + Here we separate the access using table_share->mutex, and + use autoincrement_lock variable to avoid unnecessary locks. + Probably not an ideal solution. + */ + autoincrement_lock= true; + pthread_mutex_lock(&table_share->mutex); update_auto_increment(); + } my_bitmap_map *old_map= dbug_tmp_use_all_columns(table, table->read_set); #ifdef NOT_NEEDED @@ -2683,11 +2698,15 @@ int ha_partition::write_row(byte * buf) if (unlikely(error)) { m_part_info->err_value= func_value; - DBUG_RETURN(error); + goto exit; } m_last_part= part_id; DBUG_PRINT("info", ("Insert in partition %d", part_id)); - DBUG_RETURN(m_file[part_id]->write_row(buf)); + error= m_file[part_id]->write_row(buf); +exit: + if (autoincrement_lock) + pthread_mutex_unlock(&table_share->mutex); + DBUG_RETURN(error); } From 92e04b7fd8a5dfb6095880511690eca0e03a3c9a Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 1 Aug 2007 14:52:10 +0400 Subject: [PATCH 003/194] Fix for Bug#28744, bug#29363 mysql-test/suite/rpl/include/rpl_mixed_dml.inc: Data file moved into var directory mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result: updated result file mysql-test/suite/rpl/t/disabled.def: updated file disabled.def --- .../suite/rpl/include/rpl_mixed_dml.inc | 4 +- .../suite/rpl/r/rpl_innodb_mixed_dml.result | 44 +++++++++---------- mysql-test/suite/rpl/t/disabled.def | 4 +- 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/mysql-test/suite/rpl/include/rpl_mixed_dml.inc b/mysql-test/suite/rpl/include/rpl_mixed_dml.inc index cc225d1bb28..ea5dd58bab2 100644 --- a/mysql-test/suite/rpl/include/rpl_mixed_dml.inc +++ b/mysql-test/suite/rpl/include/rpl_mixed_dml.inc @@ -51,7 +51,9 @@ DELETE FROM t2 WHERE a = 2; --echo --echo ******************** LOAD DATA INFILE ******************** -LOAD DATA INFILE '../../suite/rpl/data/rpl_mixed.dat' INTO TABLE t1 FIELDS TERMINATED BY '|' ; +--exec cp ./suite/rpl/data/rpl_mixed.dat ./var/tmp/ +LOAD DATA INFILE '../tmp/rpl_mixed.dat' INTO TABLE t1 FIELDS TERMINATED BY '|' ; +--exec rm ./var/tmp/rpl_mixed.dat SELECT * FROM t1; --source suite/rpl/include/rpl_mixed_check_select.inc --source suite/rpl/include/rpl_mixed_clear_tables.inc diff --git a/mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result b/mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result index 7100e5cbe9c..462400e12bb 100644 --- a/mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result +++ b/mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result @@ -103,7 +103,7 @@ DELETE FROM t1; DELETE FROM t2; ******************** LOAD DATA INFILE ******************** -LOAD DATA INFILE '../../suite/rpl/data/rpl_mixed.dat' INTO TABLE t1 FIELDS TERMINATED BY '|' ; +LOAD DATA INFILE '../tmp/rpl_mixed.dat' INTO TABLE t1 FIELDS TERMINATED BY '|' ; SELECT * FROM t1; a b 10 line A @@ -683,13 +683,13 @@ INSERT INTO t1 VALUES(1, 'test1'); CREATE EVENT e1 ON SCHEDULE EVERY '1' SECOND COMMENT 'e_second_comment' DO DELETE FROM t1; ==========MASTER========== SHOW EVENTS; -Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator -test_rpl e1 root@localhost SYSTEM RECURRING NULL 1 # # NULL ENABLED 1 +Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator character_set_client collation_connection Database Collation +test_rpl e1 root@localhost SYSTEM RECURRING NULL 1 # # NULL ENABLED 1 latin1 latin1_swedish_ci latin1_swedish_ci ==========SLAVE=========== USE test_rpl; SHOW EVENTS; -Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator -test_rpl e1 @ SYSTEM RECURRING NULL 1 # # NULL SLAVESIDE_DISABLED 1 +Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator character_set_client collation_connection Database Collation +test_rpl e1 @ SYSTEM RECURRING NULL 1 # # NULL SLAVESIDE_DISABLED 1 latin1 latin1_swedish_ci latin1_swedish_ci ==========MASTER========== SELECT COUNT(*) FROM t1; COUNT(*) @@ -743,13 +743,13 @@ a b ALTER EVENT e1 RENAME TO e2; ==========MASTER========== SHOW EVENTS; -Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator -test_rpl e2 root@localhost SYSTEM RECURRING NULL 1 # # NULL ENABLED 1 +Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator character_set_client collation_connection Database Collation +test_rpl e2 root@localhost SYSTEM RECURRING NULL 1 # # NULL ENABLED 1 latin1 latin1_swedish_ci latin1_swedish_ci ==========SLAVE=========== USE test_rpl; SHOW EVENTS; -Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator -test_rpl e2 @ SYSTEM RECURRING NULL 1 # # NULL SLAVESIDE_DISABLED 1 +Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator character_set_client collation_connection Database Collation +test_rpl e2 @ SYSTEM RECURRING NULL 1 # # NULL SLAVESIDE_DISABLED 1 latin1 latin1_swedish_ci latin1_swedish_ci ==========MASTER========== SELECT COUNT(*) FROM t1; COUNT(*) @@ -778,11 +778,11 @@ a b DROP EVENT e2; ==========MASTER========== SHOW EVENTS; -Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator +Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator character_set_client collation_connection Database Collation ==========SLAVE=========== USE test_rpl; SHOW EVENTS; -Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator +Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator character_set_client collation_connection Database Collation DELETE FROM t1; DELETE FROM t2; @@ -793,32 +793,32 @@ CREATE VIEW v1 AS SELECT * FROM t1 WHERE a = 1; CREATE VIEW v2 AS SELECT * FROM t1 WHERE b <> UUID(); ==========MASTER========== SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a`,`t1`.`b` AS `b` from `t1` where (`t1`.`a` = 1) +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a`,`t1`.`b` AS `b` from `t1` where (`t1`.`a` = 1) latin1 latin1_swedish_ci SELECT * FROM v1; a b 1 test1 ==========SLAVE=========== USE test_rpl; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a`,`t1`.`b` AS `b` from `t1` where (`t1`.`a` = 1) +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a`,`t1`.`b` AS `b` from `t1` where (`t1`.`a` = 1) latin1 latin1_swedish_ci SELECT * FROM v1; a b 1 test1 ALTER VIEW v1 AS SELECT * FROM t1 WHERE a = 2; ==========MASTER========== SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a`,`t1`.`b` AS `b` from `t1` where (`t1`.`a` = 2) +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a`,`t1`.`b` AS `b` from `t1` where (`t1`.`a` = 2) latin1 latin1_swedish_ci SELECT * FROM v1; a b 2 test2 ==========SLAVE=========== USE test_rpl; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a`,`t1`.`b` AS `b` from `t1` where (`t1`.`a` = 2) +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a`,`t1`.`b` AS `b` from `t1` where (`t1`.`a` = 2) latin1 latin1_swedish_ci SELECT * FROM v1; a b 2 test2 @@ -868,7 +868,7 @@ master-bin.000001 # Xid 1 # # master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t2 master-bin.000001 # Xid 1 # # master-bin.000001 # Begin_load_query 1 # ;file_id=1;block_len=30 -master-bin.000001 # Execute_load_query 1 # use `test_rpl`; LOAD DATA INFILE '../../suite/rpl/data/rpl_mixed.dat' INTO TABLE t1 FIELDS TERMINATED BY '|' ;file_id=1 +master-bin.000001 # Execute_load_query 1 # use `test_rpl`; LOAD DATA INFILE '../tmp/rpl_mixed.dat' INTO TABLE t1 FIELDS TERMINATED BY '|' ;file_id=1 master-bin.000001 # Xid 1 # # master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t1 master-bin.000001 # Xid 1 # # @@ -1004,9 +1004,7 @@ master-bin.000001 # Table_map 1 # table_id: # (test_rpl.t2) master-bin.000001 # Write_rows 1 # table_id: # master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F master-bin.000001 # Xid 1 # # -master-bin.000001 # Table_map 1 # table_id: # (test_rpl.t1) -master-bin.000001 # Table_map 1 # table_id: # (test_rpl.t2) -master-bin.000001 # Delete_rows 1 # table_id: # flags: STMT_END_F +master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t1 master-bin.000001 # Xid 1 # # master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t2 master-bin.000001 # Xid 1 # # diff --git a/mysql-test/suite/rpl/t/disabled.def b/mysql-test/suite/rpl/t/disabled.def index 2207e869154..fced67c2145 100644 --- a/mysql-test/suite/rpl/t/disabled.def +++ b/mysql-test/suite/rpl/t/disabled.def @@ -11,8 +11,8 @@ ############################################################################## rpl_ddl : BUG#26418 2007-03-01 mleich Slave out of sync after CREATE/DROP TEMPORARY TABLE + ROLLBACK on master -rpl_innodb_mixed_ddl : Bug #29363 rpl.rpl_innodb_mixed_* test failures -rpl_innodb_mixed_dml : Bug #29363 rpl.rpl_innodb_mixed_* test failures +#rpl_innodb_mixed_ddl : Bug #29363 rpl.rpl_innodb_mixed_* test failures +#rpl_innodb_mixed_dml : Bug #29363 rpl.rpl_innodb_mixed_* test failures rpl_invoked_features : BUG#29020 2007-06-21 Lars Non-deterministic test case rpl_auto_increment_11932 : Bug#29809 2007-07-16 ingo Slave SQL errors in warnings file rpl_stm_extraColmaster_ndb : WL#3915 : Statement-based replication not supported in ndb. Enable test when supported. From 70ae8f692f82a422cc27acf72e628a66ad2640a7 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 1 Aug 2007 08:50:38 -0700 Subject: [PATCH 004/194] On internals@mysql a developer at IBM pointed out that DBTYPE needed to be removed from the example (its a single line which was needed for previous versions of MySQL). Its been removed. Added a couple of comments. storage/example/ha_example.cc: Removed line, added comment about Skeleton. storage/example/plug.in: Corrected explanation --- storage/example/ha_example.cc | 5 ++++- storage/example/plug.in | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/storage/example/ha_example.cc b/storage/example/ha_example.cc index 06efc727837..1c3b84d3f5f 100644 --- a/storage/example/ha_example.cc +++ b/storage/example/ha_example.cc @@ -79,6 +79,10 @@ ha_example::open() would also have been necessary. Calls to ha_example::extra() are hints as to what will be occuring to the request. + A Longer Example can be found called the "Skeleton Engine" which can be + found on TangentOrg. It has both an engine and a full build environment + for building a pluggable storage engine. + Happy coding!
-Brian */ @@ -132,7 +136,6 @@ static int example_init_func(void *p) (hash_get_key) example_get_key,0,0); example_hton->state= SHOW_OPTION_YES; - example_hton->db_type= DB_TYPE_EXAMPLE_DB; example_hton->create= example_create_handler; example_hton->flags= HTON_CAN_RECREATE; diff --git a/storage/example/plug.in b/storage/example/plug.in index ba35b1ea117..ee6beaac64f 100644 --- a/storage/example/plug.in +++ b/storage/example/plug.in @@ -1,3 +1,3 @@ MYSQL_STORAGE_ENGINE(example,, [Example Storage Engine], - [Skeleton for Storage Engines for developers], [max,max-no-ndb]) + [Example for Storage Engines for developers], [max,max-no-ndb]) MYSQL_PLUGIN_DYNAMIC(example, [ha_example.la]) From 8277581b8952d0c3cde2069de1afbc8afbb9e3f2 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 2 Aug 2007 12:35:05 +0300 Subject: [PATCH 005/194] Addendum to bug 29325 keep_files_on_create made a startup option sql/mysqld.cc: Addendum to bug #29325 keep_files_on_create made a startup option --- sql/mysqld.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 61980fa1887..0a860f84b57 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -4828,7 +4828,8 @@ enum options_mysqld OPT_PORT_OPEN_TIMEOUT, OPT_MERGE, OPT_INNODB_ROLLBACK_ON_TIMEOUT, - OPT_SECURE_FILE_PRIV + OPT_SECURE_FILE_PRIV, + OPT_KEEP_FILES_ON_CREATE }; @@ -5830,6 +5831,11 @@ log and this option does nothing anymore.", (gptr*) &max_system_variables.join_buff_size, 0, GET_ULONG, REQUIRED_ARG, 128*1024L, IO_SIZE*2+MALLOC_OVERHEAD, ~0L, MALLOC_OVERHEAD, IO_SIZE, 0}, + {"keep_files_on_create", OPT_KEEP_FILES_ON_CREATE, + "Don't overwrite stale .MYD and .MYI even if no directory is specified.", + (gptr*) &global_system_variables.keep_files_on_create, + (gptr*) &max_system_variables.keep_files_on_create, + 0, GET_BOOL, OPT_ARG, 0, 0, 0, 0, 0, 0}, {"key_buffer_size", OPT_KEY_BUFFER_SIZE, "The size of the buffer used for index blocks for MyISAM tables. Increase this to get better index handling (for all reads and multiple writes) to as much as you can afford; 64M on a 256M machine that mainly runs MySQL is quite common.", (gptr*) &dflt_key_cache_var.param_buff_size, From d0536d020fa1b253bf21add584d66b949b119832 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 2 Aug 2007 17:11:35 +0300 Subject: [PATCH 006/194] Bug #30193: crash during drop table and kill When DROP TABLE detects that it has been killed by another thread it must unlock the table names it locked. Fixed by backporting the 5.1 error handling code. sql/sql_table.cc: Bug #30193: correct error handling when a thread is killed inside DROP TABLE. --- sql/sql_table.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sql/sql_table.cc b/sql/sql_table.cc index d83100aa439..e0104f11be5 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -256,8 +256,8 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists, drop_locked_tables(thd, db, table->table_name); if (thd->killed) { - thd->no_warnings_for_error= 0; - DBUG_RETURN(-1); + error=-1; + goto err_with_placeholders; } alias= (lower_case_table_names == 2) ? table->alias : table->table_name; /* remove form file and isam files */ @@ -338,6 +338,7 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists, } } +err_with_placeholders: if (!drop_temporary) unlock_table_names(thd, tables, (TABLE_LIST*) 0); thd->no_warnings_for_error= 0; From d24df2c6a786943cd84194bf5eb9f964a202988e Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 2 Aug 2007 21:49:27 +0400 Subject: [PATCH 007/194] sql_class.h: After merge changes. sql/sql_class.h: After merge changes. --- sql/sql_class.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sql/sql_class.h b/sql/sql_class.h index afeef6db02e..d6a00dd55b7 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -423,6 +423,8 @@ typedef struct system_status_var #define last_system_status_var com_stmt_close +void mark_transaction_to_rollback(THD *thd, bool all); + #ifdef MYSQL_SERVER void free_tmp_table(THD *thd, TABLE *entry); @@ -2464,7 +2466,6 @@ public: /* Functions in sql_class.cc */ void add_to_status(STATUS_VAR *to_var, STATUS_VAR *from_var); -void mark_transaction_to_rollback(THD *thd, bool all); void add_diff_to_status(STATUS_VAR *to_var, STATUS_VAR *from_var, STATUS_VAR *dec_var); From cb3df6f2e9f286fceca4a4a0e125642e52baf342 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 2 Aug 2007 23:08:52 +0400 Subject: [PATCH 008/194] mysqld.cc: Post merge changes. sql/mysqld.cc: Post merge changes. --- sql/mysqld.cc | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 7fa13fe127f..50d5633ed88 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -5071,8 +5071,7 @@ enum options_mysqld OPT_PLUGIN_DIR, OPT_LOG_OUTPUT, OPT_PORT_OPEN_TIMEOUT, - OPT_SECURE_FILE_PRIV, - OPT_KEEP_FILES_ON_CREATE + OPT_KEEP_FILES_ON_CREATE, OPT_GENERAL_LOG, OPT_SLOW_LOG, OPT_THREAD_HANDLING, @@ -5945,8 +5944,8 @@ log and this option does nothing anymore.", IO_SIZE, 0}, {"keep_files_on_create", OPT_KEEP_FILES_ON_CREATE, "Don't overwrite stale .MYD and .MYI even if no directory is specified.", - (gptr*) &global_system_variables.keep_files_on_create, - (gptr*) &max_system_variables.keep_files_on_create, + (uchar**) &global_system_variables.keep_files_on_create, + (uchar**) &max_system_variables.keep_files_on_create, 0, GET_BOOL, OPT_ARG, 0, 0, 0, 0, 0, 0}, {"key_buffer_size", OPT_KEY_BUFFER_SIZE, "The size of the buffer used for index blocks for MyISAM tables. Increase this to get better index handling (for all reads and multiple writes) to as much as you can afford; 64M on a 256M machine that mainly runs MySQL is quite common.", From c90493749aa8736c76b5765cda0ca925864bbe37 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 2 Aug 2007 12:45:56 -0700 Subject: [PATCH 009/194] Fixed bug#28404. This patch adds cost estimation for the queries with ORDER BY / GROUP BY and LIMIT. If there was a ref/range access to the table whose rows were required to be ordered in the result set the optimizer always employed this access though a scan by a different index that was compatible with the required order could be cheaper to produce the first L rows of the result set. Now for such queries the optimizer makes a choice between the cheapest ref/range accesses not compatible with the given order and index scans compatible with it. mysql-test/r/distinct.result: Adjusted results for test cases affected fy the fix for bug #28404. mysql-test/r/endspace.result: Adjusted results for test cases affected fy the fix for bug #28404. mysql-test/r/group_by.result: Adjusted results for test cases affected fy the fix for bug #28404. mysql-test/r/group_min_max.result: Adjusted results for test cases affected fy the fix for bug #28404. mysql-test/r/innodb.result: Adjusted results for test cases affected fy the fix for bug #28404. mysql-test/r/innodb_mysql.result: Adjusted results for test cases affected fy the fix for bug #28404. mysql-test/r/merge.result: Adjusted results for test cases affected fy the fix for bug #28404. mysql-test/r/order_by.result: Added a test case for bug #28404. mysql-test/r/select_found.result: Adjusted results for test cases affected fy the fix for bug #28404. mysql-test/r/subselect.result: Adjusted results for test cases affected fy the fix for bug #28404. mysql-test/t/distinct.test: Changed a test case after adding the fix for bug #28404. mysql-test/t/order_by.test: Added a test case for bug #28404. sql/sql_select.cc: Fixed bug#28404. This patch adds cost estimation for the queries with ORDER BY / GROUP BY and LIMIT. Now for such queries the optimizer makes a choice between the cheapest ref/range accesses not compatible with the given order and index scans compatible with it. Modified the function test_if_skip_sort_order to make the above mentioned choice cost based. sql/sql_select.h: Fixed bug#28404. This patch adds cost estimation for the queries with ORDER BY / GROUP BY and LIMIT. Added a new field fot the JOIN_TAB structure. --- mysql-test/r/distinct.result | 8 +- mysql-test/r/endspace.result | 2 +- mysql-test/r/group_by.result | 2 +- mysql-test/r/group_min_max.result | 10 +- mysql-test/r/innodb.result | 2 +- mysql-test/r/innodb_mysql.result | 22 +-- mysql-test/r/merge.result | 2 +- mysql-test/r/order_by.result | 55 ++++++ mysql-test/r/select_found.result | 2 +- mysql-test/r/subselect.result | 2 +- mysql-test/t/distinct.test | 2 +- mysql-test/t/order_by.test | 37 ++++ sql/sql_select.cc | 312 ++++++++++++++++++++++-------- sql/sql_select.h | 6 + 14 files changed, 359 insertions(+), 105 deletions(-) diff --git a/mysql-test/r/distinct.result b/mysql-test/r/distinct.result index 002dbc6ccb5..795d8956a08 100644 --- a/mysql-test/r/distinct.result +++ b/mysql-test/r/distinct.result @@ -209,16 +209,16 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 index NULL PRIMARY 4 NULL 4 Using index explain SELECT distinct t1.a from t1 order by a desc limit 1; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 index NULL PRIMARY 4 NULL 4 Using index +1 SIMPLE t1 index NULL PRIMARY 4 NULL 1 Using index explain SELECT distinct a from t3 order by a desc limit 2; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t3 index NULL a 5 NULL 204 Using index +1 SIMPLE t3 index NULL a 5 NULL 40 Using index explain SELECT distinct a,b from t3 order by a+1; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t3 ALL NULL NULL NULL NULL 204 Using temporary; Using filesort -explain SELECT distinct a,b from t3 order by a limit 10; +explain SELECT distinct a,b from t3 order by a limit 2; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t3 index NULL a 5 NULL 204 Using temporary +1 SIMPLE t3 index NULL a 5 NULL 2 Using temporary explain SELECT a,b from t3 group by a,b order by a+1; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t3 ALL NULL NULL NULL NULL 204 Using temporary; Using filesort diff --git a/mysql-test/r/endspace.result b/mysql-test/r/endspace.result index 6fb33dee826..9c8d12362c4 100644 --- a/mysql-test/r/endspace.result +++ b/mysql-test/r/endspace.result @@ -154,7 +154,7 @@ teststring teststring explain select * from t1 order by text1; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 index NULL key1 34 NULL 3 +1 SIMPLE t1 ALL NULL NULL NULL NULL 3 Using filesort alter table t1 modify text1 char(32) binary not null; select * from t1 order by text1; text1 diff --git a/mysql-test/r/group_by.result b/mysql-test/r/group_by.result index ebe59331357..e09c66ac362 100644 --- a/mysql-test/r/group_by.result +++ b/mysql-test/r/group_by.result @@ -1144,7 +1144,7 @@ CREATE TABLE t2 (a INT, b INT, KEY(a)); INSERT INTO t2 VALUES (1, 1), (2, 2), (3,3), (4,4); EXPLAIN SELECT a, SUM(b) FROM t2 GROUP BY a LIMIT 2; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t2 index NULL a 5 NULL 4 +1 SIMPLE t2 index NULL a 5 NULL 2 EXPLAIN SELECT a, SUM(b) FROM t2 IGNORE INDEX (a) GROUP BY a LIMIT 2; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t2 ALL NULL NULL NULL NULL 4 Using temporary; Using filesort diff --git a/mysql-test/r/group_min_max.result b/mysql-test/r/group_min_max.result index b6bf7260dc2..02b1459afd0 100644 --- a/mysql-test/r/group_min_max.result +++ b/mysql-test/r/group_min_max.result @@ -1963,20 +1963,20 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 128 Using temporary; Using filesort explain select a1,a2,count(a2) from t1 group by a1,a2,b; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 index NULL idx_t1_1 163 NULL 128 Using index +1 SIMPLE t1 index NULL idx_t1_2 147 NULL 128 Using index explain extended select a1,a2,count(a2) from t1 where (a1 > 'a') group by a1,a2,b; id select_type table type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t1 index idx_t1_0,idx_t1_1,idx_t1_2 idx_t1_1 163 NULL 128 75.00 Using where; Using index +1 SIMPLE t1 index idx_t1_0,idx_t1_1,idx_t1_2 idx_t1_2 147 NULL 128 75.00 Using where; Using index Warnings: Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,count(`test`.`t1`.`a2`) AS `count(a2)` from `test`.`t1` where (`test`.`t1`.`a1` > _latin1'a') group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b` explain extended select sum(ord(a1)) from t1 where (a1 > 'a') group by a1,a2,b; id select_type table type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t1 index idx_t1_0,idx_t1_1,idx_t1_2 idx_t1_1 163 NULL 128 75.00 Using where; Using index +1 SIMPLE t1 index idx_t1_0,idx_t1_1,idx_t1_2 idx_t1_2 147 NULL 128 75.00 Using where; Using index Warnings: Note 1003 select sum(ord(`test`.`t1`.`a1`)) AS `sum(ord(a1))` from `test`.`t1` where (`test`.`t1`.`a1` > _latin1'a') group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b` explain select distinct(a1) from t1 where ord(a2) = 98; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 index NULL idx_t1_1 163 NULL 128 Using where; Using index +1 SIMPLE t1 index NULL idx_t1_2 147 NULL 128 Using where; Using index select distinct(a1) from t1 where ord(a2) = 98; a1 a @@ -2256,7 +2256,7 @@ EXPLAIN SELECT 1 FROM t1 AS t1_outer WHERE a IN (SELECT max(b) FROM t1 GROUP BY a HAVING a < 2); id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t1_outer index NULL a 10 NULL 15 Using where; Using index -2 DEPENDENT SUBQUERY t1 index NULL a 10 NULL 15 Using index +2 DEPENDENT SUBQUERY t1 index NULL a 10 NULL 1 Using index EXPLAIN SELECT 1 FROM t1 AS t1_outer GROUP BY a HAVING a > (SELECT max(b) FROM t1 GROUP BY a HAVING a < 2); id select_type table type possible_keys key key_len ref rows Extra diff --git a/mysql-test/r/innodb.result b/mysql-test/r/innodb.result index 804c4b81c17..dce5e1a9a35 100644 --- a/mysql-test/r/innodb.result +++ b/mysql-test/r/innodb.result @@ -947,7 +947,7 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 index NULL PRIMARY 4 NULL # explain select * from t1 order by b; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 index NULL b 4 NULL # +1 SIMPLE t1 ALL NULL NULL NULL NULL # Using filesort explain select * from t1 order by c; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL # Using filesort diff --git a/mysql-test/r/innodb_mysql.result b/mysql-test/r/innodb_mysql.result index 273374d016b..bf12c31326a 100644 --- a/mysql-test/r/innodb_mysql.result +++ b/mysql-test/r/innodb_mysql.result @@ -851,13 +851,13 @@ EXPLAIN SELECT * FROM t1 WHERE b BETWEEN 1 AND 2 ORDER BY a; id 1 select_type SIMPLE table t1 -type range +type index possible_keys bkey -key bkey -key_len 5 +key PRIMARY +key_len 4 ref NULL -rows 16 -Extra Using where; Using index; Using filesort +rows 32 +Extra Using where; Using index SELECT * FROM t1 WHERE b BETWEEN 1 AND 2 ORDER BY a; a b 1 2 @@ -946,13 +946,13 @@ EXPLAIN SELECT * FROM t2 WHERE b=1 ORDER BY a; id 1 select_type SIMPLE table t2 -type ref +type index possible_keys bkey -key bkey -key_len 5 -ref const -rows 8 -Extra Using where; Using index; Using filesort +key PRIMARY +key_len 4 +ref NULL +rows 16 +Extra Using where; Using index SELECT * FROM t2 WHERE b=1 ORDER BY a; a b c 1 1 1 diff --git a/mysql-test/r/merge.result b/mysql-test/r/merge.result index bb4fc654b38..5aa4288500c 100644 --- a/mysql-test/r/merge.result +++ b/mysql-test/r/merge.result @@ -86,7 +86,7 @@ a b 19 Testing explain select a from t3 order by a desc limit 10; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t3 index NULL a 4 NULL 1131 Using index +1 SIMPLE t3 index NULL a 4 NULL 10 Using index select a from t3 order by a desc limit 10; a 699 diff --git a/mysql-test/r/order_by.result b/mysql-test/r/order_by.result index 25fbeadf21b..fd3fb89b5f4 100644 --- a/mysql-test/r/order_by.result +++ b/mysql-test/r/order_by.result @@ -1073,3 +1073,58 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 const PRIMARY,b b 5 const 1 1 SIMPLE t2 ref a a 5 const 2 Using where; Using index DROP TABLE t1,t2; +CREATE TABLE t1( +id int auto_increment PRIMARY KEY, c2 int, c3 int, INDEX k2(c2), INDEX k3(c3)); +INSERT INTO t1 (c2,c3) VALUES +(31,34),(35,38),(34,31),(32,35),(31,39), +(11,14),(15,18),(14,11),(12,15),(11,19); +INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1; +INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1; +INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1; +INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1; +INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1; +INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1; +INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1; +INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1; +INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1; +INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1; +INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1; +INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1; +SELECT COUNT(*) FROM t1; +COUNT(*) +40960 +EXPLAIN SELECT id,c3 FROM t1 WHERE c2=11 ORDER BY c3 LIMIT 20; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index k2 k3 5 NULL 88 Using where +EXPLAIN SELECT id,c3 FROM t1 WHERE c2=11 ORDER BY c3 LIMIT 100; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 ref k2 k2 5 const 9300 Using where; Using filesort +EXPLAIN SELECT id,c3 FROM t1 WHERE c2 BETWEEN 10 AND 12 ORDER BY c3 LIMIT 100; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index k2 k3 5 NULL 316 Using where +EXPLAIN SELECT id,c3 FROM t1 WHERE c2 BETWEEN 10 AND 12 ORDER BY c3 LIMIT 2000; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 range k2 k2 5 NULL 12937 Using where; Using filesort +SELECT id,c3 FROM t1 WHERE c2=11 ORDER BY c3 LIMIT 20; +id c3 +6 14 +16 14 +26 14 +36 14 +46 14 +56 14 +66 14 +76 14 +86 14 +96 14 +106 14 +116 14 +126 14 +136 14 +146 14 +156 14 +166 14 +176 14 +186 14 +196 14 +DROP TABLE t1; diff --git a/mysql-test/r/select_found.result b/mysql-test/r/select_found.result index 7abd65beb46..7896f8a9f4e 100644 --- a/mysql-test/r/select_found.result +++ b/mysql-test/r/select_found.result @@ -84,7 +84,7 @@ UNIQUE KEY e_n (email,name) EXPLAIN SELECT SQL_CALC_FOUND_ROWS DISTINCT email FROM t2 LEFT JOIN t1 ON kid = t2.id WHERE t1.id IS NULL LIMIT 10; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 system PRIMARY,kid NULL NULL NULL 0 const row not found -1 SIMPLE t2 index NULL e_n 104 NULL 200 +1 SIMPLE t2 index NULL e_n 104 NULL 10 SELECT SQL_CALC_FOUND_ROWS DISTINCT email FROM t2 LEFT JOIN t1 ON kid = t2.id WHERE t1.id IS NULL LIMIT 10; email email1 diff --git a/mysql-test/r/subselect.result b/mysql-test/r/subselect.result index 40b9e489577..a25183a0e6d 100644 --- a/mysql-test/r/subselect.result +++ b/mysql-test/r/subselect.result @@ -3419,7 +3419,7 @@ EXPLAIN SELECT * FROM t1 WHERE (a,b) = ANY (SELECT a, max(b) FROM t1 GROUP BY a); id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t1 ALL NULL NULL NULL NULL 9 Using where -2 DEPENDENT SUBQUERY t1 index NULL a 8 NULL 9 Using filesort +2 DEPENDENT SUBQUERY t1 index NULL a 8 NULL 1 Using filesort DROP TABLE t1; create table t1( f1 int,f2 int); insert into t1 values (1,1),(2,2); diff --git a/mysql-test/t/distinct.test b/mysql-test/t/distinct.test index 7310f98cd16..bfdb5f8b9f8 100644 --- a/mysql-test/t/distinct.test +++ b/mysql-test/t/distinct.test @@ -97,7 +97,7 @@ explain SELECT t1.a from t1 group by a order by a desc; explain SELECT distinct t1.a from t1 order by a desc limit 1; explain SELECT distinct a from t3 order by a desc limit 2; explain SELECT distinct a,b from t3 order by a+1; -explain SELECT distinct a,b from t3 order by a limit 10; +explain SELECT distinct a,b from t3 order by a limit 2; explain SELECT a,b from t3 group by a,b order by a+1; drop table t1,t2,t3,t4; diff --git a/mysql-test/t/order_by.test b/mysql-test/t/order_by.test index 1e520da9f00..fb08dbe74e6 100644 --- a/mysql-test/t/order_by.test +++ b/mysql-test/t/order_by.test @@ -739,3 +739,40 @@ INSERT INTO t2 VALUES (1,1),(1,2),(2,1),(2,2); EXPLAIN SELECT 1 FROM t1,t2 WHERE t1.b=2 AND t1.a=t2.a ORDER BY t2.b; DROP TABLE t1,t2; + +# End of 5.0 + +# +# Bug #28404: query with ORDER BY and ref access +# + +CREATE TABLE t1( + id int auto_increment PRIMARY KEY, c2 int, c3 int, INDEX k2(c2), INDEX k3(c3)); + +INSERT INTO t1 (c2,c3) VALUES + (31,34),(35,38),(34,31),(32,35),(31,39), + (11,14),(15,18),(14,11),(12,15),(11,19); + +INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1; +INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1; +INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1; +INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1; +INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1; +INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1; +INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1; +INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1; +INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1; +INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1; +INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1; +INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1; + +SELECT COUNT(*) FROM t1; + +EXPLAIN SELECT id,c3 FROM t1 WHERE c2=11 ORDER BY c3 LIMIT 20; +EXPLAIN SELECT id,c3 FROM t1 WHERE c2=11 ORDER BY c3 LIMIT 100; +EXPLAIN SELECT id,c3 FROM t1 WHERE c2 BETWEEN 10 AND 12 ORDER BY c3 LIMIT 100; +EXPLAIN SELECT id,c3 FROM t1 WHERE c2 BETWEEN 10 AND 12 ORDER BY c3 LIMIT 2000; + +SELECT id,c3 FROM t1 WHERE c2=11 ORDER BY c3 LIMIT 20; + +DROP TABLE t1; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 6a381c1f367..c079f2e030f 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -6450,6 +6450,7 @@ void JOIN_TAB::cleanup() quick= 0; x_free(cache.buff); cache.buff= 0; + limit= 0; if (table) { if (table->key_read) @@ -12588,9 +12589,12 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit, { int ref_key; uint ref_key_parts; + int order_direction; + uint used_key_parts; TABLE *table=tab->table; SQL_SELECT *select=tab->select; key_map usable_keys; + QUICK_SELECT_I *save_quick; DBUG_ENTER("test_if_skip_sort_order"); LINT_INIT(ref_key_parts); @@ -12625,6 +12629,7 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit, else if (select && select->quick) // Range found by opt_range { int quick_type= select->quick->get_type(); + save_quick= select->quick; /* assume results are not ordered when index merge is used TODO: sergeyp: Results of all index merge selects actually are ordered @@ -12644,8 +12649,6 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit, /* We come here when there is a REF key. */ - int order_direction; - uint used_key_parts; if (!usable_keys.is_set(ref_key)) { /* @@ -12706,63 +12709,30 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit, } /* Check if we get the rows in requested sorted order by using the key */ if (usable_keys.is_set(ref_key) && - (order_direction = test_if_order_by_key(order,table,ref_key, - &used_key_parts))) - { - if (order_direction == -1) // If ORDER BY ... DESC - { - if (select && select->quick) - { - /* - Don't reverse the sort order, if it's already done. - (In some cases test_if_order_by_key() can be called multiple times - */ - if (!select->quick->reverse_sorted()) - { - QUICK_SELECT_DESC *tmp; - int quick_type= select->quick->get_type(); - if (quick_type == QUICK_SELECT_I::QS_TYPE_INDEX_MERGE || - quick_type == QUICK_SELECT_I::QS_TYPE_ROR_INTERSECT || - quick_type == QUICK_SELECT_I::QS_TYPE_ROR_UNION || - quick_type == QUICK_SELECT_I::QS_TYPE_GROUP_MIN_MAX) - DBUG_RETURN(0); // Use filesort - - /* ORDER BY range_key DESC */ - tmp= new QUICK_SELECT_DESC((QUICK_RANGE_SELECT*)(select->quick), - used_key_parts); - if (!tmp || tmp->error) - { - delete tmp; - DBUG_RETURN(0); // Reverse sort not supported - } - select->quick=tmp; - } - DBUG_RETURN(1); - } - if (tab->ref.key_parts < used_key_parts) - { - /* - SELECT * FROM t1 WHERE a=1 ORDER BY a DESC,b DESC - - Use a traversal function that starts by reading the last row - with key part (A) and then traverse the index backwards. - */ - tab->read_first_record= join_read_last_key; - tab->read_record.read_record= join_read_prev_same; - /* fall through */ - } - } - else if (select && select->quick) - select->quick->sorted= 1; - DBUG_RETURN(1); /* No need to sort */ - } + (order_direction= test_if_order_by_key(order,table,ref_key, + &used_key_parts))) + goto check_reverse_order; } - else { - /* check if we can use a key to resolve the group */ - /* Tables using JT_NEXT are handled here */ + /* + Check whether there is an index compatible with the given order + usage of which is cheaper than usage of the ref_key index (ref_key>=0) + or a table scan. + It may be the case if ORDER/GROUP BY is used with LIMIT. + */ uint nr; key_map keys; + uint best_key_parts; + int best_key_direction; + ha_rows best_records; + double read_time; + int best_key= -1; + bool is_best_covering= FALSE; + double fanout= 1; + JOIN *join= tab->join; + uint tablenr= tab - join->join_tab; + ha_rows table_records= table->file->stats.records; + bool group= join->group && order == join->group_list; /* filesort() and join cache are usually faster than reading in @@ -12775,7 +12745,7 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit, resolved with a key; This is because filesort() is usually faster than retrieving all rows through an index. */ - if (select_limit >= table->file->stats.records) + if (select_limit >= table_records) { keys= *table->file->keys_to_use_for_scanning(); keys.merge(table->covering_keys); @@ -12786,38 +12756,224 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit, This is to allow users to use index in ORDER BY. */ if (table->force_index) - keys.merge(table->keys_in_use_for_query); + keys.merge(group ? table->keys_in_use_for_group_by : + table->keys_in_use_for_order_by); keys.intersect(usable_keys); } else keys= usable_keys; + read_time= join->best_positions[tablenr].read_time; + for (uint i= tablenr+1; i < join->tables; i++) + fanout*= join->best_positions[i].records_read; // fanout is always >= 1 + for (nr=0; nr < table->s->keys ; nr++) { - uint not_used; - if (keys.is_set(nr)) + int direction; + if (keys.is_set(nr) && + (direction= test_if_order_by_key(order, table, nr, &used_key_parts))) { - int flag; - if ((flag= test_if_order_by_key(order, table, nr, ¬_used))) - { - if (!no_changes) - { - tab->index=nr; - tab->read_first_record= (flag > 0 ? join_read_first: - join_read_last); - tab->type=JT_NEXT; // Read with index_first(), index_next() - if (table->covering_keys.is_set(nr)) - { - table->key_read=1; - table->file->extra(HA_EXTRA_KEYREAD); - } - } - DBUG_RETURN(1); - } + bool is_covering= table->covering_keys.is_set(nr) || + nr == table->s->primary_key && + table->file->primary_key_is_clustered(); + + /* + Don't use an index scan with ORDER BY without limit. + For GROUP BY without limit always use index scan + if there is a suitable index. + Why we hold to this asymmetry hardly can be explained + rationally. It's easy to demonstrate that using + temporary table + filesort could be cheaper for grouping + queries too. + */ + if (is_covering || + select_limit != HA_POS_ERROR || + ref_key < 0 && (group || table->force_index)) + { + double rec_per_key; + double index_scan_time; + KEY *keyinfo= tab->table->key_info+nr; + if (select_limit == HA_POS_ERROR) + select_limit= table_records; + if (group) + { + rec_per_key= keyinfo->rec_per_key[used_key_parts-1]; + set_if_bigger(rec_per_key, 1); + /* + With a grouping query each group containing on average + rec_per_key records produces only one row that will + be included into the result set. + */ + if (select_limit > table_records/rec_per_key) + select_limit= table_records; + else + select_limit= (ha_rows) (select_limit*rec_per_key); + } + /* + If tab=tk is not the last joined table tn then to get first + L records from the result set we can expect to retrieve + only L/fanout(tk,tn) where fanout(tk,tn) says how many + rows in the record set on average will match each row tk. + Usually our estimates for fanouts are too pessimistic. + So the estimate for L/fanout(tk,tn) will be too optimistic + and as result we'll choose an index scan when using ref/range + access + filesort will be cheaper. + */ + select_limit= (ha_rows) (select_limit < fanout ? + 1 : select_limit/fanout); + /* + We assume that each of the tested indexes is not correlated + with ref_key. Thus, to select first N records we have to scan + N/selectivity(ref_key) index entries. + selectivity(ref_key) = #scanned_records/#table_records = + table->quick_condition_rows/table_records. + In any case we can't select more than #table_records. + N/(table->quick_condition_rows/table_records) > table_records + <=> N > table->quick_condition_rows. + */ + if (select_limit > table->quick_condition_rows) + select_limit= table_records; + else + select_limit= (ha_rows) (select_limit * + (double) table_records / + table->quick_condition_rows); + rec_per_key= keyinfo->rec_per_key[keyinfo->key_parts-1]; + set_if_bigger(rec_per_key, 1); + /* + Here we take into account the fact that rows are + accessed in sequences rec_per_key records in each. + Rows in such a sequence are supposed to be ordered + by rowid/primary key. When reading the data + in a sequence we'll touch not more pages than the + table file contains. + TODO. Use the formula for a disk sweep sequential access + to calculate the cost of accessing data rows for one + index entry. + */ + index_scan_time= select_limit/rec_per_key * + min(rec_per_key, table->file->scan_time()); + if (is_covering || + ref_key < 0 && (group || table->force_index) || + index_scan_time < read_time) + { + ha_rows quick_records= table_records; + if (is_best_covering && !is_covering) + continue; + if (table->quick_keys.is_set(nr)) + quick_records= table->quick_rows[nr]; + if (best_key < 0 || + (select_limit <= min(quick_records,best_records) ? + keyinfo->key_parts < best_key_parts : + quick_records < best_records)) + { + best_key= nr; + best_key_parts= keyinfo->key_parts; + best_records= quick_records; + is_best_covering= is_covering; + best_key_direction= direction; + } + } + } } } + if (best_key >= 0) + { + bool quick_created= FALSE; + if (table->quick_keys.is_set(best_key) && best_key != ref_key) + { + key_map map; + map.clear_all(); // Force the creation of quick select + map.set_bit(best_key); // only best_key. + quick_created= + select->test_quick_select(join->thd, map, 0, + join->select_options & OPTION_FOUND_ROWS ? + HA_POS_ERROR : + join->unit->select_limit_cnt, + 0) > 0; + } + if (!no_changes) + { + if (!quick_created) + { + tab->index= best_key; + tab->read_first_record= best_key_direction > 0 ? + join_read_first:join_read_last; + tab->type=JT_NEXT; // Read with index_first(), index_next() + if (table->covering_keys.is_set(best_key)) + { + table->key_read=1; + table->file->extra(HA_EXTRA_KEYREAD); + } + table->file->ha_index_or_rnd_end(); + if (join->select_options & SELECT_DESCRIBE) + { + tab->ref.key= -1; + tab->ref.key_parts= 0; + if (tab->select) + tab->select->quick= 0; + if (select_limit < table_records) + tab->limit= select_limit; + } + } + } + used_key_parts= best_key_parts; + order_direction= best_key_direction; + } + else + DBUG_RETURN(0); + } + +check_reverse_order: + if (order_direction == -1) // If ORDER BY ... DESC + { + if (select && select->quick) + { + /* + Don't reverse the sort order, if it's already done. + (In some cases test_if_order_by_key() can be called multiple times + */ + if (!select->quick->reverse_sorted()) + { + QUICK_SELECT_DESC *tmp; + int quick_type= select->quick->get_type(); + if (quick_type == QUICK_SELECT_I::QS_TYPE_INDEX_MERGE || + quick_type == QUICK_SELECT_I::QS_TYPE_ROR_INTERSECT || + quick_type == QUICK_SELECT_I::QS_TYPE_ROR_UNION || + quick_type == QUICK_SELECT_I::QS_TYPE_GROUP_MIN_MAX) + { + tab->limit= 0; + select->quick= save_quick; + DBUG_RETURN(0); // Use filesort + } + + /* ORDER BY range_key DESC */ + tmp= new QUICK_SELECT_DESC((QUICK_RANGE_SELECT*)(select->quick), + used_key_parts); + if (!tmp || tmp->error) + { + delete tmp; + select->quick= save_quick; + tab->limit= 0; + DBUG_RETURN(0); // Reverse sort not supported + } + select->quick=tmp; + } + } + else if (tab->ref.key >= 0 && tab->ref.key_parts < used_key_parts) + { + /* + SELECT * FROM t1 WHERE a=1 ORDER BY a DESC,b DESC + + Use a traversal function that starts by reading the last row + with key part (A) and then traverse the index backwards. + */ + tab->read_first_record= join_read_last_key; + tab->read_record.read_record= join_read_prev_same; + } } - DBUG_RETURN(0); // Can't use index. + else if (select && select->quick) + select->quick->sorted= 1; + DBUG_RETURN(1); } @@ -15524,7 +15680,7 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order, if (tab->select && tab->select->quick) examined_rows= tab->select->quick->records; else if (tab->type == JT_NEXT || tab->type == JT_ALL) - examined_rows= tab->table->file->records(); + examined_rows= tab->limit ? tab->limit : tab->table->file->records(); else examined_rows=(ha_rows)join->best_positions[i].records_read; diff --git a/sql/sql_select.h b/sql/sql_select.h index 98f2a7829dd..61df43094c2 100644 --- a/sql/sql_select.h +++ b/sql/sql_select.h @@ -194,6 +194,12 @@ typedef struct st_join_table { enum join_type type; bool cached_eq_ref_table,eq_ref_table,not_used_in_distinct; bool sorted; + /* + If it's not 0 the number stored this field indicates that the index + scan has been chosen to access the table data and we expect to scan + this number of rows for the table. + */ + ha_rows limit; TABLE_REF ref; JOIN_CACHE cache; JOIN *join; From a53510f0be0bfdbaff6e60366d5e8cfc1d2d197f Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 3 Aug 2007 01:58:21 +0500 Subject: [PATCH 010/194] Fixed bug #27352. The SELECT query with more than 31 nested dependent SELECT queries returned wrong result. New error message has been added: ER_TOO_HIGH_LEVEL_OF_NESTING_FOR_SELECT. It will be reported as: "Too high level of nesting for select". sql/sql_parse.cc: Fixed bug #27352. The Item_sum::register_sum_func method has been modified to return TRUE on exceeding of allowed level of SELECT nesting and to report corresponding error message. sql/unireg.h: Fixed bug #27352. Constant definition has been added: maximal allowed level of SELECT nesting. mysql-test/t/select.test: Updated test case for bug #27352. mysql-test/r/select.result: Updated test case for bug #27352. sql/share/errmsg.txt: Fixed bug #27352. New error message has been added: ER_TOO_HIGH_LEVEL_OF_NESTING_FOR_SELECT. --- mysql-test/r/select.result | 10 ++++++++++ mysql-test/t/select.test | 30 ++++++++++++++++++++++++++++++ sql/share/errmsg.txt | 2 ++ sql/sql_parse.cc | 5 +++++ sql/unireg.h | 2 ++ 5 files changed, 49 insertions(+) diff --git a/mysql-test/r/select.result b/mysql-test/r/select.result index bfe0b9d19df..5930c36029f 100644 --- a/mysql-test/r/select.result +++ b/mysql-test/r/select.result @@ -3995,4 +3995,14 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE f1 index inx inx 10 NULL 7 Using where; Using index 1 SIMPLE f2 ref inx inx 5 test.f1.b 1 Using where; Using index DROP TABLE t1; +CREATE TABLE t1 (c1 INT, c2 INT); +INSERT INTO t1 VALUES (1,11), (2,22), (2,22); +EXPLAIN SELECT c1 FROM t1 WHERE (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT COUNT(c2)))))))))))))))))))))))))))))))) > 0; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 3 Using where +31 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL No tables used +32 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL No tables used +EXPLAIN SELECT c1 FROM t1 WHERE (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT COUNT(c2))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) > 0; +ERROR HY000: Too high level of nesting for select +DROP TABLE t1; End of 5.0 tests diff --git a/mysql-test/t/select.test b/mysql-test/t/select.test index 56b2f1b02b8..8bfa12539fa 100644 --- a/mysql-test/t/select.test +++ b/mysql-test/t/select.test @@ -3370,4 +3370,34 @@ EXPLAIN SELECT COUNT(*) FROM t1 f1 INNER JOIN t1 f2 WHERE 1 AND f1.b NOT IN (100,2232,3343,51111); DROP TABLE t1; +# +# Bug #27352: Incorrect result of nested selects instead of error reporting +# + +CREATE TABLE t1 (c1 INT, c2 INT); +INSERT INTO t1 VALUES (1,11), (2,22), (2,22); + +let $n= 31; +let $q= COUNT(c2); +while ($n) +{ + let $q= (SELECT $q); + dec $n; +} +--disable_warnings +eval EXPLAIN SELECT c1 FROM t1 WHERE $q > 0; +--enable_warnings + +let $n= 64; +let $q= COUNT(c2); +while ($n) +{ + let $q= (SELECT $q); + dec $n; +} +--error ER_TOO_HIGH_LEVEL_OF_NESTING_FOR_SELECT +eval EXPLAIN SELECT c1 FROM t1 WHERE $q > 0; + +DROP TABLE t1; + --echo End of 5.0 tests diff --git a/sql/share/errmsg.txt b/sql/share/errmsg.txt index a52ffa8216c..6d4ca33ccc7 100644 --- a/sql/share/errmsg.txt +++ b/sql/share/errmsg.txt @@ -5635,3 +5635,5 @@ ER_NON_INSERTABLE_TABLE eng "The target table %-.100s of the %s is not insertable-into" ER_ADMIN_WRONG_MRG_TABLE eng "Table '%-.64s' is differently defined or of non-MyISAM type or doesn't exist" +ER_TOO_HIGH_LEVEL_OF_NESTING_FOR_SELECT + eng "Too high level of nesting for select" diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index ae3bc0f5597..78b3904a207 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -5889,6 +5889,11 @@ mysql_new_select(LEX *lex, bool move_down) select_lex->init_query(); select_lex->init_select(); lex->nest_level++; + if (lex->nest_level > (int) MAX_SELECT_NESTING) + { + my_error(ER_TOO_HIGH_LEVEL_OF_NESTING_FOR_SELECT,MYF(0),MAX_SELECT_NESTING); + DBUG_RETURN(1); + } select_lex->nest_level= lex->nest_level; /* Don't evaluate this subquery during statement prepare even if diff --git a/sql/unireg.h b/sql/unireg.h index 81ca18c1d32..d8301060cc4 100644 --- a/sql/unireg.h +++ b/sql/unireg.h @@ -81,6 +81,8 @@ RAND_TABLE_BIT) #define MAX_FIELDS 4096 /* Limit in the .frm file */ +#define MAX_SELECT_NESTING (sizeof(nesting_map)*8-1) + #define MAX_SORT_MEMORY (2048*1024-MALLOC_OVERHEAD) #define MIN_SORT_MEMORY (32*1024-MALLOC_OVERHEAD) From 6930e7dedfec2723ef6b9e38f974e3d1123d022f Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 3 Aug 2007 13:07:37 +0500 Subject: [PATCH 011/194] Many files: Post-merge fix. mysql-test/r/binlog_unsafe.result: Post-merge fix. mysql-test/r/events_bugs.result: Post-merge fix. mysql-test/r/events_trans.result: Post-merge fix. mysql-test/r/sp.result: Post-merge fix. mysql-test/r/sp_gis.result: Post-merge fix. mysql-test/r/xml.result: Post-merge fix. --- mysql-test/r/binlog_unsafe.result | 4 ++-- mysql-test/r/events_bugs.result | 16 ++++++++-------- mysql-test/r/events_trans.result | 2 +- mysql-test/r/sp.result | 8 ++++---- mysql-test/r/sp_gis.result | 4 ++-- mysql-test/r/xml.result | 18 +++++++++--------- 6 files changed, 26 insertions(+), 26 deletions(-) diff --git a/mysql-test/r/binlog_unsafe.result b/mysql-test/r/binlog_unsafe.result index 624c7feec1f..fb89631f30b 100644 --- a/mysql-test/r/binlog_unsafe.result +++ b/mysql-test/r/binlog_unsafe.result @@ -5,9 +5,9 @@ CREATE TABLE t3 (b INT AUTO_INCREMENT PRIMARY KEY); CREATE VIEW v1(a,b) AS SELECT a,b FROM t2,t3; INSERT INTO t1 SELECT UUID(); Warnings: -Warning 1589 Statement is not safe to log in statement format. +Warning 1590 Statement is not safe to log in statement format. SHOW WARNINGS; Level Warning -Code 1589 +Code 1590 Message Statement is not safe to log in statement format. DROP TABLE t1,t2,t3; diff --git a/mysql-test/r/events_bugs.result b/mysql-test/r/events_bugs.result index 557c8e0b477..6e3b1404048 100644 --- a/mysql-test/r/events_bugs.result +++ b/mysql-test/r/events_bugs.result @@ -31,7 +31,7 @@ create event e_55 on schedule at 10000101000000 do drop table t; ERROR HY000: Incorrect AT value: '10000101000000' create event e_55 on schedule at 20000101000000 do drop table t; Warnings: -Note 1585 Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was dropped immediately after creation. +Note 1586 Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was dropped immediately after creation. show events; Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator character_set_client collation_connection Database Collation create event e_55 on schedule at 20200101000000 starts 10000101000000 do drop table t; @@ -457,22 +457,22 @@ CREATE EVENT e4 ON SCHEDULE EVERY 1 HOUR STARTS '1999-01-01 00:00:00' DO SELECT 1; Warnings: -Note 1585 Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was dropped immediately after creation. +Note 1586 Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was dropped immediately after creation. CREATE EVENT e4 ON SCHEDULE EVERY 1 HOUR STARTS '1999-01-01 00:00:00' ENDS '1999-01-02 00:00:00' DISABLE DO SELECT 1; Warnings: -Note 1585 Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was dropped immediately after creation. +Note 1586 Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was dropped immediately after creation. CREATE EVENT e4 ON SCHEDULE AT '1999-01-01 00:00:00' DO SELECT 1; Warnings: -Note 1585 Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was dropped immediately after creation. +Note 1586 Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was dropped immediately after creation. CREATE EVENT e4 ON SCHEDULE AT '1999-01-01 00:00:00' DISABLE DO SELECT 1; Warnings: -Note 1585 Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was dropped immediately after creation. +Note 1586 Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was dropped immediately after creation. SHOW EVENTS; Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator character_set_client collation_connection Database Collation events_test e1 root@localhost +05:00 RECURRING NULL 1 DAY 2006-01-01 00:00:00 NULL ENABLED 1 latin1 latin1_swedish_ci latin1_swedish_ci @@ -482,19 +482,19 @@ The following should succeed giving a warning. ALTER EVENT e1 ON SCHEDULE EVERY 1 HOUR STARTS '1999-01-01 00:00:00' ENDS '1999-01-02 00:00:00' ON COMPLETION PRESERVE; Warnings: -Note 1541 Event execution time is in the past. Event has been disabled +Note 1542 Event execution time is in the past. Event has been disabled CREATE EVENT e4 ON SCHEDULE EVERY 1 HOUR STARTS '1999-01-01 00:00:00' ENDS '1999-01-02 00:00:00' ON COMPLETION PRESERVE DO SELECT 1; Warnings: -Note 1541 Event execution time is in the past. Event has been disabled +Note 1542 Event execution time is in the past. Event has been disabled CREATE EVENT e5 ON SCHEDULE AT '1999-01-01 00:00:00' ON COMPLETION PRESERVE DO SELECT 1; Warnings: -Note 1541 Event execution time is in the past. Event has been disabled +Note 1542 Event execution time is in the past. Event has been disabled The following should succeed without warnings. ALTER EVENT e2 ON SCHEDULE EVERY 1 HOUR STARTS '1999-01-01 00:00:00'; ALTER EVENT e3 ON SCHEDULE EVERY 1 HOUR STARTS '1999-01-01 00:00:00' diff --git a/mysql-test/r/events_trans.result b/mysql-test/r/events_trans.result index 1f87bcea68e..dce08d3b9f9 100644 --- a/mysql-test/r/events_trans.result +++ b/mysql-test/r/events_trans.result @@ -63,7 +63,7 @@ begin work; insert into t1 (a) values ("OK: create event if not exists"); create event if not exists e1 on schedule every 2 day do select 2; Warnings: -Note 1534 Event 'e1' already exists +Note 1535 Event 'e1' already exists rollback work; select * from t1; a diff --git a/mysql-test/r/sp.result b/mysql-test/r/sp.result index ebdab4a3f89..163bbb4aab4 100644 --- a/mysql-test/r/sp.result +++ b/mysql-test/r/sp.result @@ -5670,7 +5670,7 @@ drop function if exists pi; create function pi() returns varchar(50) return "pie, my favorite desert."; Warnings: -Note 1582 This function 'pi' has the same name as a native function +Note 1583 This function 'pi' has the same name as a native function SET @save_sql_mode=@@sql_mode; SET SQL_MODE='IGNORE_SPACE'; select pi(), pi (); @@ -5719,15 +5719,15 @@ use test; create function `database`() returns varchar(50) return "Stored function database"; Warnings: -Note 1582 This function 'database' has the same name as a native function +Note 1583 This function 'database' has the same name as a native function create function `current_user`() returns varchar(50) return "Stored function current_user"; Warnings: -Note 1582 This function 'current_user' has the same name as a native function +Note 1583 This function 'current_user' has the same name as a native function create function md5(x varchar(50)) returns varchar(50) return "Stored function md5"; Warnings: -Note 1582 This function 'md5' has the same name as a native function +Note 1583 This function 'md5' has the same name as a native function SET SQL_MODE='IGNORE_SPACE'; select database(), database (); database() database () diff --git a/mysql-test/r/sp_gis.result b/mysql-test/r/sp_gis.result index b4fe0872d64..c640e5c46f2 100644 --- a/mysql-test/r/sp_gis.result +++ b/mysql-test/r/sp_gis.result @@ -7,11 +7,11 @@ return 1; create function x() returns int return 2; Warnings: -Note 1582 This function 'x' has the same name as a native function +Note 1583 This function 'x' has the same name as a native function create function y() returns int return 3; Warnings: -Note 1582 This function 'y' has the same name as a native function +Note 1583 This function 'y' has the same name as a native function select a(); a() 1 diff --git a/mysql-test/r/xml.result b/mysql-test/r/xml.result index 95ad19a886f..aac7c4e850a 100644 --- a/mysql-test/r/xml.result +++ b/mysql-test/r/xml.result @@ -647,32 +647,32 @@ select extractValue('a','/a'); extractValue('a','/a') NULL Warnings: -Warning 1522 Incorrect XML value: 'parse error at line 1 pos 5: unexpected END-OF-INPUT' +Warning 1523 Incorrect XML value: 'parse error at line 1 pos 5: unexpected END-OF-INPUT' select extractValue('a<','/a'); extractValue('a<','/a') NULL Warnings: -Warning 1522 Incorrect XML value: 'parse error at line 1 pos 6: END-OF-INPUT unexpected (ident or '/' wanted)' +Warning 1523 Incorrect XML value: 'parse error at line 1 pos 6: END-OF-INPUT unexpected (ident or '/' wanted)' select extractValue('aaaa' wanted)' +Warning 1523 Incorrect XML value: 'parse error at line 1 pos 8: END-OF-INPUT unexpected ('>' wanted)' select extractValue('a','/a'); extractValue('a','/a') NULL Warnings: -Warning 1522 Incorrect XML value: 'parse error at line 1 pos 12: '' unexpected (END-OF-INPUT wanted)' +Warning 1523 Incorrect XML value: 'parse error at line 1 pos 12: '' unexpected (END-OF-INPUT wanted)' select extractValue('a','/a'); extractValue('a','/a') NULL Warnings: -Warning 1522 Incorrect XML value: 'parse error at line 1 pos 7: '>' unexpected (ident or string wanted)' +Warning 1523 Incorrect XML value: 'parse error at line 1 pos 7: '>' unexpected (ident or string wanted)' select extractValue('1','position()'); ERROR HY000: XPATH syntax error: '' select extractValue('1','last()'); @@ -723,17 +723,17 @@ select extractValue('<01>10:39:15<02>140','//* extractValue('<01>10:39:15<02>140','//*') NULL Warnings: -Warning 1522 Incorrect XML value: 'parse error at line 1 pos 13: unknown token unexpected (ident or '/' wanted)' +Warning 1523 Incorrect XML value: 'parse error at line 1 pos 13: unknown token unexpected (ident or '/' wanted)' select extractValue('<.>test','//*'); extractValue('<.>test','//*') NULL Warnings: -Warning 1522 Incorrect XML value: 'parse error at line 1 pos 2: unknown token unexpected (ident or '/' wanted)' +Warning 1523 Incorrect XML value: 'parse error at line 1 pos 2: unknown token unexpected (ident or '/' wanted)' select extractValue('<->test','//*'); extractValue('<->test','//*') NULL Warnings: -Warning 1522 Incorrect XML value: 'parse error at line 1 pos 2: unknown token unexpected (ident or '/' wanted)' +Warning 1523 Incorrect XML value: 'parse error at line 1 pos 2: unknown token unexpected (ident or '/' wanted)' select extractValue('<:>test','//*'); extractValue('<:>test','//*') test From f98f12582e2a026e060b47f544f16426731aaca3 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 3 Aug 2007 12:36:32 +0200 Subject: [PATCH 012/194] Send output to var/log/mysql-test-run.log to facilitate easier debugging of mysql-test-run.pl mysql-test/lib/mtr_process.pl: Change from "print" to "mtr_debug" to get messages logged to file as well mysql-test/lib/mtr_report.pl: - Add "mtr_log_init" function used for opening the log file - Change from "print" to "mtr_report" to get the messages logged - Make printout functions log to the log file mysql-test/mysql-test-run.pl: - Open the mysql-test-run log file as soon as var/log has been created - Change from "print" to "mtr_report" to get the messgages to log as well --- mysql-test/lib/mtr_process.pl | 21 ++++++------- mysql-test/lib/mtr_report.pl | 55 ++++++++++++++++++++++++++++------- mysql-test/mysql-test-run.pl | 13 +++++---- 3 files changed, 63 insertions(+), 26 deletions(-) diff --git a/mysql-test/lib/mtr_process.pl b/mysql-test/lib/mtr_process.pl index f5ef028fa24..a60b2822a14 100644 --- a/mysql-test/lib/mtr_process.pl +++ b/mysql-test/lib/mtr_process.pl @@ -99,25 +99,26 @@ sub spawn_impl ($$$$$$$) { if ( $::opt_script_debug ) { - print STDERR "\n"; - print STDERR "#### ", "-" x 78, "\n"; - print STDERR "#### ", "STDIN $input\n" if $input; - print STDERR "#### ", "STDOUT $output\n" if $output; - print STDERR "#### ", "STDERR $error\n" if $error; - print STDERR "#### ", "$mode : $path ", join(" ",@$arg_list_t), "\n"; - print STDERR "#### ", "spawn options:\n"; + mtr_report(""); + mtr_debug("-" x 73); + mtr_debug("STDIN $input") if $input; + mtr_debug("STDOUT $output") if $output; + mtr_debug("STDERR $error") if $error; + mtr_debug("$mode: $path ", join(" ",@$arg_list_t)); + mtr_debug("spawn options:"); if ($spawn_opts) { foreach my $key (sort keys %{$spawn_opts}) { - print STDERR "#### ", " - $key: $spawn_opts->{$key}\n"; + mtr_debug(" - $key: $spawn_opts->{$key}"); } } else { - print STDERR "#### ", " none\n"; + mtr_debug(" none"); } - print STDERR "#### ", "-" x 78, "\n"; + mtr_debug("-" x 73); + mtr_report(""); } mtr_error("Can't spawn with empty \"path\"") unless defined $path; diff --git a/mysql-test/lib/mtr_report.pl b/mysql-test/lib/mtr_report.pl index 1abfc6b6b57..0493ecad329 100644 --- a/mysql-test/lib/mtr_report.pl +++ b/mysql-test/lib/mtr_report.pl @@ -19,6 +19,7 @@ # same name. use strict; +use warnings; sub mtr_report_test_name($); sub mtr_report_test_passed($); @@ -97,6 +98,7 @@ sub mtr_show_failed_diff ($) { sub mtr_report_test_name ($) { my $tinfo= shift; + _mtr_log("$tinfo->{name}"); printf "%-30s ", $tinfo->{'name'}; } @@ -106,15 +108,15 @@ sub mtr_report_test_skipped ($) { $tinfo->{'result'}= 'MTR_RES_SKIPPED'; if ( $tinfo->{'disable'} ) { - print "[ disabled ] $tinfo->{'comment'}\n"; + mtr_report("[ disabled ] $tinfo->{'comment'}"); } elsif ( $tinfo->{'comment'} ) { - print "[ skipped ] $tinfo->{'comment'}\n"; + mtr_report("[ skipped ] $tinfo->{'comment'}"); } else { - print "[ skipped ]\n"; + mtr_report("[ skipped ]"); } } @@ -146,7 +148,7 @@ sub mtr_report_test_passed ($) { $timer= sprintf "%12s", $timer; } $tinfo->{'result'}= 'MTR_RES_PASSED'; - print "[ pass ] $timer\n"; + mtr_report("[ pass ] $timer"); } sub mtr_report_test_failed ($) { @@ -155,17 +157,17 @@ sub mtr_report_test_failed ($) { $tinfo->{'result'}= 'MTR_RES_FAILED'; if ( defined $tinfo->{'timeout'} ) { - print "[ fail ] timeout\n"; + mtr_report("[ fail ] timeout"); return; } else { - print "[ fail ]\n"; + mtr_report("[ fail ]"); } if ( $tinfo->{'comment'} ) { - print "\nERROR: $tinfo->{'comment'}\n"; + mtr_report("\nERROR: $tinfo->{'comment'}"); } elsif ( -f $::path_timefile ) { @@ -175,7 +177,7 @@ sub mtr_report_test_failed ($) { } else { - print "\nUnexpected termination, probably when starting mysqld\n"; + mtr_report("\nUnexpected termination, probably when starting mysqld");; } } @@ -243,8 +245,8 @@ sub mtr_report_stats ($) { if ( $::opt_timer ) { - print - "Spent $::glob_tot_real_time seconds actually executing testcases\n" + printf("Spent %.3f seconds actually executing testcases\n", + $::glob_tot_real_time); } # ---------------------------------------------------------------------- @@ -397,35 +399,66 @@ sub mtr_print_header () { ############################################################################## # -# Misc +# Log and reporting functions # ############################################################################## +use IO::File; + +my $log_file_ref= undef; + +sub mtr_log_init ($) { + my ($filename)= @_; + + mtr_error("Log is already open") if defined $log_file_ref; + + $log_file_ref= IO::File->new($filename, "a") or + mtr_warning("Could not create logfile $filename: $!"); +} + +sub _mtr_log (@) { + print $log_file_ref join(" ", @_),"\n" + if defined $log_file_ref; +} + sub mtr_report (@) { + # Print message to screen and log + _mtr_log(@_); print join(" ", @_),"\n"; } sub mtr_warning (@) { + # Print message to screen and log + _mtr_log("WARNING: ", @_); print STDERR "mysql-test-run: WARNING: ",join(" ", @_),"\n"; } sub mtr_error (@) { + # Print message to screen and log + _mtr_log("ERROR: ", @_); print STDERR "mysql-test-run: *** ERROR: ",join(" ", @_),"\n"; mtr_exit(1); } sub mtr_child_error (@) { + # Print message to screen and log + _mtr_log("ERROR(child): ", @_); print STDERR "mysql-test-run: *** ERROR(child): ",join(" ", @_),"\n"; exit(1); } sub mtr_debug (@) { + # Only print if --script-debug is used if ( $::opt_script_debug ) { + _mtr_log("###: ", @_); print STDERR "####: ",join(" ", @_),"\n"; } } + sub mtr_verbose (@) { + # Always print to log, print to screen only when --verbose is used + _mtr_log("> ",@_); if ( $::opt_verbose ) { print STDERR "> ",join(" ", @_),"\n"; diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index c58ed308bd8..208127358c2 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -2891,6 +2891,9 @@ sub initialize_servers () { } } check_running_as_root(); + + mtr_log_init("$opt_vardir/log/mysql-test-run.log"); + } sub mysql_install_db () { @@ -3612,13 +3615,13 @@ sub report_failure_and_restart ($) { # Restore the snapshot of the installed test db restore_installed_db($tinfo->{'name'}); - print "Resuming Tests\n\n"; + mtr_report("Resuming Tests\n"); return; } my $test_mode= join(" ", @::glob_test_mode) || "default"; - print "Aborting: $tinfo->{'name'} failed in $test_mode mode. "; - print "To continue, re-run with '--force'.\n"; + mtr_report("Aborting: $tinfo->{'name'} failed in $test_mode mode. "); + mtr_report("To continue, re-run with '--force'."); if ( ! $glob_debugger and ! $opt_extern and ! $glob_use_embedded_server ) @@ -4076,11 +4079,11 @@ sub mysqld_start ($$$) { sub stop_all_servers () { - print "Stopping All Servers\n"; + mtr_report("Stopping All Servers"); if ( ! $opt_skip_im ) { - print "Shutting-down Instance Manager\n"; + mtr_report("Shutting-down Instance Manager"); unless (mtr_im_stop($instance_manager, "stop_all_servers")) { mtr_error("Failed to stop Instance Manager.") From 8a2384d5e982324abb2d5e1490f963825d0d3194 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 3 Aug 2007 12:37:00 +0200 Subject: [PATCH 013/194] Many files: Post-merge fix. mysql-test/suite/rpl/r/rpl_udf.result: Post-merge fix. mysql-test/suite/ndb/r/ndb_dd_basic.result: Post-merge fix. mysql-test/suite/ndb/r/ndb_dd_ddl.result: Post-merge fix. mysql-test/suite/ndb/r/ndb_gis.result: Post-merge fix. mysql-test/suite/ndb/r/ndb_row_format.result: Post-merge fix. mysql-test/suite/ndb/r/ndb_single_user.result: Post-merge fix. --- mysql-test/suite/ndb/r/ndb_dd_basic.result | 6 +++--- mysql-test/suite/ndb/r/ndb_dd_ddl.result | 2 +- mysql-test/suite/ndb/r/ndb_gis.result | 4 ++-- mysql-test/suite/ndb/r/ndb_row_format.result | 2 +- mysql-test/suite/ndb/r/ndb_single_user.result | 10 +++++----- mysql-test/suite/rpl/r/rpl_udf.result | 8 ++++---- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/mysql-test/suite/ndb/r/ndb_dd_basic.result b/mysql-test/suite/ndb/r/ndb_dd_basic.result index bc1762ce407..b23d178acde 100644 --- a/mysql-test/suite/ndb/r/ndb_dd_basic.result +++ b/mysql-test/suite/ndb/r/ndb_dd_basic.result @@ -5,20 +5,20 @@ INITIAL_SIZE 16M UNDO_BUFFER_SIZE = 1M ENGINE=MYISAM; Warnings: -Error 1475 Table storage engine 'MyISAM' does not support the create option 'TABLESPACE or LOGFILE GROUP' +Error 1476 Table storage engine 'MyISAM' does not support the create option 'TABLESPACE or LOGFILE GROUP' ALTER LOGFILE GROUP lg1 ADD UNDOFILE 'undofile02.dat' INITIAL_SIZE = 4M ENGINE=XYZ; Warnings: Warning 1286 Unknown table engine 'XYZ' -Error 1475 Table storage engine 'MyISAM' does not support the create option 'TABLESPACE or LOGFILE GROUP' +Error 1476 Table storage engine 'MyISAM' does not support the create option 'TABLESPACE or LOGFILE GROUP' CREATE TABLESPACE ts1 ADD DATAFILE 'datafile.dat' USE LOGFILE GROUP lg1 INITIAL_SIZE 12M; Warnings: -Error 1475 Table storage engine 'MyISAM' does not support the create option 'TABLESPACE or LOGFILE GROUP' +Error 1476 Table storage engine 'MyISAM' does not support the create option 'TABLESPACE or LOGFILE GROUP' set storage_engine=ndb; CREATE LOGFILE GROUP lg1 ADD UNDOFILE 'undofile.dat' diff --git a/mysql-test/suite/ndb/r/ndb_dd_ddl.result b/mysql-test/suite/ndb/r/ndb_dd_ddl.result index 55f1f56fd0c..33536038b1b 100644 --- a/mysql-test/suite/ndb/r/ndb_dd_ddl.result +++ b/mysql-test/suite/ndb/r/ndb_dd_ddl.result @@ -16,7 +16,7 @@ ERROR HY000: Failed to create LOGFILE GROUP SHOW WARNINGS; Level Code Message Error 1296 Got error 1514 'Currently there is a limit of one logfile group' from NDB -Error 1525 Failed to create LOGFILE GROUP +Error 1526 Failed to create LOGFILE GROUP CREATE LOGFILE GROUP lg1 ADD UNDOFILE 'undofile.dat' INITIAL_SIZE 1M diff --git a/mysql-test/suite/ndb/r/ndb_gis.result b/mysql-test/suite/ndb/r/ndb_gis.result index 54f1fc23489..1d593f471d1 100644 --- a/mysql-test/suite/ndb/r/ndb_gis.result +++ b/mysql-test/suite/ndb/r/ndb_gis.result @@ -463,7 +463,7 @@ drop table t1; End of 4.1 tests CREATE TABLE t1 (name VARCHAR(100), square GEOMETRY); Warnings: -Error 1475 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK' +Error 1476 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK' INSERT INTO t1 VALUES("center", GeomFromText('POLYGON (( 0 0, 0 2, 2 2, 2 0, 0 0))')); INSERT INTO t1 VALUES("small", GeomFromText('POLYGON (( 0 0, 0 1, 1 1, 1 0, 0 0))')); INSERT INTO t1 VALUES("big", GeomFromText('POLYGON (( 0 0, 0 3, 3 3, 3 0, 0 0))')); @@ -1013,7 +1013,7 @@ drop table t1; End of 4.1 tests CREATE TABLE t1 (name VARCHAR(100), square GEOMETRY); Warnings: -Error 1475 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK' +Error 1476 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK' INSERT INTO t1 VALUES("center", GeomFromText('POLYGON (( 0 0, 0 2, 2 2, 2 0, 0 0))')); INSERT INTO t1 VALUES("small", GeomFromText('POLYGON (( 0 0, 0 1, 1 1, 1 0, 0 0))')); INSERT INTO t1 VALUES("big", GeomFromText('POLYGON (( 0 0, 0 3, 3 3, 3 0, 0 0))')); diff --git a/mysql-test/suite/ndb/r/ndb_row_format.result b/mysql-test/suite/ndb/r/ndb_row_format.result index 37c239986f6..44880e28c83 100644 --- a/mysql-test/suite/ndb/r/ndb_row_format.result +++ b/mysql-test/suite/ndb/r/ndb_row_format.result @@ -8,7 +8,7 @@ ENGINE=NDB; ERROR HY000: Can't create table 'test.t1' (errno: 138) SHOW WARNINGS; Level Code Message -Error 1475 Table storage engine 'ndbcluster' does not support the create option 'Row format FIXED incompatible with variable sized attribute' +Error 1476 Table storage engine 'ndbcluster' does not support the create option 'Row format FIXED incompatible with variable sized attribute' Error 1005 Can't create table 'test.t1' (errno: 138) CREATE TABLE t1 ( a INT KEY, diff --git a/mysql-test/suite/ndb/r/ndb_single_user.result b/mysql-test/suite/ndb/r/ndb_single_user.result index f916422a509..11e8f098416 100644 --- a/mysql-test/suite/ndb/r/ndb_single_user.result +++ b/mysql-test/suite/ndb/r/ndb_single_user.result @@ -11,7 +11,7 @@ ERROR HY000: Failed to create LOGFILE GROUP show warnings; Level Code Message Error 1296 Got error 299 'Operation not allowed or aborted due to single user mode' from NDB -Error 1525 Failed to create LOGFILE GROUP +Error 1526 Failed to create LOGFILE GROUP create table t1 (a int key, b int unique, c int) engine ndb; CREATE LOGFILE GROUP lg1 ADD UNDOFILE 'undofile.dat' @@ -27,14 +27,14 @@ ERROR HY000: Failed to create TABLESPACE show warnings; Level Code Message Error 1296 Got error 299 'Operation not allowed or aborted due to single user mode' from NDB -Error 1525 Failed to create TABLESPACE +Error 1526 Failed to create TABLESPACE DROP LOGFILE GROUP lg1 ENGINE =NDB; ERROR HY000: Failed to drop LOGFILE GROUP show warnings; Level Code Message Error 1296 Got error 299 'Operation not allowed or aborted due to single user mode' from NDB -Error 1526 Failed to drop LOGFILE GROUP +Error 1527 Failed to drop LOGFILE GROUP CREATE TABLESPACE ts1 ADD DATAFILE 'datafile.dat' USE LOGFILE GROUP lg1 @@ -47,7 +47,7 @@ ERROR HY000: Failed to alter: DROP DATAFILE show warnings; Level Code Message Error 1296 Got error 299 'Operation not allowed or aborted due to single user mode' from NDB -Error 1530 Failed to alter: DROP DATAFILE +Error 1531 Failed to alter: DROP DATAFILE ALTER TABLESPACE ts1 DROP DATAFILE 'datafile.dat' ENGINE NDB; @@ -57,7 +57,7 @@ ERROR HY000: Failed to drop TABLESPACE show warnings; Level Code Message Error 1296 Got error 299 'Operation not allowed or aborted due to single user mode' from NDB -Error 1526 Failed to drop TABLESPACE +Error 1527 Failed to drop TABLESPACE DROP TABLESPACE ts1 ENGINE NDB; DROP LOGFILE GROUP lg1 diff --git a/mysql-test/suite/rpl/r/rpl_udf.result b/mysql-test/suite/rpl/r/rpl_udf.result index d21cfd2539b..1fa9cb3ffc2 100644 --- a/mysql-test/suite/rpl/r/rpl_udf.result +++ b/mysql-test/suite/rpl/r/rpl_udf.result @@ -182,19 +182,19 @@ CREATE TABLE t1(sum INT, price FLOAT(24)) ENGINE=MyISAM; affected rows: 0 INSERT INTO t1 VALUES(myfunc_int(100), myfunc_double(50.00)); Warnings: -Warning 1589 Statement is not safe to log in statement format. +Warning 1590 Statement is not safe to log in statement format. affected rows: 1 INSERT INTO t1 VALUES(myfunc_int(10), myfunc_double(5.00)); Warnings: -Warning 1589 Statement is not safe to log in statement format. +Warning 1590 Statement is not safe to log in statement format. affected rows: 1 INSERT INTO t1 VALUES(myfunc_int(200), myfunc_double(25.00)); Warnings: -Warning 1589 Statement is not safe to log in statement format. +Warning 1590 Statement is not safe to log in statement format. affected rows: 1 INSERT INTO t1 VALUES(myfunc_int(1), myfunc_double(500.00)); Warnings: -Warning 1589 Statement is not safe to log in statement format. +Warning 1590 Statement is not safe to log in statement format. affected rows: 1 SELECT * FROM t1 ORDER BY sum; sum price From 78a3a625cf949eea90141f4d0cc693bc77ce9aef Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 3 Aug 2007 12:50:00 +0200 Subject: [PATCH 014/194] Improve report on test execution time Define tot_real_tim locally in mtr_report.pl mysql-test/mysql-test-run.pl: Move global variable to local scope in the file it's being used --- mysql-test/lib/mtr_report.pl | 11 ++++++++--- mysql-test/mysql-test-run.pl | 1 - 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/mysql-test/lib/mtr_report.pl b/mysql-test/lib/mtr_report.pl index 1abfc6b6b57..69a7abec465 100644 --- a/mysql-test/lib/mtr_report.pl +++ b/mysql-test/lib/mtr_report.pl @@ -38,6 +38,9 @@ sub mtr_child_error (@); sub mtr_debug (@); sub mtr_verbose (@); +my $tot_real_time= 0; + + ############################################################################## # @@ -142,7 +145,7 @@ sub mtr_report_test_passed ($) { if ( $::opt_timer and -f "$::opt_vardir/log/timer" ) { $timer= mtr_fromfile("$::opt_vardir/log/timer"); - $::glob_tot_real_time += ($timer/1000); + $tot_real_time += ($timer/1000); $timer= sprintf "%12s", $timer; } $tinfo->{'result'}= 'MTR_RES_PASSED'; @@ -243,8 +246,10 @@ sub mtr_report_stats ($) { if ( $::opt_timer ) { - print - "Spent $::glob_tot_real_time seconds actually executing testcases\n" + use English; + + mtr_report("Spent", sprintf("%.3f", $tot_real_time),"of", + time - $BASETIME, "seconds executing testcases"); } # ---------------------------------------------------------------------- diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 43b1ef7ac86..b072298756f 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -307,7 +307,6 @@ our @data_dir_lst; our $used_binlog_format; our $used_default_engine; our $debug_compiled_binaries; -our $glob_tot_real_time= 0; our %mysqld_variables; From a1552e8f8da5fc3edb3734be72c2e1f7a7ae3ebb Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 3 Aug 2007 12:54:06 +0200 Subject: [PATCH 015/194] Remove the temporary file created by mysql_upgrade client/mysql_upgrade.c: Remove the temporary file after it's been used --- client/mysql_upgrade.c | 1 + 1 file changed, 1 insertion(+) diff --git a/client/mysql_upgrade.c b/client/mysql_upgrade.c index 64de3d19882..13f5d2606a9 100644 --- a/client/mysql_upgrade.c +++ b/client/mysql_upgrade.c @@ -457,6 +457,7 @@ static int run_query(const char *query, DYNAMIC_STRING *ds_res, NULL); my_close(fd, MYF(0)); + my_delete(query_file_path, MYF(0)); DBUG_RETURN(ret); } From 8b265ffcc1222be7b19c1f1ca908acca847f8a6b Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 3 Aug 2007 12:56:45 +0200 Subject: [PATCH 016/194] Cleanup created procedures in sp.test mysql-test/r/sp.result: Cleanup created procedures mysql-test/t/sp.test: Cleanup created procedures --- mysql-test/r/sp.result | 1 + mysql-test/t/sp.test | 1 + 2 files changed, 2 insertions(+) diff --git a/mysql-test/r/sp.result b/mysql-test/r/sp.result index 7a4deb3ea5f..481ddcd838e 100644 --- a/mysql-test/r/sp.result +++ b/mysql-test/r/sp.result @@ -5743,6 +5743,7 @@ bug23760_rc_test(ROW_COUNT()) DROP TABLE bug23760, bug23760_log| DROP PROCEDURE bug23760_update_log| DROP PROCEDURE bug23760_test_row_count| +DROP PROCEDURE bug23760_test_row_count2| DROP FUNCTION bug23760_rc_test| DROP PROCEDURE IF EXISTS bug24117| DROP TABLE IF EXISTS t3| diff --git a/mysql-test/t/sp.test b/mysql-test/t/sp.test index ef66f1c98f0..c98d12a34a6 100644 --- a/mysql-test/t/sp.test +++ b/mysql-test/t/sp.test @@ -6710,6 +6710,7 @@ SELECT bug23760_rc_test(ROW_COUNT())| DROP TABLE bug23760, bug23760_log| DROP PROCEDURE bug23760_update_log| DROP PROCEDURE bug23760_test_row_count| +DROP PROCEDURE bug23760_test_row_count2| DROP FUNCTION bug23760_rc_test| # From 2cedc54d335b99c7e755981fe3cfc1f8f4ab61dd Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 3 Aug 2007 13:12:53 +0200 Subject: [PATCH 017/194] WL#3935 Improve mysqltest report and exitcode for diff - Move the code to generate test report to the test tool(in this case mysqltest) where the best control of what failed is - Simplify the code in mysql-test-run.pl - mysqltest will now find what diff to use in a best effort attempt using "diff -u", "diff -c" and finally dumping the two files verbatim in the report. client/mysqltest.c: - Add new option --tail-lines indicating how many lines of the result to output when generating report for a failure - Remove eval_result, noone knows what it should do and it's not used. - Add support for best effort execution of systems builtin "diff", try with "diff -u" and "diff -c" and if that fails dump the whole content of teh two files to report - Use one common function when comapring two files, used when test has completed and the result should be compared to the .result file as well as using it from myqltest's builtin diff_files command. - Output the last lines og the result so far in the report that mysqltest generates in case of a test failure. mysql-test/lib/mtr_report.pl: - Remove code for generating diff between .reject and .result file, that is handled by mysqltest(or the test tool) from now on. - Add better comments mysql-test/mysql-test-run.pl: - Remove the --udiff flag to mysql-test-run.pl, if the systems diff supports unified diff it will be used automatically - Remove the code for "mtr_show_failed_diff", the report from mysqltest will know include the diff so if mysqltest(or another test tool) fails, just display it's report what went wrong - Pass --tail-lines=20 to mysqltest to it will shos the last 20 lines from the result in the report in case of failure. mysql-test/r/mysqltest.result: Update result file now when the output from mysqltest has been sent to /dev/null mysql-test/t/mysqltest.test: - Improve tests for --diff_files - Remove temporary files in var/tmp generated in the fly - Send output from test for --diff_files to /deb/null since only the error code it returns are of interest and tyhe outpu may vary depending on what builtin diff is being used. --- client/mysqltest.c | 561 +++++++++++++++++++++++++--------- mysql-test/lib/mtr_report.pl | 61 +--- mysql-test/mysql-test-run.pl | 9 +- mysql-test/r/mysqltest.result | 3 +- mysql-test/t/mysqltest.test | 57 +++- 5 files changed, 479 insertions(+), 212 deletions(-) diff --git a/client/mysqltest.c b/client/mysqltest.c index d1ec753b54b..337a31ad7af 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -74,18 +74,12 @@ #define QUERY_SEND_FLAG 1 #define QUERY_REAP_FLAG 2 - enum { - RESULT_OK= 0, - RESULT_CONTENT_MISMATCH= 1, - RESULT_LENGTH_MISMATCH= 2 - }; - enum { OPT_SKIP_SAFEMALLOC=256, OPT_SSL_SSL, OPT_SSL_KEY, OPT_SSL_CERT, OPT_SSL_CA, OPT_SSL_CAPATH, OPT_SSL_CIPHER, OPT_PS_PROTOCOL, OPT_SP_PROTOCOL, OPT_CURSOR_PROTOCOL, OPT_VIEW_PROTOCOL, OPT_SSL_VERIFY_SERVER_CERT, OPT_MAX_CONNECT_RETRIES, - OPT_MARK_PROGRESS, OPT_CHARSETS_DIR, OPT_LOG_DIR + OPT_MARK_PROGRESS, OPT_CHARSETS_DIR, OPT_LOG_DIR, OPT_TAIL_LINES }; static int record= 0, opt_sleep= -1; @@ -117,6 +111,9 @@ static char line_buffer[MAX_DELIMITER_LENGTH], *line_buffer_pos= line_buffer; static uint start_lineno= 0; /* Start line of current command */ +/* Number of lines of the result to include in failure report */ +static uint opt_tail_lines= 0; + static char delimiter[MAX_DELIMITER_LENGTH]= ";"; static uint delimiter_length= 1; @@ -455,7 +452,6 @@ void free_tmp_sh_file(); void free_win_path_patterns(); #endif -static int eval_result = 0; /* For replace_column */ static char *replace_column[MAX_COLUMNS]; @@ -881,6 +877,24 @@ void die(const char *fmt, ...) fprintf(stderr, "\n"); fflush(stderr); + /* Show results from queries just before failure */ + if (ds_res.length && opt_tail_lines) + { + int tail_lines= opt_tail_lines; + char* show_from= ds_res.str + ds_res.length - 1; + while(show_from > ds_res.str && tail_lines > 0 ) + { + show_from--; + if (*show_from == '\n') + tail_lines--; + } + fprintf(stderr, "\nThe result from queries just before the failure was:\n"); + if (show_from > ds_res.str) + fprintf(stderr, "< snip >"); + fprintf(stderr, "%s", show_from); + fflush(stderr); + } + /* Dump the result that has been accumulated so far to .log file */ if (result_file_name && ds_res.length) dump_result_to_log_file(ds_res.str, ds_res.length); @@ -1009,77 +1023,372 @@ void log_msg(const char *fmt, ...) /* - Compare content of the string ds to content of file fname + Read a file and append it to ds + + SYNOPSIS + cat_file + ds - pointer to dynamic string where to add the files content + filename - name of the file to read + +*/ + +void cat_file(DYNAMIC_STRING* ds, const char* filename) +{ + int fd; + uint len; + char buff[512]; + + if ((fd= my_open(filename, O_RDONLY, MYF(0))) < 0) + die("Failed to open file %s", filename); + while((len= my_read(fd, (byte*)&buff, + sizeof(buff), MYF(0))) > 0) + { + char *p= buff, *start= buff; + while (p < buff+len) + { + /* Convert cr/lf to lf */ + if (*p == '\r' && *(p+1) && *(p+1)== '\n') + { + /* Add fake newline instead of cr and output the line */ + *p= '\n'; + p++; /* Step past the "fake" newline */ + dynstr_append_mem(ds, start, p-start); + p++; /* Step past the "fake" newline */ + start= p; + } + else + p++; + } + /* Output any chars that migh be left */ + dynstr_append_mem(ds, start, p-start); + } + my_close(fd, MYF(0)); +} + + +/* + Run the specified command with popen + + SYNOPSIS + run_command + cmd - command to execute(should be properly quoted + ds_res- pointer to dynamic string where to store the result + +*/ + +static int run_command(char* cmd, + DYNAMIC_STRING *ds_res) +{ + char buf[512]= {0}; + FILE *res_file; + int error; + + if (!(res_file= popen(cmd, "r"))) + die("popen(\"%s\", \"r\") failed", cmd); + + while (fgets(buf, sizeof(buf), res_file)) + { + DBUG_PRINT("info", ("buf: %s", buf)); + if(ds_res) + { + /* Save the output of this command in the supplied string */ + dynstr_append(ds_res, buf); + } + else + { + /* Print it directly on screen */ + fprintf(stdout, "%s", buf); + } + } + + error= pclose(res_file); + return WEXITSTATUS(error); +} + + +/* + Run the specified tool with variable number of arguments + + SYNOPSIS + run_tool + tool_path - the name of the tool to run + ds_res - pointer to dynamic string where to store the result + ... - variable number of arguments that will be properly + quoted and appended after the tool's name + +*/ + +static int run_tool(const char *tool_path, DYNAMIC_STRING *ds_res, ...) +{ + int ret; + const char* arg; + va_list args; + DYNAMIC_STRING ds_cmdline; + + DBUG_ENTER("run_tool"); + DBUG_PRINT("enter", ("tool_path: %s", tool_path)); + + if (init_dynamic_string(&ds_cmdline, IF_WIN("\"", ""), FN_REFLEN, FN_REFLEN)) + die("Out of memory"); + + dynstr_append_os_quoted(&ds_cmdline, tool_path, NullS); + dynstr_append(&ds_cmdline, " "); + + va_start(args, ds_res); + + while ((arg= va_arg(args, char *))) + { + /* Options should be os quoted */ + if (strncmp(arg, "--", 2) == 0) + dynstr_append_os_quoted(&ds_cmdline, arg, NullS); + else + dynstr_append(&ds_cmdline, arg); + dynstr_append(&ds_cmdline, " "); + } + + va_end(args); + +#ifdef __WIN__ + dynstr_append(&ds_cmdline, "\""); +#endif + + DBUG_PRINT("info", ("Running: %s", ds_cmdline.str)); + ret= run_command(ds_cmdline.str, ds_res); + DBUG_PRINT("exit", ("ret: %d", ret)); + dynstr_free(&ds_cmdline); + DBUG_RETURN(ret); +} + + +/* + Show the diff of two files using the systems builtin diff + command. If no such diff command exist, just dump the content + of the two files and inform about how to get "diff" + + SYNOPSIS + show_diff + ds - pointer to dynamic string where to add the diff(may be NULL) + filename1 - name of first file + filename2 - name of second file + +*/ + +void show_diff(DYNAMIC_STRING* ds, + const char* filename1, const char* filename2) +{ + + DYNAMIC_STRING ds_tmp; + + if (init_dynamic_string(&ds_tmp, "", 256, 256)) + die("Out of memory"); + + /* First try with unified diff */ + if (run_tool("diff", + &ds_tmp, /* Get output from diff in ds_tmp */ + "-u", + filename1, + filename2, + "2>&1", + NULL) > 1) /* Most "diff" tools return >1 if error */ + { + dynstr_set(&ds_tmp, ""); + + /* Fallback to context diff with "diff -c" */ + if (run_tool("diff", + &ds_tmp, /* Get output from diff in ds_tmp */ + "-c", + filename1, + filename2, + "2>&1", + NULL) > 1) /* Most "diff" tools return >1 if error */ + { + /* + Fallback to dump both files to result file and inform + about installing "diff" + */ + dynstr_set(&ds_tmp, ""); + + dynstr_append(&ds_tmp, +"\n" +"The two files differ but it was not possible to execute 'diff' in\n" +"order to show only the difference, tried both 'diff -u' or 'diff -c'.\n" +"Instead the whole content of the two files was shown for you to diff manually. ;)\n\n" +"To get a better report you should install 'diff' on your system, which you\n" +"for example can get from http://www.gnu.org/software/diffutils/diffutils.html\n" +#ifdef __WIN__ +"or http://gnuwin32.sourceforge.net/packages/diffutils.htm\n" +#endif +"\n"); + + dynstr_append(&ds_tmp, " --- "); + dynstr_append(&ds_tmp, filename1); + dynstr_append(&ds_tmp, " >>>\n"); + cat_file(&ds_tmp, filename1); + dynstr_append(&ds_tmp, "<<<\n --- "); + dynstr_append(&ds_tmp, filename1); + dynstr_append(&ds_tmp, " >>>\n"); + cat_file(&ds_tmp, filename2); + dynstr_append(&ds_tmp, "<<<<\n"); + } + } + + if (ds) + { + /* Add the diff to output */ + dynstr_append_mem(ds, ds_tmp.str, ds_tmp.length); + } + else + { + /* Print diff directly to stdout */ + fprintf(stderr, "%s", ds_tmp.str); + } + + dynstr_free(&ds_tmp); + +} + + +enum compare_files_result_enum { + RESULT_OK= 0, + RESULT_CONTENT_MISMATCH= 1, + RESULT_LENGTH_MISMATCH= 2 +}; + +/* + Compare two files, given a fd to the first file and + name of the second file + + SYNOPSIS + compare_files2 + fd - Open file descriptor of the first file + filename2 - Name of second file + + RETURN VALUES + According to the values in "compare_files_result_enum" + +*/ + +int compare_files2(File fd, const char* filename2) +{ + int error= RESULT_OK; + File fd2; + uint len, len2; + char buff[512], buff2[512]; + + if ((fd2= my_open(filename2, O_RDONLY, MYF(0))) < 0) + { + my_close(fd, MYF(0)); + die("Failed to open second file: %s", filename2); + } + while((len= my_read(fd, (byte*)&buff, + sizeof(buff), MYF(0))) > 0) + { + if ((len2= my_read(fd2, (byte*)&buff2, + sizeof(buff2), MYF(0))) < len) + { + /* File 2 was smaller */ + error= RESULT_LENGTH_MISMATCH; + break; + } + if (len2 > len) + { + /* File 1 was smaller */ + error= RESULT_LENGTH_MISMATCH; + break; + } + if ((memcmp(buff, buff2, len))) + { + /* Content of this part differed */ + error= RESULT_CONTENT_MISMATCH; + break; + } + } + if (!error && my_read(fd2, (byte*)&buff2, + sizeof(buff2), MYF(0)) > 0) + { + /* File 1 was smaller */ + error= RESULT_LENGTH_MISMATCH; + } + + my_close(fd2, MYF(0)); + + return error; +} + + +/* + Compare two files, given their filenames + + SYNOPSIS + compare_files + filename1 - Name of first file + filename2 - Name of second file + + RETURN VALUES + See 'compare_files2' + +*/ + +int compare_files(const char* filename1, const char* filename2) +{ + File fd; + int error; + + if ((fd= my_open(filename1, O_RDONLY, MYF(0))) < 0) + die("Failed to open first file: %s", filename1); + + error= compare_files2(fd, filename2); + + my_close(fd, MYF(0)); + + return error; +} + + +/* + Compare content of the string in ds to content of file fname + + SYNOPSIS + dyn_string_cmp + ds - Dynamic string containing the string o be compared + fname - Name of file to compare with + + RETURN VALUES + See 'compare_files2' */ int dyn_string_cmp(DYNAMIC_STRING* ds, const char *fname) { - MY_STAT stat_info; - char *tmp, *res_ptr; - char eval_file[FN_REFLEN]; - int res; - uint res_len; - int fd; - DYNAMIC_STRING res_ds; + int error; + File fd; + char ds_temp_file_path[FN_REFLEN]; + DBUG_ENTER("dyn_string_cmp"); + DBUG_PRINT("enter", ("fname: %s", fname)); - if (!test_if_hard_path(fname)) - { - strxmov(eval_file, opt_basedir, fname, NullS); - fn_format(eval_file, eval_file, "", "", MY_UNPACK_FILENAME); - } - else - fn_format(eval_file, fname, "", "", MY_UNPACK_FILENAME); + if ((fd= create_temp_file(ds_temp_file_path, NULL, + "tmp", O_CREAT | O_SHARE | O_RDWR, + MYF(MY_WME))) < 0) + die("Failed to create temporary file for ds"); - if (!my_stat(eval_file, &stat_info, MYF(MY_WME))) - die(NullS); - if (!eval_result && (uint) stat_info.st_size != ds->length) + /* Write ds to temporary file and set file pos to beginning*/ + if (my_write(fd, ds->str, ds->length, + MYF(MY_FNABP | MY_WME)) || + my_seek(fd, 0, SEEK_SET, MYF(0)) == MY_FILEPOS_ERROR) { - DBUG_PRINT("info",("Size differs: result size: %u file size: %lu", - ds->length, (ulong) stat_info.st_size)); - DBUG_PRINT("info",("result: '%s'", ds->str)); - DBUG_RETURN(RESULT_LENGTH_MISMATCH); - } - if (!(tmp = (char*) my_malloc(stat_info.st_size + 1, MYF(MY_WME)))) - die("Out of memory"); - - if ((fd = my_open(eval_file, O_RDONLY, MYF(MY_WME))) < 0) - die("Failed to open file %s", eval_file); - if (my_read(fd, (byte*)tmp, stat_info.st_size, MYF(MY_WME|MY_NABP))) - die("Failed to read from file %s, errno: %d", eval_file, errno); - tmp[stat_info.st_size] = 0; - init_dynamic_string(&res_ds, "", stat_info.st_size+256, 256); - if (eval_result) - { - do_eval(&res_ds, tmp, tmp + stat_info.st_size, FALSE); - res_ptr= res_ds.str; - res_len= res_ds.length; - if (res_len != ds->length) - { - res= RESULT_LENGTH_MISMATCH; - goto err; - } - } - else - { - res_ptr = tmp; - res_len = stat_info.st_size; + my_close(fd, MYF(0)); + /* Remove the temporary file */ + my_delete(ds_temp_file_path, MYF(0)); + die("Failed to write to '%s'", ds_temp_file_path); } - res= (memcmp(res_ptr, ds->str, res_len)) ? - RESULT_CONTENT_MISMATCH : RESULT_OK; + error= compare_files2(fd, fname); -err: - if (res && eval_result) - str_to_file(fn_format(eval_file, fname, "", ".eval", - MY_REPLACE_EXT), - res_ptr, res_len); + my_close(fd, MYF(0)); + /* Remove the temporary file */ + my_delete(ds_temp_file_path, MYF(0)); - dynstr_free(&res_ds); - my_free((gptr) tmp, MYF(0)); - my_close(fd, MYF(MY_WME)); - - DBUG_RETURN(res); + DBUG_RETURN(error); } @@ -1097,21 +1406,34 @@ err: void check_result(DYNAMIC_STRING* ds) { + const char* mess= "Result content mismatch\n"; + DBUG_ENTER("check_result"); DBUG_ASSERT(result_file_name); + DBUG_PRINT("enter", ("result_file_name: %s", result_file_name)); switch (dyn_string_cmp(ds, result_file_name)) { case RESULT_OK: break; /* ok */ case RESULT_LENGTH_MISMATCH: - dump_result_to_reject_file(ds->str, ds->length); - die("Result length mismatch"); - break; + mess= "Result length mismatch\n"; + /* Fallthrough */ case RESULT_CONTENT_MISMATCH: - dump_result_to_reject_file(ds->str, ds->length); - die("Result content mismatch"); + { + /* Result mismatched, dump results to .reject file and then show the diff */ + char reject_file[FN_REFLEN]; + fn_format(reject_file, result_file_name, "", ".reject", + MY_REPLACE_EXT); + DBUG_PRINT("enter", ("reject_file_name: %s", reject_file)); + str_to_file(reject_file, ds->str, ds->length); + + dynstr_set(ds, NULL); /* Don't create a .log file */ + + show_diff(NULL, result_file_name, reject_file); + die(mess); break; + } default: /* impossible */ die("Unknown error code from dyn_string_cmp()"); } @@ -1126,7 +1448,7 @@ void check_result(DYNAMIC_STRING* ds) indicating that test is not supported SYNOPSIS - check_result + check_require ds - content to be checked fname - name of file to check against @@ -1530,7 +1852,7 @@ void var_query_set(VAR *var, const char *query, const char** query_end) void var_set_query_get_value(struct st_command *command, VAR *var) { - ulong row_no; + long row_no; int col_no= -1; MYSQL_RES* res; MYSQL* mysql= &cur_con->mysql; @@ -1602,7 +1924,7 @@ void var_set_query_get_value(struct st_command *command, VAR *var) { /* Get the value */ MYSQL_ROW row; - ulong rows= 0; + long rows= 0; const char* value= "No such row"; while ((row= mysql_fetch_row(res))) @@ -2438,9 +2760,6 @@ void do_append_file(struct st_command *command) void do_cat_file(struct st_command *command) { - int fd; - uint len; - char buff[512]; static DYNAMIC_STRING ds_filename; const struct command_arg cat_file_args[] = { "filename", ARG_STRING, TRUE, &ds_filename, "File to read from" @@ -2455,37 +2774,13 @@ void do_cat_file(struct st_command *command) DBUG_PRINT("info", ("Reading from, file: %s", ds_filename.str)); - if ((fd= my_open(ds_filename.str, O_RDONLY, MYF(0))) < 0) - die("Failed to open file %s", ds_filename.str); - while((len= my_read(fd, (byte*)&buff, - sizeof(buff), MYF(0))) > 0) - { - char *p= buff, *start= buff; - while (p < buff+len) - { - /* Convert cr/lf to lf */ - if (*p == '\r' && *(p+1) && *(p+1)== '\n') - { - /* Add fake newline instead of cr and output the line */ - *p= '\n'; - p++; /* Step past the "fake" newline */ - dynstr_append_mem(&ds_res, start, p-start); - p++; /* Step past the "fake" newline */ - start= p; - } - else - p++; - } - /* Output any chars that migh be left */ - dynstr_append_mem(&ds_res, start, p-start); - } - my_close(fd, MYF(0)); + cat_file(&ds_res, ds_filename.str); + dynstr_free(&ds_filename); DBUG_VOID_RETURN; } - /* SYNOPSIS do_diff_files @@ -2501,9 +2796,6 @@ void do_cat_file(struct st_command *command) void do_diff_files(struct st_command *command) { int error= 0; - int fd, fd2; - uint len, len2; - char buff[512], buff2[512]; static DYNAMIC_STRING ds_filename; static DYNAMIC_STRING ds_filename2; const struct command_arg diff_file_args[] = { @@ -2518,39 +2810,14 @@ void do_diff_files(struct st_command *command) sizeof(diff_file_args)/sizeof(struct command_arg), ' '); - if ((fd= my_open(ds_filename.str, O_RDONLY, MYF(0))) < 0) - die("Failed to open first file %s", ds_filename.str); - if ((fd2= my_open(ds_filename2.str, O_RDONLY, MYF(0))) < 0) + if ((error= compare_files(ds_filename.str, ds_filename2.str))) { - my_close(fd, MYF(0)); - die("Failed to open second file %s", ds_filename2.str); - } - while((len= my_read(fd, (byte*)&buff, - sizeof(buff), MYF(0))) > 0) - { - if ((len2= my_read(fd2, (byte*)&buff2, - sizeof(buff2), MYF(0))) != len) - { - /* File 2 was smaller */ - error= 1; - break; - } - if ((memcmp(buff, buff2, len))) - { - /* Content of this part differed */ - error= 1; - break; - } - } - if (my_read(fd2, (byte*)&buff2, - sizeof(buff2), MYF(0)) > 0) - { - /* File 1 was smaller */ - error= 1; + /* Compare of the two files failed, append them to output + so the failure can be analyzed + */ + show_diff(&ds_res, ds_filename.str, ds_filename2.str); } - my_close(fd, MYF(0)); - my_close(fd2, MYF(0)); dynstr_free(&ds_filename); dynstr_free(&ds_filename2); handle_command_error(command, error); @@ -4408,7 +4675,7 @@ void check_eol_junk(const char *eol) terminated by new line '\n' regardless how many "delimiter" it contain. */ -#define MAX_QUERY (256*1024) /* 256K -- a test in sp-big is >128K */ +#define MAX_QUERY (256*1024*2) /* 256K -- a test in sp-big is >128K */ static char read_command_buf[MAX_QUERY]; int read_command(struct st_command** command_ptr) @@ -4542,6 +4809,10 @@ static struct my_option my_long_options[] = {"sp-protocol", OPT_SP_PROTOCOL, "Use stored procedures for select", (gptr*) &sp_protocol, (gptr*) &sp_protocol, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, + {"tail-lines", OPT_TAIL_LINES, + "Number of lines of the resul to include in a failure report", + (gptr*) &opt_tail_lines, (gptr*) &opt_tail_lines, 0, + GET_INT, REQUIRED_ARG, 0, 0, 10000, 0, 0, 0}, #include "sslopt-longopts.h" {"test-file", 'x', "Read test from/in this file (default stdin).", 0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, @@ -4793,14 +5064,6 @@ void str_to_file(const char *fname, char *str, int size) } -void dump_result_to_reject_file(char *buf, int size) -{ - char reject_file[FN_REFLEN]; - str_to_file(fn_format(reject_file, result_file_name, "", ".reject", - MY_REPLACE_EXT), - buf, size); -} - void dump_result_to_log_file(char *buf, int size) { char log_file[FN_REFLEN]; @@ -4808,6 +5071,8 @@ void dump_result_to_log_file(char *buf, int size) *opt_logdir ? MY_REPLACE_DIR | MY_REPLACE_EXT : MY_REPLACE_EXT), buf, size); + fprintf(stderr, "\nMore results from queries before failure can be found in %s\n", + log_file); } void dump_progress(void) @@ -5792,7 +6057,7 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags) init_dynamic_string(&ds_warnings, NULL, 0, 256); - /* Scan for warning before sendign to server */ + /* Scan for warning before sending to server */ scan_command_for_warnings(command); /* @@ -6424,7 +6689,7 @@ int main(int argc, char **argv) break; case Q_LET: do_let(command); break; case Q_EVAL_RESULT: - eval_result = 1; break; + die("'eval_result' command is deprecated"); case Q_EVAL: case Q_QUERY_VERTICAL: case Q_QUERY_HORIZONTAL: diff --git a/mysql-test/lib/mtr_report.pl b/mysql-test/lib/mtr_report.pl index 1abfc6b6b57..aa83d42acc7 100644 --- a/mysql-test/lib/mtr_report.pl +++ b/mysql-test/lib/mtr_report.pl @@ -26,7 +26,6 @@ sub mtr_report_test_failed($); sub mtr_report_test_skipped($); sub mtr_report_test_not_skipped_though_disabled($); -sub mtr_show_failed_diff ($); sub mtr_report_stats ($); sub mtr_print_line (); sub mtr_print_thick_line (); @@ -45,55 +44,6 @@ sub mtr_verbose (@); # ############################################################################## -# We can't use diff -u or diff -a as these are not portable - -sub mtr_show_failed_diff ($) { - my $result_file_name= shift; - - # The reject and log files have been dumped to - # to filenames based on the result_file's name - my $tname= basename($result_file_name); - $tname=~ s/\..*$//; - - my $reject_file= "r/$tname.reject"; - my $result_file= "r/$tname.result"; - my $log_file= "r/$tname.log"; - my $eval_file= "r/$tname.eval"; - - if ( $::opt_suite ne "main" ) - { - $reject_file= "$::glob_mysql_test_dir/suite/$::opt_suite/$reject_file"; - $result_file= "$::glob_mysql_test_dir/suite/$::opt_suite/$result_file"; - $eval_file= "$::glob_mysql_test_dir/suite/$::opt_suite/$eval_file"; - $log_file= "$::glob_mysql_test_dir/suite/$::opt_suite/$log_file"; - } - - if ( -f $eval_file ) - { - $result_file= $eval_file; - } - - my $diffopts= $::opt_udiff ? "-u" : "-c"; - - if ( -f $reject_file ) - { - print "Below are the diffs between actual and expected results:\n"; - print "-------------------------------------------------------\n"; - # FIXME check result code?! - mtr_run("diff",[$diffopts,$result_file,$reject_file], "", "", "", ""); - print "-------------------------------------------------------\n"; - print "Please follow the instructions outlined at\n"; - print "http://www.mysql.com/doc/en/Reporting_mysqltest_bugs.html\n"; - print "to find the reason to this problem and how to report this.\n\n"; - } - - if ( -f $log_file ) - { - print "Result from queries before failure can be found in $log_file\n"; - # FIXME Maybe a tail -f -n 10 $log_file here - } -} - sub mtr_report_test_name ($) { my $tinfo= shift; @@ -165,16 +115,23 @@ sub mtr_report_test_failed ($) { if ( $tinfo->{'comment'} ) { + # The test failure has been detected by mysql-test-run.pl + # when starting the servers or due to other error, the reason for + # failing the test is saved in "comment" print "\nERROR: $tinfo->{'comment'}\n"; } elsif ( -f $::path_timefile ) { - print "\nErrors are (from $::path_timefile) :\n"; + # Test failure was detected by test tool and it's report + # about what failed has been saved to file. Display the report. + print "\n"; print mtr_fromfile($::path_timefile); # FIXME print_file() instead - print "\n(the last lines may be the most important ones)\n"; + print "\n"; } else { + # Neither this script or the test tool has recorded info + # about why the test has failed. Should be debugged. print "\nUnexpected termination, probably when starting mysqld\n"; } } diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index c58ed308bd8..8422d749c08 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -83,7 +83,6 @@ require "lib/mtr_io.pl"; require "lib/mtr_gcov.pl"; require "lib/mtr_gprof.pl"; require "lib/mtr_report.pl"; -require "lib/mtr_diff.pl"; require "lib/mtr_match.pl"; require "lib/mtr_misc.pl"; require "lib/mtr_stress.pl"; @@ -281,8 +280,6 @@ our $opt_wait_for_slave; our $opt_warnings; -our $opt_udiff; - our $opt_skip_ndbcluster= 0; our $opt_skip_ndbcluster_slave= 0; our $opt_with_ndbcluster= 0; @@ -619,7 +616,6 @@ sub command_line_setup () { 'start-dirty' => \$opt_start_dirty, 'start-and-exit' => \$opt_start_and_exit, 'timer!' => \$opt_timer, - 'unified-diff|udiff' => \$opt_udiff, 'user=s' => \$opt_user, 'testcase-timeout=i' => \$opt_testcase_timeout, 'suite-timeout=i' => \$opt_suite_timeout, @@ -3603,7 +3599,6 @@ sub report_failure_and_restart ($) { my $tinfo= shift; mtr_report_test_failed($tinfo); - mtr_show_failed_diff($tinfo->{'result_file'}); print "\n"; if ( $opt_force ) { @@ -4788,6 +4783,9 @@ sub run_mysqltest ($) { mtr_add_arg($args, "--test-file=%s", $tinfo->{'path'}); + # Number of lines of resut to include in failure report + mtr_add_arg($args, "--tail-lines=20"); + if ( defined $tinfo->{'result_file'} ) { mtr_add_arg($args, "--result-file=%s", $tinfo->{'result_file'}); } @@ -5199,7 +5197,6 @@ Misc options fast Don't try to clean up from earlier runs reorder Reorder tests to get fewer server restarts help Get this help text - unified-diff | udiff When presenting differences, use unified diff testcase-timeout=MINUTES Max test case run time (default $default_testcase_timeout) suite-timeout=MINUTES Max test suite run time (default $default_suite_timeout) diff --git a/mysql-test/r/mysqltest.result b/mysql-test/r/mysqltest.result index 55f78d22272..300ca69f2b4 100644 --- a/mysql-test/r/mysqltest.result +++ b/mysql-test/r/mysqltest.result @@ -461,7 +461,6 @@ root@localhost -------------------------------------------------------------------------------- this will be executed this will be executed -mysqltest: Result length mismatch mysqltest: The test didn't produce any output Failing multi statement query mysqltest: At line 3: query 'create table t1 (a int primary key); @@ -473,6 +472,8 @@ mysqltest: At line 3: query 'create table t1 (a int primary key); insert into t1 values (1); select 'select-me'; insertz 'error query'' failed: 1064: 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 'insertz 'error query'' at line 1 + +More results from queries before failure can be found in MYSQLTEST_VARDIR/tmp/bug11731.log drop table t1; Multi statement using expected error create table t1 (a int primary key); diff --git a/mysql-test/t/mysqltest.test b/mysql-test/t/mysqltest.test index b01579dce53..9c29840ba9b 100644 --- a/mysql-test/t/mysqltest.test +++ b/mysql-test/t/mysqltest.test @@ -436,6 +436,8 @@ EOF --error 1 --exec $MYSQL_TEST < $MYSQLTEST_VARDIR/tmp/mysqltest.sql 2>&1 +remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql; + # # Extra delimiter # @@ -786,6 +788,7 @@ echo $var3_var3; --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR --error 1 --exec echo "source $MYSQLTEST_VARDIR/tmp/recursive.sql;" | $MYSQL_TEST 2>&1 +remove_file $MYSQLTEST_VARDIR/tmp/recursive.sql; # Source a file with error --exec echo "garbage ;" > $MYSQLTEST_VARDIR/tmp/error.sql @@ -793,6 +796,7 @@ echo $var3_var3; --error 1 --exec echo "source $MYSQLTEST_VARDIR/tmp/error.sql;" | $MYSQL_TEST 2>&1 +remove_file $MYSQLTEST_VARDIR/tmp/error.sql; # Test execution of source in a while loop --write_file $MYSQLTEST_VARDIR/tmp/sourced.inc @@ -1171,6 +1175,8 @@ EOF --error 1 --exec $MYSQL_TEST < $MYSQLTEST_VARDIR/tmp/mysqltest.sql 2>&1 +remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql; + # ---------------------------------------------------------------------------- # Test error messages returned from comments starting with a command # ---------------------------------------------------------------------------- @@ -1296,6 +1302,8 @@ EOF --error 1 --exec echo "source $MYSQLTEST_VARDIR/tmp/mysqltest.sql;" | $MYSQL_TEST 2>&1 +remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql; + # connect when "disable_abort_on_error" caused "connection not found" --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT --disable_abort_on_error @@ -1399,7 +1407,11 @@ select "this will be executed"; --exec touch $MYSQLTEST_VARDIR/tmp/zero_length_file.result --exec echo "echo ok;" > $MYSQLTEST_VARDIR/tmp/query.sql --error 1 ---exec $MYSQL_TEST -x $MYSQLTEST_VARDIR/tmp/query.sql -R $MYSQLTEST_VARDIR/tmp/zero_length_file.result 2>&1 +--exec $MYSQL_TEST -x $MYSQLTEST_VARDIR/tmp/query.sql -R $MYSQLTEST_VARDIR/tmp/zero_length_file.result > /dev/null 2>&1 + +remove_file $MYSQLTEST_VARDIR/tmp/zero_length_file.result; +remove_file $MYSQLTEST_VARDIR/tmp/zero_length_file.reject; + # # Test that a test file that does not generate any output fails. # @@ -1407,6 +1419,8 @@ select "this will be executed"; --error 1 --exec $MYSQL_TEST -x $MYSQLTEST_VARDIR/tmp/query.sql 2>&1 +remove_file $MYSQLTEST_VARDIR/tmp/query.sql; + # # Test that mysqltest fails when there are no queries executed # but a result file exists @@ -1436,6 +1450,7 @@ echo Failing multi statement query; --exec $MYSQL_TEST -x $MYSQLTEST_VARDIR/tmp/bug11731.sql 2>&1 drop table t1; +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR --error 1 --exec $MYSQL_TEST --record -x $MYSQLTEST_VARDIR/tmp/bug11731.sql -R $MYSQLTEST_VARDIR/tmp/bug11731.out 2>&1 # The .out file should be non existent @@ -1462,6 +1477,9 @@ drop table t1; # The .out file should exist --exec test -s $MYSQLTEST_VARDIR/tmp/bug11731.out drop table t1; +remove_file $MYSQLTEST_VARDIR/tmp/bug11731.out; +remove_file $MYSQLTEST_VARDIR/tmp/bug11731.log; +remove_file $MYSQLTEST_VARDIR/tmp/bug11731.sql; # # Bug#19890 mysqltest: "query" command is broken @@ -1607,19 +1625,48 @@ for diff_file command of mysqltest EOF +--write_file $MYSQLTEST_VARDIR/tmp/diff4.tmp +Some data +for diff_file command +of musqltest +EOF + # Compare equal files --diff_files $MYSQLTEST_VARDIR/tmp/diff1.tmp $MYSQLTEST_VARDIR/tmp/diff2.tmp --diff_files $MYSQLTEST_VARDIR/tmp/diff2.tmp $MYSQLTEST_VARDIR/tmp/diff1.tmp -# Compare files that differ ---error 1 ---diff_files $MYSQLTEST_VARDIR/tmp/diff3.tmp $MYSQLTEST_VARDIR/tmp/diff2.tmp ---error 1 +# Write the below commands to a intermediary file and execute them with +# mysqltest in --exec, since the output will vary depending on what "diff" +# is available it is sent to /dev/null +--write_file $MYSQLTEST_VARDIR/tmp/diff.test +# Compare files that differ in size +--error 2 --diff_files $MYSQLTEST_VARDIR/tmp/diff1.tmp $MYSQLTEST_VARDIR/tmp/diff3.tmp +--error 2 +--diff_files $MYSQLTEST_VARDIR/tmp/diff3.tmp $MYSQLTEST_VARDIR/tmp/diff1.tmp + +# Compare files that differ only in content +--error 1 +--diff_files $MYSQLTEST_VARDIR/tmp/diff1.tmp $MYSQLTEST_VARDIR/tmp/diff4.tmp +--error 1 +--diff_files $MYSQLTEST_VARDIR/tmp/diff4.tmp $MYSQLTEST_VARDIR/tmp/diff1.tmp +EOF + +# Execute the above diffs, and send their output to /dev/null - only +# interesting to see that it returns correct error codes +--exec $MYSQL_TEST < $MYSQLTEST_VARDIR/tmp/diff.test > /dev/null 2>&1 + # Compare equal files, again... --diff_files $MYSQLTEST_VARDIR/tmp/diff1.tmp $MYSQLTEST_VARDIR/tmp/diff2.tmp +--remove_file $MYSQLTEST_VARDIR/tmp/diff1.tmp +--remove_file $MYSQLTEST_VARDIR/tmp/diff2.tmp +--remove_file $MYSQLTEST_VARDIR/tmp/diff3.tmp +--remove_file $MYSQLTEST_VARDIR/tmp/diff4.tmp +--remove_file $MYSQLTEST_VARDIR/tmp/diff.test + + # ---------------------------------------------------------------------------- # test for file_exist # ---------------------------------------------------------------------------- From 71c3c0cfd57e1d37e4f04427388f8c473283540c Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 3 Aug 2007 14:14:33 +0300 Subject: [PATCH 018/194] Bug #25228: rpl_relayspace.test fails on powermacg5, vm-win2003-32-a A test case was waiting for a fixed number of seconds for a specific state of the slave IO thread to take place. Fixed by waiting in a loop for that specific thread state instead (or timeout). mysql-test/t/rpl_relayspace.test: Bug #25228: fixed test case --- mysql-test/t/rpl_relayspace.test | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/mysql-test/t/rpl_relayspace.test b/mysql-test/t/rpl_relayspace.test index 70315c14f34..d4ef2fe59bd 100644 --- a/mysql-test/t/rpl_relayspace.test +++ b/mysql-test/t/rpl_relayspace.test @@ -14,6 +14,22 @@ connection slave; reset slave; start slave io_thread; # Give the I/O thread time to block. +let $run= 1; +let $counter= 300; +while ($run) +{ + let $io_state= query_get_value("SHOW SLAVE STATUS", Slave_IO_State, 1); + if (`SELECT '$io_state' = 'Waiting for the slave SQL thread to free enough relay log space'`){ + let $run= 0; + } + sleep 0.1; + if (!$counter){ + --echo "Failed while waiting for slave IO thread block" + SHOW SLAVE STATUS; + exit; + } + dec $counter; +} sleep 2; # A bug caused the I/O thread to refuse stopping. stop slave io_thread; From 24661e5e533ebd22cd9d4d394a03ad110febcfce Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 3 Aug 2007 13:29:30 +0200 Subject: [PATCH 019/194] Update after merge, change "byte" and "gptr" into "uchar" and "uchar*" --- client/mysqltest.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/client/mysqltest.c b/client/mysqltest.c index 2a127c68a0c..45859dcc863 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -1024,7 +1024,7 @@ void cat_file(DYNAMIC_STRING* ds, const char* filename) if ((fd= my_open(filename, O_RDONLY, MYF(0))) < 0) die("Failed to open file %s", filename); - while((len= my_read(fd, (byte*)&buff, + while((len= my_read(fd, (uchar*)&buff, sizeof(buff), MYF(0))) > 0) { char *p= buff, *start= buff; @@ -1264,10 +1264,10 @@ int compare_files2(File fd, const char* filename2) my_close(fd, MYF(0)); die("Failed to open second file: %s", filename2); } - while((len= my_read(fd, (byte*)&buff, + while((len= my_read(fd, (uchar*)&buff, sizeof(buff), MYF(0))) > 0) { - if ((len2= my_read(fd2, (byte*)&buff2, + if ((len2= my_read(fd2, (uchar*)&buff2, sizeof(buff2), MYF(0))) < len) { /* File 2 was smaller */ @@ -1287,7 +1287,7 @@ int compare_files2(File fd, const char* filename2) break; } } - if (!error && my_read(fd2, (byte*)&buff2, + if (!error && my_read(fd2, (uchar*)&buff2, sizeof(buff2), MYF(0)) > 0) { /* File 1 was smaller */ @@ -4797,7 +4797,7 @@ static struct my_option my_long_options[] = GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, {"tail-lines", OPT_TAIL_LINES, "Number of lines of the resul to include in a failure report", - (gptr*) &opt_tail_lines, (gptr*) &opt_tail_lines, 0, + (uchar**) &opt_tail_lines, (uchar**) &opt_tail_lines, 0, GET_INT, REQUIRED_ARG, 0, 0, 10000, 0, 0, 0}, #include "sslopt-longopts.h" {"test-file", 'x', "Read test from/in this file (default stdin).", From 841ae6731f7979b10ec7493e2802e769bd5c01a5 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 3 Aug 2007 13:39:55 +0200 Subject: [PATCH 020/194] Add extra newline between diff and error message --- client/mysqltest.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/mysqltest.c b/client/mysqltest.c index 337a31ad7af..183374ea095 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -1240,7 +1240,7 @@ void show_diff(DYNAMIC_STRING* ds, else { /* Print diff directly to stdout */ - fprintf(stderr, "%s", ds_tmp.str); + fprintf(stderr, "%s\n", ds_tmp.str); } dynstr_free(&ds_tmp); From 34b58dd51dc3dd3ba15b517020eeab2b6db100d2 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 3 Aug 2007 13:42:31 +0200 Subject: [PATCH 021/194] Update to reflect new location of where log file end up --- mysql-test/r/mysqltest.result | 2 +- mysql-test/t/mysqltest.test | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/mysqltest.result b/mysql-test/r/mysqltest.result index 300ca69f2b4..7fa23648c0a 100644 --- a/mysql-test/r/mysqltest.result +++ b/mysql-test/r/mysqltest.result @@ -473,7 +473,7 @@ insert into t1 values (1); select 'select-me'; insertz 'error query'' failed: 1064: 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 'insertz 'error query'' at line 1 -More results from queries before failure can be found in MYSQLTEST_VARDIR/tmp/bug11731.log +More results from queries before failure can be found in MYSQLTEST_VARDIR/log/bug11731.log drop table t1; Multi statement using expected error create table t1 (a int primary key); diff --git a/mysql-test/t/mysqltest.test b/mysql-test/t/mysqltest.test index 9c29840ba9b..88de9c5fa18 100644 --- a/mysql-test/t/mysqltest.test +++ b/mysql-test/t/mysqltest.test @@ -1478,7 +1478,7 @@ drop table t1; --exec test -s $MYSQLTEST_VARDIR/tmp/bug11731.out drop table t1; remove_file $MYSQLTEST_VARDIR/tmp/bug11731.out; -remove_file $MYSQLTEST_VARDIR/tmp/bug11731.log; +remove_file $MYSQLTEST_VARDIR/log/bug11731.log; remove_file $MYSQLTEST_VARDIR/tmp/bug11731.sql; # From b77248f6c5d45bd4fe4505b82a20d491bd83e2da Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 3 Aug 2007 21:10:57 -0700 Subject: [PATCH 022/194] Fixed a memory leak in the patch for bug 28404. --- sql/sql_select.cc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 6d5577c2713..3de5b3b76ac 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -12911,8 +12911,11 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit, { tab->ref.key= -1; tab->ref.key_parts= 0; - if (tab->select) - tab->select->quick= 0; + if (select && select->quick) + { + delete select->quick; + select->quick= 0; + } if (select_limit < table_records) tab->limit= select_limit; } From ac2217cb67ede63cedf1d91b8dfd0e2174a895f8 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 4 Aug 2007 03:12:43 -0700 Subject: [PATCH 023/194] Post-merge fix. --- mysql-test/r/innodb_mysql.result | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysql-test/r/innodb_mysql.result b/mysql-test/r/innodb_mysql.result index bf12c31326a..c66082cae44 100644 --- a/mysql-test/r/innodb_mysql.result +++ b/mysql-test/r/innodb_mysql.result @@ -857,7 +857,7 @@ key PRIMARY key_len 4 ref NULL rows 32 -Extra Using where; Using index +Extra Using where SELECT * FROM t1 WHERE b BETWEEN 1 AND 2 ORDER BY a; a b 1 2 From 81d07e8cecdbf1caaf4dd88fb3841aa7ad33afb3 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 4 Aug 2007 13:41:01 -0700 Subject: [PATCH 024/194] Made sure that the test case for bug 28404 use the correct statistics. --- mysql-test/r/order_by.result | 14 +++++++++----- mysql-test/t/order_by.test | 9 ++++++--- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/mysql-test/r/order_by.result b/mysql-test/r/order_by.result index fd3fb89b5f4..79a9bf15cbf 100644 --- a/mysql-test/r/order_by.result +++ b/mysql-test/r/order_by.result @@ -1090,21 +1090,25 @@ INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1; INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1; INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1; INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1; +UPDATE t1 SET c2=20 WHERE id%100 = 0; SELECT COUNT(*) FROM t1; COUNT(*) 40960 +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK EXPLAIN SELECT id,c3 FROM t1 WHERE c2=11 ORDER BY c3 LIMIT 20; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 index k2 k3 5 NULL 88 Using where -EXPLAIN SELECT id,c3 FROM t1 WHERE c2=11 ORDER BY c3 LIMIT 100; +EXPLAIN SELECT id,c3 FROM t1 WHERE c2=11 ORDER BY c3 LIMIT 4000; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ref k2 k2 5 const 9300 Using where; Using filesort -EXPLAIN SELECT id,c3 FROM t1 WHERE c2 BETWEEN 10 AND 12 ORDER BY c3 LIMIT 100; +EXPLAIN SELECT id,c3 FROM t1 WHERE c2 BETWEEN 10 AND 12 ORDER BY c3 LIMIT 20; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 index k2 k3 5 NULL 316 Using where -EXPLAIN SELECT id,c3 FROM t1 WHERE c2 BETWEEN 10 AND 12 ORDER BY c3 LIMIT 2000; +1 SIMPLE t1 index k2 k3 5 NULL 63 Using where +EXPLAIN SELECT id,c3 FROM t1 WHERE c2 BETWEEN 20 AND 30 ORDER BY c3 LIMIT 4000; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 range k2 k2 5 NULL 12937 Using where; Using filesort +1 SIMPLE t1 range k2 k2 5 NULL 349 Using where; Using filesort SELECT id,c3 FROM t1 WHERE c2=11 ORDER BY c3 LIMIT 20; id c3 6 14 diff --git a/mysql-test/t/order_by.test b/mysql-test/t/order_by.test index fb08dbe74e6..c4331d38e14 100644 --- a/mysql-test/t/order_by.test +++ b/mysql-test/t/order_by.test @@ -765,13 +765,16 @@ INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1; INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1; INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1; INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1; +UPDATE t1 SET c2=20 WHERE id%100 = 0; SELECT COUNT(*) FROM t1; +ANALYZE TABLE t1; + EXPLAIN SELECT id,c3 FROM t1 WHERE c2=11 ORDER BY c3 LIMIT 20; -EXPLAIN SELECT id,c3 FROM t1 WHERE c2=11 ORDER BY c3 LIMIT 100; -EXPLAIN SELECT id,c3 FROM t1 WHERE c2 BETWEEN 10 AND 12 ORDER BY c3 LIMIT 100; -EXPLAIN SELECT id,c3 FROM t1 WHERE c2 BETWEEN 10 AND 12 ORDER BY c3 LIMIT 2000; +EXPLAIN SELECT id,c3 FROM t1 WHERE c2=11 ORDER BY c3 LIMIT 4000; +EXPLAIN SELECT id,c3 FROM t1 WHERE c2 BETWEEN 10 AND 12 ORDER BY c3 LIMIT 20; +EXPLAIN SELECT id,c3 FROM t1 WHERE c2 BETWEEN 20 AND 30 ORDER BY c3 LIMIT 4000; SELECT id,c3 FROM t1 WHERE c2=11 ORDER BY c3 LIMIT 20; From 4c33942f5a57bb0bf1fc52ebd1c559088de14655 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 4 Aug 2007 17:15:33 -0700 Subject: [PATCH 025/194] Made the test case for bug 28404 platform independent. --- mysql-test/r/order_by.result | 25 ++++++++++++------------- mysql-test/t/order_by.test | 16 ++++++++-------- 2 files changed, 20 insertions(+), 21 deletions(-) diff --git a/mysql-test/r/order_by.result b/mysql-test/r/order_by.result index 79a9bf15cbf..ff4882d6cd8 100644 --- a/mysql-test/r/order_by.result +++ b/mysql-test/r/order_by.result @@ -1094,22 +1094,21 @@ UPDATE t1 SET c2=20 WHERE id%100 = 0; SELECT COUNT(*) FROM t1; COUNT(*) 40960 -ANALYZE TABLE t1; -Table Op Msg_type Msg_text -test.t1 analyze status OK -EXPLAIN SELECT id,c3 FROM t1 WHERE c2=11 ORDER BY c3 LIMIT 20; +CREATE TABLE t2 LIKE t1; +INSERT INTO t2 SELECT * FROM t1 ORDER BY id; +EXPLAIN SELECT id,c3 FROM t2 WHERE c2=11 ORDER BY c3 LIMIT 20; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 index k2 k3 5 NULL 88 Using where -EXPLAIN SELECT id,c3 FROM t1 WHERE c2=11 ORDER BY c3 LIMIT 4000; +1 SIMPLE t2 index k2 k3 5 NULL 111 Using where +EXPLAIN SELECT id,c3 FROM t2 WHERE c2=11 ORDER BY c3 LIMIT 4000; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 ref k2 k2 5 const 9300 Using where; Using filesort -EXPLAIN SELECT id,c3 FROM t1 WHERE c2 BETWEEN 10 AND 12 ORDER BY c3 LIMIT 20; +1 SIMPLE t2 ref k2 k2 5 const 7341 Using where; Using filesort +EXPLAIN SELECT id,c3 FROM t2 WHERE c2 BETWEEN 10 AND 12 ORDER BY c3 LIMIT 20; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 index k2 k3 5 NULL 63 Using where -EXPLAIN SELECT id,c3 FROM t1 WHERE c2 BETWEEN 20 AND 30 ORDER BY c3 LIMIT 4000; +1 SIMPLE t2 index k2 k3 5 NULL 73 Using where +EXPLAIN SELECT id,c3 FROM t2 WHERE c2 BETWEEN 20 AND 30 ORDER BY c3 LIMIT 4000; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 range k2 k2 5 NULL 349 Using where; Using filesort -SELECT id,c3 FROM t1 WHERE c2=11 ORDER BY c3 LIMIT 20; +1 SIMPLE t2 range k2 k2 5 NULL 386 Using where; Using filesort +SELECT id,c3 FROM t2 WHERE c2=11 ORDER BY c3 LIMIT 20; id c3 6 14 16 14 @@ -1131,4 +1130,4 @@ id c3 176 14 186 14 196 14 -DROP TABLE t1; +DROP TABLE t1,t2; diff --git a/mysql-test/t/order_by.test b/mysql-test/t/order_by.test index c4331d38e14..37398616299 100644 --- a/mysql-test/t/order_by.test +++ b/mysql-test/t/order_by.test @@ -766,16 +766,16 @@ INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1; INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1; INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1; UPDATE t1 SET c2=20 WHERE id%100 = 0; - SELECT COUNT(*) FROM t1; -ANALYZE TABLE t1; +CREATE TABLE t2 LIKE t1; +INSERT INTO t2 SELECT * FROM t1 ORDER BY id; -EXPLAIN SELECT id,c3 FROM t1 WHERE c2=11 ORDER BY c3 LIMIT 20; -EXPLAIN SELECT id,c3 FROM t1 WHERE c2=11 ORDER BY c3 LIMIT 4000; -EXPLAIN SELECT id,c3 FROM t1 WHERE c2 BETWEEN 10 AND 12 ORDER BY c3 LIMIT 20; -EXPLAIN SELECT id,c3 FROM t1 WHERE c2 BETWEEN 20 AND 30 ORDER BY c3 LIMIT 4000; +EXPLAIN SELECT id,c3 FROM t2 WHERE c2=11 ORDER BY c3 LIMIT 20; +EXPLAIN SELECT id,c3 FROM t2 WHERE c2=11 ORDER BY c3 LIMIT 4000; +EXPLAIN SELECT id,c3 FROM t2 WHERE c2 BETWEEN 10 AND 12 ORDER BY c3 LIMIT 20; +EXPLAIN SELECT id,c3 FROM t2 WHERE c2 BETWEEN 20 AND 30 ORDER BY c3 LIMIT 4000; -SELECT id,c3 FROM t1 WHERE c2=11 ORDER BY c3 LIMIT 20; +SELECT id,c3 FROM t2 WHERE c2=11 ORDER BY c3 LIMIT 20; -DROP TABLE t1; +DROP TABLE t1,t2; From 35249143023c2a59631a1b26759a56826852c149 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 4 Aug 2007 20:31:48 -0700 Subject: [PATCH 026/194] Removed warnings after fix for bug 28404. --- sql/sql_select.cc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 3de5b3b76ac..979a35e8cd1 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -12596,7 +12596,7 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit, TABLE *table=tab->table; SQL_SELECT *select=tab->select; key_map usable_keys; - QUICK_SELECT_I *save_quick; + QUICK_SELECT_I *save_quick= 0; DBUG_ENTER("test_if_skip_sort_order"); LINT_INIT(ref_key_parts); @@ -12734,7 +12734,10 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit, JOIN *join= tab->join; uint tablenr= tab - join->join_tab; ha_rows table_records= table->file->stats.records; - bool group= join->group && order == join->group_list; + bool group= join->group && order == join->group_list; + LINT_INIT(best_key_parts); + LINT_INIT(best_key_direction); + LINT_INIT(best_records); /* filesort() and join cache are usually faster than reading in From 5807eb18b8f34bd68f081c1f4295713e4124e5d9 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 5 Aug 2007 14:02:33 +0300 Subject: [PATCH 027/194] rpl_row_tabledefs_2myisam.result: merged 5.1-main to 5.1-opt : error numbers changed. Many files: merged 5.1-main to 5.1-opt : error numbers changed rpl_extraCol_innodb.result: merged 5.1-main to 5.1-opt : error numbers changed mysql-test/suite/rpl/r/rpl_extraCol_innodb.result: merged 5.1-main to 5.1-opt : error numbers changed mysql-test/suite/rpl/r/rpl_extraCol_myisam.result: merged 5.1-main to 5.1-opt : error numbers changed mysql-test/suite/rpl/r/rpl_incident.result: merged 5.1-main to 5.1-opt : error numbers changed mysql-test/suite/rpl/r/rpl_loaddata_fatal.result: merged 5.1-main to 5.1-opt : error numbers changed mysql-test/suite/rpl/r/rpl_row_tabledefs_2myisam.result: merged 5.1-main to 5.1-opt : error numbers changed. mysql-test/suite/rpl/r/rpl_row_tabledefs_3innodb.result: merged 5.1-main to 5.1-opt : error numbers changed mysql-test/suite/rpl_ndb/r/rpl_ndb_extraCol.result: merged 5.1-main to 5.1-opt : error numbers changed --- .../suite/rpl/r/rpl_extraCol_innodb.result | 28 +++++++++---------- .../suite/rpl/r/rpl_extraCol_myisam.result | 28 +++++++++---------- mysql-test/suite/rpl/r/rpl_incident.result | 4 +-- .../suite/rpl/r/rpl_loaddata_fatal.result | 4 +-- .../rpl/r/rpl_row_tabledefs_2myisam.result | 12 ++++---- .../rpl/r/rpl_row_tabledefs_3innodb.result | 12 ++++---- .../suite/rpl_ndb/r/rpl_ndb_extraCol.result | 28 +++++++++---------- 7 files changed, 58 insertions(+), 58 deletions(-) diff --git a/mysql-test/suite/rpl/r/rpl_extraCol_innodb.result b/mysql-test/suite/rpl/r/rpl_extraCol_innodb.result index c3159987b30..b14c8c2a725 100644 --- a/mysql-test/suite/rpl/r/rpl_extraCol_innodb.result +++ b/mysql-test/suite/rpl/r/rpl_extraCol_innodb.result @@ -72,7 +72,7 @@ Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table -Last_Errno 1532 +Last_Errno 1533 Last_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 252, test.t3 has type 3 Skip_Counter 0 Exec_Master_Log_Pos # @@ -90,7 +90,7 @@ Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No Last_IO_Errno 0 Last_IO_Error -Last_SQL_Errno 1532 +Last_SQL_Errno 1533 Last_SQL_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 252, test.t3 has type 3 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; START SLAVE; @@ -134,7 +134,7 @@ Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table -Last_Errno 1532 +Last_Errno 1533 Last_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 246, test.t4 has type 3 Skip_Counter 0 Exec_Master_Log_Pos # @@ -152,7 +152,7 @@ Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No Last_IO_Errno 0 Last_IO_Error -Last_SQL_Errno 1532 +Last_SQL_Errno 1533 Last_SQL_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 246, test.t4 has type 3 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; START SLAVE; @@ -196,7 +196,7 @@ Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table -Last_Errno 1532 +Last_Errno 1533 Last_Error Table definition on master and slave does not match: Column 5 type mismatch - received type 4, test.t5 has type 246 Skip_Counter 0 Exec_Master_Log_Pos # @@ -214,7 +214,7 @@ Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No Last_IO_Errno 0 Last_IO_Error -Last_SQL_Errno 1532 +Last_SQL_Errno 1533 Last_SQL_Error Table definition on master and slave does not match: Column 5 type mismatch - received type 4, test.t5 has type 246 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; START SLAVE; @@ -257,7 +257,7 @@ Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table -Last_Errno 1532 +Last_Errno 1533 Last_Error Table definition on master and slave does not match: Column 3 type mismatch - received type 16, test.t6 has type 3 Skip_Counter 0 Exec_Master_Log_Pos # @@ -275,7 +275,7 @@ Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No Last_IO_Errno 0 Last_IO_Error -Last_SQL_Errno 1532 +Last_SQL_Errno 1533 Last_SQL_Error Table definition on master and slave does not match: Column 3 type mismatch - received type 16, test.t6 has type 3 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=3; *** Drop t6 *** @@ -369,7 +369,7 @@ Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table -Last_Errno 1532 +Last_Errno 1533 Last_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 254, test.t10 has type 5 Skip_Counter 0 Exec_Master_Log_Pos # @@ -387,7 +387,7 @@ Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No Last_IO_Errno 0 Last_IO_Error -Last_SQL_Errno 1532 +Last_SQL_Errno 1533 Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 254, test.t10 has type 5 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; START SLAVE; @@ -430,7 +430,7 @@ Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table -Last_Errno 1532 +Last_Errno 1533 Last_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 15, test.t11 has type 252 Skip_Counter 0 Exec_Master_Log_Pos # @@ -448,7 +448,7 @@ Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No Last_IO_Errno 0 Last_IO_Error -Last_SQL_Errno 1532 +Last_SQL_Errno 1533 Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 15, test.t11 has type 252 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; START SLAVE; @@ -755,7 +755,7 @@ Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table -Last_Errno 1532 +Last_Errno 1533 Last_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 8, test.t17 has type 2 Skip_Counter 0 Exec_Master_Log_Pos # @@ -773,7 +773,7 @@ Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No Last_IO_Errno 0 Last_IO_Error -Last_SQL_Errno 1532 +Last_SQL_Errno 1533 Last_SQL_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 8, test.t17 has type 2 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; START SLAVE; diff --git a/mysql-test/suite/rpl/r/rpl_extraCol_myisam.result b/mysql-test/suite/rpl/r/rpl_extraCol_myisam.result index 9d6c3ed5d33..c13bd79c621 100644 --- a/mysql-test/suite/rpl/r/rpl_extraCol_myisam.result +++ b/mysql-test/suite/rpl/r/rpl_extraCol_myisam.result @@ -72,7 +72,7 @@ Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table -Last_Errno 1532 +Last_Errno 1533 Last_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 252, test.t3 has type 3 Skip_Counter 0 Exec_Master_Log_Pos # @@ -90,7 +90,7 @@ Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No Last_IO_Errno 0 Last_IO_Error -Last_SQL_Errno 1532 +Last_SQL_Errno 1533 Last_SQL_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 252, test.t3 has type 3 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; START SLAVE; @@ -134,7 +134,7 @@ Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table -Last_Errno 1532 +Last_Errno 1533 Last_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 246, test.t4 has type 3 Skip_Counter 0 Exec_Master_Log_Pos # @@ -152,7 +152,7 @@ Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No Last_IO_Errno 0 Last_IO_Error -Last_SQL_Errno 1532 +Last_SQL_Errno 1533 Last_SQL_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 246, test.t4 has type 3 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; START SLAVE; @@ -196,7 +196,7 @@ Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table -Last_Errno 1532 +Last_Errno 1533 Last_Error Table definition on master and slave does not match: Column 5 type mismatch - received type 4, test.t5 has type 246 Skip_Counter 0 Exec_Master_Log_Pos # @@ -214,7 +214,7 @@ Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No Last_IO_Errno 0 Last_IO_Error -Last_SQL_Errno 1532 +Last_SQL_Errno 1533 Last_SQL_Error Table definition on master and slave does not match: Column 5 type mismatch - received type 4, test.t5 has type 246 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; START SLAVE; @@ -257,7 +257,7 @@ Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table -Last_Errno 1532 +Last_Errno 1533 Last_Error Table definition on master and slave does not match: Column 3 type mismatch - received type 16, test.t6 has type 3 Skip_Counter 0 Exec_Master_Log_Pos # @@ -275,7 +275,7 @@ Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No Last_IO_Errno 0 Last_IO_Error -Last_SQL_Errno 1532 +Last_SQL_Errno 1533 Last_SQL_Error Table definition on master and slave does not match: Column 3 type mismatch - received type 16, test.t6 has type 3 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=3; *** Drop t6 *** @@ -369,7 +369,7 @@ Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table -Last_Errno 1532 +Last_Errno 1533 Last_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 254, test.t10 has type 5 Skip_Counter 0 Exec_Master_Log_Pos # @@ -387,7 +387,7 @@ Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No Last_IO_Errno 0 Last_IO_Error -Last_SQL_Errno 1532 +Last_SQL_Errno 1533 Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 254, test.t10 has type 5 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; START SLAVE; @@ -430,7 +430,7 @@ Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table -Last_Errno 1532 +Last_Errno 1533 Last_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 15, test.t11 has type 252 Skip_Counter 0 Exec_Master_Log_Pos # @@ -448,7 +448,7 @@ Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No Last_IO_Errno 0 Last_IO_Error -Last_SQL_Errno 1532 +Last_SQL_Errno 1533 Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 15, test.t11 has type 252 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; START SLAVE; @@ -755,7 +755,7 @@ Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table -Last_Errno 1532 +Last_Errno 1533 Last_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 8, test.t17 has type 2 Skip_Counter 0 Exec_Master_Log_Pos # @@ -773,7 +773,7 @@ Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No Last_IO_Errno 0 Last_IO_Error -Last_SQL_Errno 1532 +Last_SQL_Errno 1533 Last_SQL_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 8, test.t17 has type 2 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; START SLAVE; diff --git a/mysql-test/suite/rpl/r/rpl_incident.result b/mysql-test/suite/rpl/r/rpl_incident.result index 84fd9c0ee4f..c3cec758d89 100644 --- a/mysql-test/suite/rpl/r/rpl_incident.result +++ b/mysql-test/suite/rpl/r/rpl_incident.result @@ -44,7 +44,7 @@ Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table -Last_Errno 1587 +Last_Errno 1588 Last_Error The incident LOST_EVENTS occured on the master. Message: Skip_Counter 0 Exec_Master_Log_Pos # @@ -62,7 +62,7 @@ Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No Last_IO_Errno 0 Last_IO_Error -Last_SQL_Errno 1587 +Last_SQL_Errno 1588 Last_SQL_Error The incident LOST_EVENTS occured on the master. Message: SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE; diff --git a/mysql-test/suite/rpl/r/rpl_loaddata_fatal.result b/mysql-test/suite/rpl/r/rpl_loaddata_fatal.result index 6c73c275ff0..0216ef65570 100644 --- a/mysql-test/suite/rpl/r/rpl_loaddata_fatal.result +++ b/mysql-test/suite/rpl/r/rpl_loaddata_fatal.result @@ -65,7 +65,7 @@ Replicate_Do_Table Replicate_Ignore_Table # Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table -Last_Errno 1590 +Last_Errno 1591 Last_Error Fatal error: Not enough memory Skip_Counter 0 Exec_Master_Log_Pos 325 @@ -83,7 +83,7 @@ Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No Last_IO_Errno # Last_IO_Error # -Last_SQL_Errno 1590 +Last_SQL_Errno 1591 Last_SQL_Error Fatal error: Not enough memory SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE; diff --git a/mysql-test/suite/rpl/r/rpl_row_tabledefs_2myisam.result b/mysql-test/suite/rpl/r/rpl_row_tabledefs_2myisam.result index 816fba54bd8..07ac657584c 100644 --- a/mysql-test/suite/rpl/r/rpl_row_tabledefs_2myisam.result +++ b/mysql-test/suite/rpl/r/rpl_row_tabledefs_2myisam.result @@ -214,7 +214,7 @@ Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table -Last_Errno 1532 +Last_Errno 1533 Last_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 3, test.t4 has type 4 Skip_Counter 0 Exec_Master_Log_Pos # @@ -232,7 +232,7 @@ Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No Last_IO_Errno 0 Last_IO_Error -Last_SQL_Errno 1532 +Last_SQL_Errno 1533 Last_SQL_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 3, test.t4 has type 4 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; START SLAVE; @@ -257,7 +257,7 @@ Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table -Last_Errno 1532 +Last_Errno 1533 Last_Error Table definition on master and slave does not match: Column 1 type mismatch - received type 3, test.t5 has type 4 Skip_Counter 0 Exec_Master_Log_Pos # @@ -275,7 +275,7 @@ Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No Last_IO_Errno 0 Last_IO_Error -Last_SQL_Errno 1532 +Last_SQL_Errno 1533 Last_SQL_Error Table definition on master and slave does not match: Column 1 type mismatch - received type 3, test.t5 has type 4 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; START SLAVE; @@ -300,7 +300,7 @@ Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table -Last_Errno 1532 +Last_Errno 1533 Last_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 3, test.t6 has type 4 Skip_Counter 0 Exec_Master_Log_Pos # @@ -318,7 +318,7 @@ Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No Last_IO_Errno 0 Last_IO_Error -Last_SQL_Errno 1532 +Last_SQL_Errno 1533 Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 3, test.t6 has type 4 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; START SLAVE; diff --git a/mysql-test/suite/rpl/r/rpl_row_tabledefs_3innodb.result b/mysql-test/suite/rpl/r/rpl_row_tabledefs_3innodb.result index 0c5d57c1d00..a17d495a116 100644 --- a/mysql-test/suite/rpl/r/rpl_row_tabledefs_3innodb.result +++ b/mysql-test/suite/rpl/r/rpl_row_tabledefs_3innodb.result @@ -214,7 +214,7 @@ Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table -Last_Errno 1532 +Last_Errno 1533 Last_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 3, test.t4 has type 4 Skip_Counter 0 Exec_Master_Log_Pos # @@ -232,7 +232,7 @@ Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No Last_IO_Errno 0 Last_IO_Error -Last_SQL_Errno 1532 +Last_SQL_Errno 1533 Last_SQL_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 3, test.t4 has type 4 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; START SLAVE; @@ -257,7 +257,7 @@ Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table -Last_Errno 1532 +Last_Errno 1533 Last_Error Table definition on master and slave does not match: Column 1 type mismatch - received type 3, test.t5 has type 4 Skip_Counter 0 Exec_Master_Log_Pos # @@ -275,7 +275,7 @@ Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No Last_IO_Errno 0 Last_IO_Error -Last_SQL_Errno 1532 +Last_SQL_Errno 1533 Last_SQL_Error Table definition on master and slave does not match: Column 1 type mismatch - received type 3, test.t5 has type 4 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; START SLAVE; @@ -300,7 +300,7 @@ Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table -Last_Errno 1532 +Last_Errno 1533 Last_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 3, test.t6 has type 4 Skip_Counter 0 Exec_Master_Log_Pos # @@ -318,7 +318,7 @@ Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No Last_IO_Errno 0 Last_IO_Error -Last_SQL_Errno 1532 +Last_SQL_Errno 1533 Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 3, test.t6 has type 4 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; START SLAVE; diff --git a/mysql-test/suite/rpl_ndb/r/rpl_ndb_extraCol.result b/mysql-test/suite/rpl_ndb/r/rpl_ndb_extraCol.result index edb4dfbf392..0d17720678d 100644 --- a/mysql-test/suite/rpl_ndb/r/rpl_ndb_extraCol.result +++ b/mysql-test/suite/rpl_ndb/r/rpl_ndb_extraCol.result @@ -72,7 +72,7 @@ Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table -Last_Errno 1532 +Last_Errno 1533 Last_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 252, test.t3 has type 3 Skip_Counter 0 Exec_Master_Log_Pos # @@ -90,7 +90,7 @@ Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No Last_IO_Errno 0 Last_IO_Error -Last_SQL_Errno 1532 +Last_SQL_Errno 1533 Last_SQL_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 252, test.t3 has type 3 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; START SLAVE; @@ -134,7 +134,7 @@ Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table -Last_Errno 1532 +Last_Errno 1533 Last_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 246, test.t4 has type 3 Skip_Counter 0 Exec_Master_Log_Pos # @@ -152,7 +152,7 @@ Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No Last_IO_Errno 0 Last_IO_Error -Last_SQL_Errno 1532 +Last_SQL_Errno 1533 Last_SQL_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 246, test.t4 has type 3 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; START SLAVE; @@ -196,7 +196,7 @@ Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table -Last_Errno 1532 +Last_Errno 1533 Last_Error Table definition on master and slave does not match: Column 5 type mismatch - received type 4, test.t5 has type 246 Skip_Counter 0 Exec_Master_Log_Pos # @@ -214,7 +214,7 @@ Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No Last_IO_Errno 0 Last_IO_Error -Last_SQL_Errno 1532 +Last_SQL_Errno 1533 Last_SQL_Error Table definition on master and slave does not match: Column 5 type mismatch - received type 4, test.t5 has type 246 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; START SLAVE; @@ -257,7 +257,7 @@ Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table -Last_Errno 1532 +Last_Errno 1533 Last_Error Table definition on master and slave does not match: Column 3 type mismatch - received type 16, test.t6 has type 3 Skip_Counter 0 Exec_Master_Log_Pos # @@ -275,7 +275,7 @@ Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No Last_IO_Errno 0 Last_IO_Error -Last_SQL_Errno 1532 +Last_SQL_Errno 1533 Last_SQL_Error Table definition on master and slave does not match: Column 3 type mismatch - received type 16, test.t6 has type 3 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=3; *** Drop t6 *** @@ -369,7 +369,7 @@ Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table -Last_Errno 1532 +Last_Errno 1533 Last_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 254, test.t10 has type 5 Skip_Counter 0 Exec_Master_Log_Pos # @@ -387,7 +387,7 @@ Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No Last_IO_Errno 0 Last_IO_Error -Last_SQL_Errno 1532 +Last_SQL_Errno 1533 Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 254, test.t10 has type 5 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; START SLAVE; @@ -430,7 +430,7 @@ Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table -Last_Errno 1532 +Last_Errno 1533 Last_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 15, test.t11 has type 252 Skip_Counter 0 Exec_Master_Log_Pos # @@ -448,7 +448,7 @@ Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No Last_IO_Errno 0 Last_IO_Error -Last_SQL_Errno 1532 +Last_SQL_Errno 1533 Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 15, test.t11 has type 252 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; START SLAVE; @@ -756,7 +756,7 @@ Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table -Last_Errno 1532 +Last_Errno 1533 Last_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 8, test.t17 has type 2 Skip_Counter 0 Exec_Master_Log_Pos # @@ -774,7 +774,7 @@ Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No Last_IO_Errno 0 Last_IO_Error -Last_SQL_Errno 1532 +Last_SQL_Errno 1533 Last_SQL_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 8, test.t17 has type 2 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; START SLAVE; From 4e6e122061b71f9378a161793367ae5120310ed4 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 5 Aug 2007 14:16:49 -0700 Subject: [PATCH 028/194] Fix bug #30219. This bug manifested itself for queries with grouping by columns of the BIT type. It led to wrong comparisons of bit-field values and wrong result sets. Bit-field values never cannot be compared as binary values. Yet the class Field_bit had an implementation of the cmp method that compared bit-fields values as binary values. Also the get_image and set_image methods of the base class Field cannot be used for objects of the Field_bit class. Now these methods are declared as virtual and specific implementations of the methods are provided for the class Field_bit. mysql-test/r/type_bit.result: Added a test case for bug #30219. mysql-test/t/type_bit.test: Added a test case for bug #30219. sql/field.h: Fix bug #30219. This bug manifested itself for queries with grouping by columns of the BIT type. It led to wrong comparisons of bit-field values and wrong result sets. Bit-field values never cannot be compared as binary values. Yet the class Field_bit had an implementation of the cmp method that compared bit-fields values as binary values. Also the get_image and set_image methods of the base class Field cannot be used for objects of the Field_bit class. Now these methods are declared as virtual and specific implementations of these methods are provided for the class Field_bit. --- mysql-test/r/type_bit.result | 32 ++++++++++++++++++++++++++++++++ mysql-test/t/type_bit.test | 24 ++++++++++++++++++++++++ sql/field.h | 13 ++++++++++--- 3 files changed, 66 insertions(+), 3 deletions(-) diff --git a/mysql-test/r/type_bit.result b/mysql-test/r/type_bit.result index fad0e1f7974..324dcc2775b 100644 --- a/mysql-test/r/type_bit.result +++ b/mysql-test/r/type_bit.result @@ -618,4 +618,36 @@ bit_field int_field  2 handler t1 close; drop table t1; +CREATE TABLE t1 (b BIT(2)); +INSERT INTO t1 (b) VALUES (1), (3), (0), (3); +SELECT b+0, COUNT(DISTINCT b) FROM t1 GROUP BY b; +b+0 COUNT(DISTINCT b) +0 1 +1 1 +3 1 +DROP TABLE t1; +CREATE TABLE t1 (b BIT(2), a VARCHAR(5)); +INSERT INTO t1 (b, a) VALUES (1, "x"), (3, "zz"), (0, "y"), (3, "z"); +SELECT b+0, COUNT(DISTINCT a) FROM t1 GROUP BY b; +b+0 COUNT(DISTINCT a) +0 1 +1 1 +3 2 +DROP TABLE t1; +CREATE TABLE t1 (a CHAR(5), b BIT(2)); +INSERT INTO t1 (b, a) VALUES (1, "x"), (3, "zz"), (0, "y"), (3, "z"); +SELECT b+0, COUNT(DISTINCT a) FROM t1 GROUP BY b; +b+0 COUNT(DISTINCT a) +0 1 +1 1 +3 2 +DROP TABLE t1; +CREATE TABLE t1 (a INT, b BIT(2)); +INSERT INTO t1 (b, a) VALUES (1, 1), (3, 2), (0, 3), (3, 4); +SELECT b+0, COUNT(DISTINCT a) FROM t1 GROUP BY b; +b+0 COUNT(DISTINCT a) +0 1 +1 1 +3 2 +DROP TABLE t1; End of 5.0 tests diff --git a/mysql-test/t/type_bit.test b/mysql-test/t/type_bit.test index 48ad24ff6b7..2c7f87f342d 100644 --- a/mysql-test/t/type_bit.test +++ b/mysql-test/t/type_bit.test @@ -272,4 +272,28 @@ handler t1 read a=(1); handler t1 close; drop table t1; +# +# Bug #30219: GROUP BY a column of the BIT type +# + +CREATE TABLE t1 (b BIT(2)); +INSERT INTO t1 (b) VALUES (1), (3), (0), (3); +SELECT b+0, COUNT(DISTINCT b) FROM t1 GROUP BY b; +DROP TABLE t1; + +CREATE TABLE t1 (b BIT(2), a VARCHAR(5)); +INSERT INTO t1 (b, a) VALUES (1, "x"), (3, "zz"), (0, "y"), (3, "z"); +SELECT b+0, COUNT(DISTINCT a) FROM t1 GROUP BY b; +DROP TABLE t1; + +CREATE TABLE t1 (a CHAR(5), b BIT(2)); +INSERT INTO t1 (b, a) VALUES (1, "x"), (3, "zz"), (0, "y"), (3, "z"); +SELECT b+0, COUNT(DISTINCT a) FROM t1 GROUP BY b; +DROP TABLE t1; + +CREATE TABLE t1 (a INT, b BIT(2)); +INSERT INTO t1 (b, a) VALUES (1, 1), (3, 2), (0, 3), (3, 4); +SELECT b+0, COUNT(DISTINCT a) FROM t1 GROUP BY b; +DROP TABLE t1; + --echo End of 5.0 tests diff --git a/sql/field.h b/sql/field.h index fbf402ab5c3..92705b9aac4 100644 --- a/sql/field.h +++ b/sql/field.h @@ -231,9 +231,9 @@ public: if (null_ptr) null_ptr=ADD_TO_PTR(null_ptr,ptr_diff,uchar*); } - inline void get_image(char *buff,uint length, CHARSET_INFO *cs) + virtual void get_image(char *buff, uint length, CHARSET_INFO *cs) { memcpy(buff,ptr,length); } - inline void set_image(char *buff,uint length, CHARSET_INFO *cs) + virtual void set_image(char *buff,uint length, CHARSET_INFO *cs) { memcpy(ptr,buff,length); } @@ -1430,13 +1430,20 @@ public: String *val_str(String*, String *); my_decimal *val_decimal(my_decimal *); int cmp(const char *a, const char *b) - { return cmp_binary(a, b); } + { + DBUG_ASSERT(ptr == a); + return Field_bit::key_cmp(b, bytes_in_rec+test(bit_len)); + } int key_cmp(const byte *a, const byte *b) { return cmp_binary((char *) a, (char *) b); } int key_cmp(const byte *str, uint length); int cmp_offset(uint row_offset); int cmp_binary_offset(uint row_offset) { return cmp_offset(row_offset); } + void get_image(char *buff, uint length, CHARSET_INFO *cs) + { get_key_image(buff, length, itRAW); } + void set_image(char *buff,uint length, CHARSET_INFO *cs) + { Field_bit::store(buff, length, cs); } uint get_key_image(char *buff, uint length, imagetype type); void set_key_image(char *buff, uint length) { Field_bit::store(buff, length, &my_charset_bin); } From 29e8718970ceaf735abbf5f534b25fca97c11d85 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 5 Aug 2007 17:12:57 -0700 Subject: [PATCH 029/194] Fixed compiler error for Windows in the patch for bug 30219. --- sql/field.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/field.h b/sql/field.h index 92705b9aac4..4fcdb50f8c7 100644 --- a/sql/field.h +++ b/sql/field.h @@ -1432,7 +1432,7 @@ public: int cmp(const char *a, const char *b) { DBUG_ASSERT(ptr == a); - return Field_bit::key_cmp(b, bytes_in_rec+test(bit_len)); + return Field_bit::key_cmp((const byte *) b, bytes_in_rec+test(bit_len)); } int key_cmp(const byte *a, const byte *b) { return cmp_binary((char *) a, (char *) b); } From 8ab9412a3203cd746f126d4a559d1d172d720516 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 5 Aug 2007 21:08:08 -0400 Subject: [PATCH 030/194] Merge dkatz@bk-internal.mysql.com:/home/bk/mysql-5.1-maint into damien-katzs-computer.local:/Users/dkatz/mysql51 BitKeeper/deleted/.del-.del-README.txt: Delete: BitKeeper/deleted/.del-README.txt From ccb32a59465eb502d6e292e5f074dcade1ec7fa8 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 5 Aug 2007 21:37:55 -0400 Subject: [PATCH 031/194] Bug #29804 UDF parameters don't contain correct string length Previously, UDF *_init functions were passed constant strings with erroneous lengths. The length came from the containing variable's size, not the length of the value itself. Now the *_init functions get the constant as a null terminated string with the correct length supplied. mysql-test/r/udf.result: Test case to check constants passed UDFs. mysql-test/t/udf.test: Test case to check constants passed UDFs. sql/item_func.cc: UDF _init functions are now passed the length of the constants, rather than the max length of the var containing the constant. sql/udf_example.c: Added check_const_len functions. The check_const_len_init functions checks that the lengths of constants are correctly passed. --- mysql-test/r/udf.result | 24 ++++++++++++++++++++++++ mysql-test/t/udf.test | 36 ++++++++++++++++++++++++++++++++++++ sql/item_func.cc | 3 ++- sql/udf_example.c | 35 +++++++++++++++++++++++++++++++++++ 4 files changed, 97 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/udf.result b/mysql-test/r/udf.result index bba722e523c..f1e47905f5d 100644 --- a/mysql-test/r/udf.result +++ b/mysql-test/r/udf.result @@ -334,4 +334,28 @@ Qcache_queries_in_cache 0 drop table t1; drop function metaphon; set GLOBAL query_cache_size=default; +CREATE TABLE const_len_bug ( +str_const varchar(4000), +result1 varchar(4000), +result2 varchar(4000) +); +CREATE TRIGGER check_const_len_trigger BEFORE INSERT ON const_len_bug FOR EACH ROW BEGIN +set NEW.str_const = 'bar'; +set NEW.result2 = check_const_len(NEW.str_const); +END | +CREATE PROCEDURE check_const_len_sp (IN str_const VARCHAR(4000)) +BEGIN +DECLARE result VARCHAR(4000); +SET result = check_const_len(str_const); +insert into const_len_bug values(str_const, result, ""); +END | +CREATE FUNCTION check_const_len RETURNS string SONAME "UDF_EXAMPLE_LIB"; +CALL check_const_len_sp("foo"); +SELECT * from const_len_bug; +str_const result1 result2 +bar Correct length Correct length +DROP FUNCTION check_const_len; +DROP PROCEDURE check_const_len_sp; +DROP TRIGGER check_const_len_trigger; +DROP TABLE const_len_bug; End of 5.0 tests. diff --git a/mysql-test/t/udf.test b/mysql-test/t/udf.test index 07a4a2d870b..2f1d197cb9e 100644 --- a/mysql-test/t/udf.test +++ b/mysql-test/t/udf.test @@ -364,4 +364,40 @@ drop function metaphon; set GLOBAL query_cache_size=default; +# +# Bug #29804 UDF parameters don't contain correct string length +# + +CREATE TABLE const_len_bug ( + str_const varchar(4000), + result1 varchar(4000), + result2 varchar(4000) +); + +DELIMITER |; +CREATE TRIGGER check_const_len_trigger BEFORE INSERT ON const_len_bug FOR EACH ROW BEGIN + set NEW.str_const = 'bar'; + set NEW.result2 = check_const_len(NEW.str_const); +END | + +CREATE PROCEDURE check_const_len_sp (IN str_const VARCHAR(4000)) +BEGIN +DECLARE result VARCHAR(4000); +SET result = check_const_len(str_const); +insert into const_len_bug values(str_const, result, ""); +END | +DELIMITER ;| + +--replace_result $UDF_EXAMPLE_LIB UDF_EXAMPLE_LIB +eval CREATE FUNCTION check_const_len RETURNS string SONAME "$UDF_EXAMPLE_LIB"; + +CALL check_const_len_sp("foo"); + +SELECT * from const_len_bug; + +DROP FUNCTION check_const_len; +DROP PROCEDURE check_const_len_sp; +DROP TRIGGER check_const_len_trigger; +DROP TABLE const_len_bug; + --echo End of 5.0 tests. diff --git a/sql/item_func.cc b/sql/item_func.cc index 9a26169ad30..4492b7519aa 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -2916,7 +2916,8 @@ udf_handler::fix_fields(THD *thd, Item_result_field *func, String *res= arguments[i]->val_str(&buffers[i]); if (arguments[i]->null_value) continue; - f_args.args[i]= (char*) res->ptr(); + f_args.args[i]= (char*) res->c_ptr(); + f_args.lengths[i]= res->length(); break; } case INT_RESULT: diff --git a/sql/udf_example.c b/sql/udf_example.c index b603464568e..5165a577555 100644 --- a/sql/udf_example.c +++ b/sql/udf_example.c @@ -1106,4 +1106,39 @@ char * is_const(UDF_INIT *initid, UDF_ARGS *args __attribute__((unused)), } +my_bool check_const_len_init(UDF_INIT *initid, UDF_ARGS *args, char *message) +{ + if (args->arg_count != 1) + { + strmov(message, "IS_CONST accepts only one argument"); + return 1; + } + if (args->args[0] == 0) + { + initid->ptr= "Not constant"; + } + else if(strlen(args->args[0]) == args->lengths[0]) + { + initid->ptr= "Correct length"; + } + else + { + initid->ptr= "Wrong length"; + } + initid->max_length = 100; + return 0; +} + +char * check_const_len(UDF_INIT *initid, UDF_ARGS *args __attribute__((unused)), + char *result, unsigned long *length, + char *is_null, char *error __attribute__((unused))) +{ + strmov(result, initid->ptr); + *length= strlen(result); + *is_null= 0; + return result; +} + + + #endif /* HAVE_DLOPEN */ From 0c56799e324e2f1b60a742193b79503128d506f2 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 6 Aug 2007 00:53:32 -0700 Subject: [PATCH 032/194] Post-merge fixes. --- sql/field.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sql/field.h b/sql/field.h index 1861a5d6e6f..f19dfdd371a 100644 --- a/sql/field.h +++ b/sql/field.h @@ -1575,7 +1575,7 @@ public: int cmp(const uchar *a, const uchar *b) { DBUG_ASSERT(ptr == a); - return Field_bit::key_cmp((const byte *) b, bytes_in_rec+test(bit_len)); + return Field_bit::key_cmp(b, bytes_in_rec+test(bit_len)); } int cmp_binary_offset(uint row_offset) { return cmp_offset(row_offset); } @@ -1587,7 +1587,7 @@ public: void get_image(uchar *buff, uint length, CHARSET_INFO *cs) { get_key_image(buff, length, itRAW); } void set_image(const uchar *buff,uint length, CHARSET_INFO *cs) - { Field_bit::store(buff, length, cs); } + { Field_bit::store((char *) buff, length, cs); } uint get_key_image(uchar *buff, uint length, imagetype type); void set_key_image(const uchar *buff, uint length) { Field_bit::store((char*) buff, length, &my_charset_bin); } From 1d139a65654e5102edfaf1b19e3c74b850dc32ce Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 6 Aug 2007 01:01:22 -0700 Subject: [PATCH 033/194] Removed a query from the test case for bug 39219 that displayed in valgrind a problem for BIT type values different from the one reported for the bug. --- mysql-test/r/type_bit.result | 8 -------- mysql-test/t/type_bit.test | 5 ----- 2 files changed, 13 deletions(-) diff --git a/mysql-test/r/type_bit.result b/mysql-test/r/type_bit.result index 324dcc2775b..7c765d6d50b 100644 --- a/mysql-test/r/type_bit.result +++ b/mysql-test/r/type_bit.result @@ -618,14 +618,6 @@ bit_field int_field  2 handler t1 close; drop table t1; -CREATE TABLE t1 (b BIT(2)); -INSERT INTO t1 (b) VALUES (1), (3), (0), (3); -SELECT b+0, COUNT(DISTINCT b) FROM t1 GROUP BY b; -b+0 COUNT(DISTINCT b) -0 1 -1 1 -3 1 -DROP TABLE t1; CREATE TABLE t1 (b BIT(2), a VARCHAR(5)); INSERT INTO t1 (b, a) VALUES (1, "x"), (3, "zz"), (0, "y"), (3, "z"); SELECT b+0, COUNT(DISTINCT a) FROM t1 GROUP BY b; diff --git a/mysql-test/t/type_bit.test b/mysql-test/t/type_bit.test index 2c7f87f342d..6423d017afb 100644 --- a/mysql-test/t/type_bit.test +++ b/mysql-test/t/type_bit.test @@ -276,11 +276,6 @@ drop table t1; # Bug #30219: GROUP BY a column of the BIT type # -CREATE TABLE t1 (b BIT(2)); -INSERT INTO t1 (b) VALUES (1), (3), (0), (3); -SELECT b+0, COUNT(DISTINCT b) FROM t1 GROUP BY b; -DROP TABLE t1; - CREATE TABLE t1 (b BIT(2), a VARCHAR(5)); INSERT INTO t1 (b, a) VALUES (1, "x"), (3, "zz"), (0, "y"), (3, "z"); SELECT b+0, COUNT(DISTINCT a) FROM t1 GROUP BY b; From 135b586378d50124815cfd71e097ad1782117ae0 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 6 Aug 2007 10:39:48 +0200 Subject: [PATCH 034/194] Fix spelling errors --- client/mysqltest.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/mysqltest.c b/client/mysqltest.c index 337a31ad7af..0b1565af16d 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -499,11 +499,11 @@ void handle_no_error(struct st_command*); pthread_attr_t cn_thd_attrib; /* - send_one_query executes query in separate thread what is + send_one_query executes query in separate thread, which is necessary in embedded library to run 'send' in proper way. This implementation doesn't handle errors returned by mysql_send_query. It's technically possible, though - i don't see where it is needed. + I don't see where it is needed. */ pthread_handler_t send_one_query(void *arg) { From 050256c2d74b4b358670039e92b33cf2051b9559 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 6 Aug 2007 11:20:36 +0200 Subject: [PATCH 035/194] Remove NOT_YET code Update comments Add more tests for "let from query" client/mysqltest.c: Remove NOT_YET code Update comments mysql-test/r/mysqltest.result: Add more tests for "let from query" mysql-test/t/mysqltest.test: Add more tests for "let from query" --- client/mysqltest.c | 30 ++++++------------------------ mysql-test/r/mysqltest.result | 12 ++++++++++++ mysql-test/t/mysqltest.test | 34 ++++++++++++++++++---------------- 3 files changed, 36 insertions(+), 40 deletions(-) diff --git a/client/mysqltest.c b/client/mysqltest.c index 0b1565af16d..7e10c040851 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -1777,40 +1777,22 @@ void var_query_set(VAR *var, const char *query, const char** query_end) die("Query '%s' didn't return a result set", ds_query.str); dynstr_free(&ds_query); - if ((row = mysql_fetch_row(res)) && row[0]) + if ((row= mysql_fetch_row(res)) && row[0]) { /* - Concatenate all row results with tab in between to allow us to work - with results from many columns (for example from SHOW VARIABLES) + Concatenate all fields in the first row with tab in between + and assign that string to the $variable */ DYNAMIC_STRING result; uint i; ulong *lengths; -#ifdef NOT_YET - MYSQL_FIELD *fields= mysql_fetch_fields(res); -#endif - init_dynamic_string(&result, "", 2048, 2048); + init_dynamic_string(&result, "", 512, 512); lengths= mysql_fetch_lengths(res); - for (i=0; i < mysql_num_fields(res); i++) + for (i= 0; i < mysql_num_fields(res); i++) { - if (row[0]) + if (row[i]) { -#ifdef NOT_YET - /* Add to _ */ - uint j; - char var_col_name[MAX_VAR_NAME_LENGTH]; - uint length= snprintf(var_col_name, MAX_VAR_NAME_LENGTH, - "$%s_%s", var->name, fields[i].name); - /* Convert characters not allowed in variable names to '_' */ - for (j= 1; j < length; j++) - { - if (!my_isvar(charset_info,var_col_name[j])) - var_col_name[j]= '_'; - } - var_set(var_col_name, var_col_name + length, - row[i], row[i] + lengths[i]); -#endif /* Add column to tab separated string */ dynstr_append_mem(&result, row[i], lengths[i]); } diff --git a/mysql-test/r/mysqltest.result b/mysql-test/r/mysqltest.result index 300ca69f2b4..513216c062e 100644 --- a/mysql-test/r/mysqltest.result +++ b/mysql-test/r/mysqltest.result @@ -280,6 +280,18 @@ let $B = changed value of B; var2: content of variable 1 var3: content of variable 1 content of variable 1 length of var3 is longer than 0 +var1 +hi 1 hi there +var2 +2 +var2 again +2 +var3 two columns with same name +1 2 3 +var4 from query that returns NULL +var5 from query that returns no row +failing query in let +mysqltest: At line 1: Error running query 'failing query': 1064 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 'failing query' at line 1 mysqltest: At line 1: Missing required argument 'filename' to command 'source' mysqltest: At line 1: Could not open file ./non_existingFile mysqltest: In included file "MYSQLTEST_VARDIR/tmp/recursive.sql": At line 1: Source directives are nesting too deep diff --git a/mysql-test/t/mysqltest.test b/mysql-test/t/mysqltest.test index 9c29840ba9b..20140307e57 100644 --- a/mysql-test/t/mysqltest.test +++ b/mysql-test/t/mysqltest.test @@ -736,38 +736,40 @@ if (`select length("$var3") > 0`) # Test to assign let from query # let $=``; # ---------------------------------------------------------------------------- ---disable_parsing echo var1; let $var1= `select "hi" as "Col", 1 as "Column1", "hi there" as Col3`; echo $var1; -echo $var1_Col; -echo $var1_Column1; -echo $var1_Col3; echo var2; let $var2= `select 2 as "Column num 2"`; echo $var2; -echo $var2_Column num 2; -echo $var2_Column; echo var2 again; let $var2= `select 2 as "Column num 2"`; echo $var2; -echo $var2_Column num 2; -echo $var2_Column_num_2; -echo $var2_Column; echo var3 two columns with same name; let $var3= `select 1 as "Col", 2 as "Col", 3 as "var3"`; echo $var3; -echo $var3_Col; -echo $var3_Col; -echo $var3_var3; -#echo failing query in let; -#--error 1 -#--exec echo "let $var2= `failing query;`" | $MYSQL_TEST 2>&1 ---enable_parsing +echo var4 from query that returns NULL; +let $var4= `select NULL`; + +echo var5 from query that returns no row; +let $var5= `SHOW VARIABLES LIKE "nonexisting_variable"`; + +echo failing query in let; +--write_file $MYSQLTEST_VARDIR/tmp/let.sql +let $var2= `failing query`; +echo $var2; +EOF + +--error 1 +--exec $MYSQL_TEST < $MYSQLTEST_VARDIR/tmp/let.sql 2>&1 + +remove_file $MYSQLTEST_VARDIR/tmp/let.sql; + + # ---------------------------------------------------------------------------- # Test source command # ---------------------------------------------------------------------------- From 275a80302173140f93579caa857a48b5e4a291ed Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 6 Aug 2007 13:42:00 +0200 Subject: [PATCH 036/194] Add missing ' Extend buffer size to allow for longer log messages --- client/mysqltest.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/mysqltest.c b/client/mysqltest.c index 7e10c040851..1659c7e6ac5 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -1006,7 +1006,7 @@ void warning_msg(const char *fmt, ...) void log_msg(const char *fmt, ...) { va_list args; - char buff[512]; + char buff[1024]; size_t len; DBUG_ENTER("log_msg"); @@ -2269,7 +2269,7 @@ void do_exec(struct st_command *command) if (command->abort_on_error) { - log_msg("exec of '%s failed, error: %d, status: %d, errno: %d", + log_msg("exec of '%s' failed, error: %d, status: %d, errno: %d", ds_cmd.str, error, status, errno); die("command \"%s\" failed", command->first_argument); } From 1f83b351818fca51a14bc34a224c4a80e14c9476 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 6 Aug 2007 04:57:28 -0700 Subject: [PATCH 037/194] Bug #29536: timestamp inconsistent in replication around 1970 MySQL replicates the time zone only when operations that involve it are performed. This is controlled by a flag. But this flag is set only on successful operation. The flag must be set also when there is an error that involves a timezone (so the master would replicate the error to the slaves). Fixed by moving the setting of the flag before the operation (so it apples to errors as well). mysql-test/r/rpl_timezone.result: Bug #29536: test case mysql-test/t/rpl_timezone.test: Bug #29536: test case sql/field.cc: Bug #29536: move setting of the flag before the operation (so it apples to errors as well). sql/time.cc: Bug #29536: move setting of the flag before the operation (so it apples to errors as well). --- mysql-test/r/rpl_timezone.result | 18 ++++++++++++++++++ mysql-test/t/rpl_timezone.test | 29 +++++++++++++++++++++++++++-- sql/field.cc | 6 +++--- sql/time.cc | 2 +- 4 files changed, 49 insertions(+), 6 deletions(-) diff --git a/mysql-test/r/rpl_timezone.result b/mysql-test/r/rpl_timezone.result index 10dc8eb7e3c..7a18a26afd3 100644 --- a/mysql-test/r/rpl_timezone.result +++ b/mysql-test/r/rpl_timezone.result @@ -130,3 +130,21 @@ t 2005-01-01 08:00:00 drop table t1, t2; set global time_zone= @my_time_zone; +End of 4.1 tests +CREATE TABLE t1 (a INT, b TIMESTAMP); +INSERT INTO t1 VALUES (1, NOW()); +SET @@session.time_zone='Japan'; +UPDATE t1 SET b= '1970-01-01 08:59:59' WHERE a= 1; +Warnings: +Warning 1264 Out of range value adjusted for column 'b' at row 1 +SELECT * FROM t1 ORDER BY a; +a b +1 0000-00-00 00:00:00 +SET @@session.time_zone='Japan'; +SELECT * FROM t1 ORDER BY a; +a b +1 0000-00-00 00:00:00 +SET @@session.time_zone = default; +DROP TABLE t1; +SET @@session.time_zone = default; +End of 5.0 tests diff --git a/mysql-test/t/rpl_timezone.test b/mysql-test/t/rpl_timezone.test index 6ed5b21ace0..28ca250340e 100644 --- a/mysql-test/t/rpl_timezone.test +++ b/mysql-test/t/rpl_timezone.test @@ -126,8 +126,33 @@ connection master; drop table t1, t2; sync_slave_with_master; -# End of 4.1 tests - # Restore original timezone connection master; set global time_zone= @my_time_zone; + +--echo End of 4.1 tests + +# +# Bug #29536: timestamp inconsistent in replication around 1970 +# +connection master; + +CREATE TABLE t1 (a INT, b TIMESTAMP); +INSERT INTO t1 VALUES (1, NOW()); + +SET @@session.time_zone='Japan'; +UPDATE t1 SET b= '1970-01-01 08:59:59' WHERE a= 1; +SELECT * FROM t1 ORDER BY a; + +sync_slave_with_master; +SET @@session.time_zone='Japan'; +# must procdure the same result as the SELECT on the master +SELECT * FROM t1 ORDER BY a; + +SET @@session.time_zone = default; +connection master; +DROP TABLE t1; +SET @@session.time_zone = default; + + +--echo End of 5.0 tests diff --git a/sql/field.cc b/sql/field.cc index 3f74210807b..8191d885a27 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -4462,6 +4462,7 @@ longlong Field_timestamp::val_int(void) MYSQL_TIME time_tmp; THD *thd= table ? table->in_use : current_thd; + thd->time_zone_used= 1; #ifdef WORDS_BIGENDIAN if (table && table->s->db_low_byte_first) temp=uint4korr(ptr); @@ -4473,7 +4474,6 @@ longlong Field_timestamp::val_int(void) return(0); /* purecov: inspected */ thd->variables.time_zone->gmt_sec_to_TIME(&time_tmp, (my_time_t)temp); - thd->time_zone_used= 1; return time_tmp.year * LL(10000000000) + time_tmp.month * LL(100000000) + time_tmp.day * 1000000L + time_tmp.hour * 10000L + @@ -4492,6 +4492,7 @@ String *Field_timestamp::val_str(String *val_buffer, String *val_ptr) to= (char*) val_buffer->ptr(); val_buffer->length(field_length); + thd->time_zone_used= 1; #ifdef WORDS_BIGENDIAN if (table && table->s->db_low_byte_first) temp=uint4korr(ptr); @@ -4507,7 +4508,6 @@ String *Field_timestamp::val_str(String *val_buffer, String *val_ptr) val_buffer->set_charset(&my_charset_bin); // Safety thd->variables.time_zone->gmt_sec_to_TIME(&time_tmp,(my_time_t)temp); - thd->time_zone_used= 1; temp= time_tmp.year % 100; if (temp < YY_PART_YEAR - 1) @@ -4557,6 +4557,7 @@ bool Field_timestamp::get_date(MYSQL_TIME *ltime, uint fuzzydate) { long temp; THD *thd= table ? table->in_use : current_thd; + thd->time_zone_used= 1; #ifdef WORDS_BIGENDIAN if (table && table->s->db_low_byte_first) temp=uint4korr(ptr); @@ -4572,7 +4573,6 @@ bool Field_timestamp::get_date(MYSQL_TIME *ltime, uint fuzzydate) else { thd->variables.time_zone->gmt_sec_to_TIME(ltime, (my_time_t)temp); - thd->time_zone_used= 1; } return 0; } diff --git a/sql/time.cc b/sql/time.cc index b4a8b047998..fb8a51fd0eb 100644 --- a/sql/time.cc +++ b/sql/time.cc @@ -228,11 +228,11 @@ my_time_t TIME_to_timestamp(THD *thd, const MYSQL_TIME *t, my_bool *in_dst_time_ my_time_t timestamp; *in_dst_time_gap= 0; + thd->time_zone_used= 1; timestamp= thd->variables.time_zone->TIME_to_gmt_sec(t, in_dst_time_gap); if (timestamp) { - thd->time_zone_used= 1; return timestamp; } From 730f7722b4e81dcc3af4ebe1b02b47029f498a46 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 6 Aug 2007 06:55:50 -0700 Subject: [PATCH 038/194] Bug 29536 : error message changed 5.0-opt -> 5.1-opt --- mysql-test/suite/rpl/r/rpl_timezone.result | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysql-test/suite/rpl/r/rpl_timezone.result b/mysql-test/suite/rpl/r/rpl_timezone.result index fa7b77a37ea..cd71dbe628e 100644 --- a/mysql-test/suite/rpl/r/rpl_timezone.result +++ b/mysql-test/suite/rpl/r/rpl_timezone.result @@ -111,7 +111,7 @@ INSERT INTO t1 VALUES (1, NOW()); SET @@session.time_zone='Japan'; UPDATE t1 SET b= '1970-01-01 08:59:59' WHERE a= 1; Warnings: -Warning 1264 Out of range value adjusted for column 'b' at row 1 +Warning 1264 Out of range value for column 'b' at row 1 SELECT * FROM t1 ORDER BY a; a b 1 0000-00-00 00:00:00 From cfd34fe23216c0bbbddb871849d1607398e14739 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 7 Aug 2007 05:35:20 -0400 Subject: [PATCH 039/194] Bug#27562: ascii.xml invalid? Two character mappings were way off (backtick and tilde were "E" and "Y"!), and three others were slightly rotated. The first would cause collisions, and the latter was probably benign. Now, assign the character mappings exactly to their normal values. sql/share/charsets/ascii.xml: Change the character mapping for "`" to "`" (was "E") and "[" to "[" (was "\") and "\" to "\" (was "]") and "]" to "]" (was "[") and "~" to "~" (was "Y"). strings/ctype-extra.c: Generated from charsets directory. mysql-test/r/ctype_ascii.result: Add new test file. Test all combinations of printable letter comparisons for similarity. mysql-test/t/ctype_ascii.test: Add new test file. Test all combinations of printable letter comparisons for similarity. --- mysql-test/r/ctype_ascii.result | 177 ++++++++++++++++++++++++++++++++ mysql-test/t/ctype_ascii.test | 13 +++ sql/share/charsets/ascii.xml | 6 +- strings/ctype-extra.c | 6 +- 4 files changed, 196 insertions(+), 6 deletions(-) create mode 100644 mysql-test/r/ctype_ascii.result create mode 100644 mysql-test/t/ctype_ascii.test diff --git a/mysql-test/r/ctype_ascii.result b/mysql-test/r/ctype_ascii.result new file mode 100644 index 00000000000..06362486073 --- /dev/null +++ b/mysql-test/r/ctype_ascii.result @@ -0,0 +1,177 @@ +set names ascii; +select 'e'='`'; +'e'='`' +0 +select 'y'='~'; +'y'='~' +0 +create table t1 (a char(1) character set ascii); +insert into t1 (a) values (' '), ('a'), ('b'), ('c'), ('d'), ('e'), ('f'), ('g'), ('h'), ('i'), ('j'), ('k'), ('l'), ('m'), ('n'), ('o'), ('p'), ('q'), ('r'), ('s'), ('t'), ('u'), ('v'), ('w'), ('x'), ('y'), ('z'), ('A'), ('B'), ('C'), ('D'), ('E'), ('F'), ('G'), ('H'), ('I'), ('J'), ('K'), ('L'), ('M'), ('N'), ('O'), ('P'), ('Q'), ('R'), ('S'), ('T'), ('U'), ('V'), ('W'), ('X'), ('Y'), ('Z'), ('!'), ('@'), ('#'), ('$'), ('%'), ('^'), ('&'), ('*'), ('('), (')'), ('_'), ('+'), ('`'), ('~'), ('1'), ('2'), ('3'), ('4'), ('5'), ('6'), ('7'), ('8'), ('9'), ('0'), ('['), (']'), ('\\'), ('|'), ('}'), ('{'), ('"'), (':'), (''''), (';'), ('/'), ('.'), (','), ('?'), ('>'), ('<'), ('\n'), ('\t'), ('\a'), ('\f'), ('\v'); +select t1a.a, t1b.a from t1 as t1a, t1 as t1b where t1a.a=t1b.a order by binary t1a.a, binary t1b.a; +a a + + + + + +! ! +" " +# # +$ $ +% % +& & +' ' +( ( +) ) +* * ++ + +, , +. . +/ / +0 0 +1 1 +2 2 +3 3 +4 4 +5 5 +6 6 +7 7 +8 8 +9 9 +: : +; ; +< < +> > +? ? +@ @ +A A +A a +A a +B B +B b +C C +C c +D D +D d +E E +E e +F F +F f +F f +G G +G g +H H +H h +I I +I i +J J +J j +K K +K k +L L +L l +M M +M m +N N +N n +O O +O o +P P +P p +Q Q +Q q +R R +R r +S S +S s +T T +T t +U U +U u +V V +V v +V v +W W +W w +X X +X x +Y Y +Y y +Z Z +Z z +[ [ +\ \ +] ] +^ ^ +_ _ +` ` +a A +a A +a a +a a +a a +a a +b B +b b +c C +c c +d D +d d +e E +e e +f F +f F +f f +f f +f f +f f +g G +g g +h H +h h +i I +i i +j J +j j +k K +k k +l L +l l +m M +m m +n N +n n +o O +o o +p P +p p +q Q +q q +r R +r r +s S +s s +t T +t t +u U +u u +v V +v V +v v +v v +v v +v v +w W +w w +x X +x x +y Y +y y +z Z +z z +{ { +| | +} } +~ ~ +drop table t1; +End of 5.0 tests. diff --git a/mysql-test/t/ctype_ascii.test b/mysql-test/t/ctype_ascii.test new file mode 100644 index 00000000000..2a5118c7d34 --- /dev/null +++ b/mysql-test/t/ctype_ascii.test @@ -0,0 +1,13 @@ +# +# Bug #27562: ascii.xml invalid? +# +set names ascii; +select 'e'='`'; +select 'y'='~'; +create table t1 (a char(1) character set ascii); +insert into t1 (a) values (' '), ('a'), ('b'), ('c'), ('d'), ('e'), ('f'), ('g'), ('h'), ('i'), ('j'), ('k'), ('l'), ('m'), ('n'), ('o'), ('p'), ('q'), ('r'), ('s'), ('t'), ('u'), ('v'), ('w'), ('x'), ('y'), ('z'), ('A'), ('B'), ('C'), ('D'), ('E'), ('F'), ('G'), ('H'), ('I'), ('J'), ('K'), ('L'), ('M'), ('N'), ('O'), ('P'), ('Q'), ('R'), ('S'), ('T'), ('U'), ('V'), ('W'), ('X'), ('Y'), ('Z'), ('!'), ('@'), ('#'), ('$'), ('%'), ('^'), ('&'), ('*'), ('('), (')'), ('_'), ('+'), ('`'), ('~'), ('1'), ('2'), ('3'), ('4'), ('5'), ('6'), ('7'), ('8'), ('9'), ('0'), ('['), (']'), ('\\'), ('|'), ('}'), ('{'), ('"'), (':'), (''''), (';'), ('/'), ('.'), (','), ('?'), ('>'), ('<'), ('\n'), ('\t'), ('\a'), ('\f'), ('\v'); +select t1a.a, t1b.a from t1 as t1a, t1 as t1b where t1a.a=t1b.a order by binary t1a.a, binary t1b.a; +drop table t1; + +# +--echo End of 5.0 tests. diff --git a/sql/share/charsets/ascii.xml b/sql/share/charsets/ascii.xml index 068fb84eeae..f4fb79ac632 100644 --- a/sql/share/charsets/ascii.xml +++ b/sql/share/charsets/ascii.xml @@ -117,9 +117,9 @@ 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F - 50 51 52 53 54 55 56 57 58 59 5A 5C 5D 5B 5E 5F - 45 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F - 50 51 52 53 54 55 56 57 58 59 5A 7B 7C 7D 59 7F + 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F + 60 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F + 50 51 52 53 54 55 56 57 58 59 5A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF diff --git a/strings/ctype-extra.c b/strings/ctype-extra.c index bf45b5b5d75..384db5afa71 100644 --- a/strings/ctype-extra.c +++ b/strings/ctype-extra.c @@ -894,9 +894,9 @@ uchar sort_order_ascii_general_ci[] = { 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5C,0x5D,0x5B,0x5E,0x5F, -0x45,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x59,0x7F, +0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, +0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, +0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, From 04e8c93c20a5517cfd57ef71ea91a3cea531828b Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 7 Aug 2007 11:40:03 +0200 Subject: [PATCH 040/194] Bug#20037 mysqltest requires cygwin on windows(part 1, new mysqltest commands) - Update comments - Make "write_file" fail if file already exist - Remove temporary files created by test cases client/mysqltest.c: Improve function comments Make write_file fail if file already exist mysql-test/r/mysqltest.result: Update test result after adding new test and updating description of argumements to chmod mysql-test/t/bootstrap.test: Remove temporary file created by testcase mysql-test/t/mysql.test: Remove temporary file created by testcase mysql-test/t/mysqladmin.test: Remove temporary file created by testcase mysql-test/t/mysqltest.test: Remove temporary file created by testcase Add test to show that "write_file" fails if file already exist mysql-test/t/sp-destruct.test: Remove temporary file created by testcase --- client/mysqltest.c | 16 +++++++++++----- mysql-test/r/mysqltest.result | 3 ++- mysql-test/t/bootstrap.test | 7 +++++-- mysql-test/t/mysql.test | 3 +++ mysql-test/t/mysqladmin.test | 3 ++- mysql-test/t/mysqltest.test | 20 ++++++++++++++++++++ mysql-test/t/sp-destruct.test | 1 + 7 files changed, 44 insertions(+), 9 deletions(-) diff --git a/client/mysqltest.c b/client/mysqltest.c index 183374ea095..a863284921a 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -2525,8 +2525,8 @@ void do_copy_file(struct st_command *command) command command handle DESCRIPTION - chmod - Change file permission of + chmod_file + Change file permission of */ @@ -2536,8 +2536,8 @@ void do_chmod_file(struct st_command *command) static DYNAMIC_STRING ds_mode; static DYNAMIC_STRING ds_file; const struct command_arg chmod_file_args[] = { - "mode", ARG_STRING, TRUE, &ds_mode, "Mode of file", - "file", ARG_STRING, TRUE, &ds_file, "Filename of file to modify" + "mode", ARG_STRING, TRUE, &ds_mode, "Mode of file(octal) ex. 0660", + "filename", ARG_STRING, TRUE, &ds_file, "Filename of file to modify" }; DBUG_ENTER("do_chmod_file"); @@ -2671,6 +2671,12 @@ void do_write_file_command(struct st_command *command, my_bool append) if (ds_delimiter.length == 0) dynstr_set(&ds_delimiter, "EOF"); + if (!append && access(ds_filename.str, F_OK) == 0) + { + /* The file should not be overwritten */ + die("File already exist: '%s'", ds_filename.str); + } + init_dynamic_string(&ds_content, "", 1024, 1024); read_until_delimiter(&ds_content, &ds_delimiter); DBUG_PRINT("info", ("Writing to file: %s", ds_filename.str)); @@ -2703,7 +2709,7 @@ void do_write_file_command(struct st_command *command, my_bool append) Write everything between the "write_file" command and 'delimiter' to "file_name" - NOTE! Overwrites existing file + NOTE! Will fail if exists Default is EOF diff --git a/mysql-test/r/mysqltest.result b/mysql-test/r/mysqltest.result index 300ca69f2b4..7c63bb78967 100644 --- a/mysql-test/r/mysqltest.result +++ b/mysql-test/r/mysqltest.result @@ -521,6 +521,7 @@ drop table t1; mysqltest: At line 1: Missing required argument 'filename' to command 'remove_file' mysqltest: At line 1: Missing required argument 'filename' to command 'write_file' mysqltest: At line 1: End of file encountered before 'EOF' delimiter was found +mysqltest: At line 1: File already exist: 'MYSQLTEST_VARDIR/tmp/test_file1.tmp' Some data for cat_file command of mysqltest @@ -531,7 +532,7 @@ mysqltest: At line 1: Missing required argument 'to_file' to command 'copy_file' mysqltest: At line 1: Missing required argument 'mode' to command 'chmod' mysqltest: At line 1: You must write a 4 digit octal number for mode mysqltest: At line 1: You must write a 4 digit octal number for mode -mysqltest: At line 1: Missing required argument 'file' to command 'chmod' +mysqltest: At line 1: Missing required argument 'filename' to command 'chmod' mysqltest: At line 1: You must write a 4 digit octal number for mode mysqltest: At line 1: You must write a 4 digit octal number for mode hello diff --git a/mysql-test/t/bootstrap.test b/mysql-test/t/bootstrap.test index 1c2952e93d0..203ba9b2914 100644 --- a/mysql-test/t/bootstrap.test +++ b/mysql-test/t/bootstrap.test @@ -9,12 +9,13 @@ drop table if exists t1; # # Check that --bootstrap reads from stdin # ---write_file $MYSQLTEST_VARDIR/tmp/bootstrap.sql +--write_file $MYSQLTEST_VARDIR/tmp/bootstrap_test.sql use test; CREATE TABLE t1(a int); EOF ---exec $MYSQLD_BOOTSTRAP_CMD < $MYSQLTEST_VARDIR/tmp/bootstrap.sql >> $MYSQLTEST_VARDIR/tmp/bootstrap.log 2>&1 +--exec $MYSQLD_BOOTSTRAP_CMD < $MYSQLTEST_VARDIR/tmp/bootstrap_test.sql >> $MYSQLTEST_VARDIR/tmp/bootstrap.log 2>&1 drop table t1; +remove_file $MYSQLTEST_VARDIR/tmp/bootstrap_test.sql; # # Check that --bootstrap of file with SQL error returns error @@ -28,6 +29,7 @@ EOF # Table t1 should not exists --error 1051 drop table t1; +remove_file $MYSQLTEST_VARDIR/tmp/bootstrap_error.sql; # # Bootstrap with a query larger than 2*thd->net.max_packet @@ -40,6 +42,7 @@ eval select * into outfile '$MYSQLTEST_VARDIR/tmp/long_query.sql' from t1; --enable_query_log --error 1 --exec $MYSQLD_BOOTSTRAP_CMD < $MYSQLTEST_VARDIR/tmp/long_query.sql >> $MYSQLTEST_VARDIR/tmp/bootstrap.log 2>&1 +remove_file $MYSQLTEST_VARDIR/tmp/long_query.sql; set global max_allowed_packet=@my_max_allowed_packet; drop table t1; diff --git a/mysql-test/t/mysql.test b/mysql-test/t/mysql.test index 37bbca77d9f..66bd2f67512 100644 --- a/mysql-test/t/mysql.test +++ b/mysql-test/t/mysql.test @@ -241,18 +241,21 @@ DELIMITER / SELECT 1/ EOF --exec $MYSQL < $MYSQLTEST_VARDIR/tmp/bug21412.sql 2>&1 +remove_file $MYSQLTEST_VARDIR/tmp/bug21412.sql; # This should give an error... --write_file $MYSQLTEST_VARDIR/tmp/bug21412.sql DELIMITER \ EOF --exec $MYSQL < $MYSQLTEST_VARDIR/tmp/bug21412.sql 2>&1 +remove_file $MYSQLTEST_VARDIR/tmp/bug21412.sql; # As should this... --write_file $MYSQLTEST_VARDIR/tmp/bug21412.sql DELIMITER \\ EOF --exec $MYSQL < $MYSQLTEST_VARDIR/tmp/bug21412.sql 2>&1 +remove_file $MYSQLTEST_VARDIR/tmp/bug21412.sql; # # Some coverage of not normally used parts diff --git a/mysql-test/t/mysqladmin.test b/mysql-test/t/mysqladmin.test index 3fa03fa910e..839ecf00b60 100644 --- a/mysql-test/t/mysqladmin.test +++ b/mysql-test/t/mysqladmin.test @@ -20,7 +20,7 @@ EOF --replace_regex /.*mysqladmin.*: unknown/mysqladmin: unknown/ --error 7 --exec $MYSQLADMIN --defaults-file=$MYSQLTEST_VARDIR/tmp/bug10608.cnf -S $MASTER_MYSOCK -P $MASTER_MYPORT -u root --password= ping 2>&1 - +remove_file $MYSQLTEST_VARDIR/tmp/bug10608.cnf; # When mysqladmin finds "loose-database" in .cnf file it shall print # a warning and continue @@ -32,3 +32,4 @@ EOF --replace_regex /Warning: .*mysqladmin.*: unknown/Warning: mysqladmin: unknown/ --exec $MYSQLADMIN --defaults-file=$MYSQLTEST_VARDIR/tmp/bug10608.cnf -S $MASTER_MYSOCK -P $MASTER_MYPORT -u root --password= ping 2>&1 +remove_file $MYSQLTEST_VARDIR/tmp/bug10608.cnf; diff --git a/mysql-test/t/mysqltest.test b/mysql-test/t/mysqltest.test index 9c29840ba9b..b892b433369 100644 --- a/mysql-test/t/mysqltest.test +++ b/mysql-test/t/mysqltest.test @@ -366,6 +366,7 @@ show status; EOF --error 1 --exec $MYSQL_TEST < $MYSQLTEST_VARDIR/tmp/mysqltest.sql 2>&1 +remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql; # # Missing delimiter until eof @@ -377,6 +378,7 @@ sleep 7 EOF --error 1 --exec $MYSQL_TEST < $MYSQLTEST_VARDIR/tmp/mysqltest.sql 2>&1 +remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql; # # Missing delimiter until "disable_query_log" @@ -391,6 +393,7 @@ disable_query_log; EOF --error 1 --exec $MYSQL_TEST < $MYSQLTEST_VARDIR/tmp/mysqltest.sql 2>&1 +remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql; # # Missing delimiter until "disable_query_log" @@ -406,6 +409,7 @@ disable_query_log; EOF --error 1 --exec $MYSQL_TEST < $MYSQLTEST_VARDIR/tmp/mysqltest.sql 2>&1 +remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql; # # Missing delimiter until eof @@ -422,6 +426,7 @@ disconnect default EOF --error 1 --exec $MYSQL_TEST < $MYSQLTEST_VARDIR/tmp/mysqltest.sql 2>&1 +remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql; # # Missing delimiter until eof @@ -1160,6 +1165,7 @@ echo hej; EOF --error 1 --exec $MYSQL_TEST < $MYSQLTEST_VARDIR/tmp/mysqltest.sql 2>&1 +remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql; --write_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql while (0) @@ -1167,6 +1173,7 @@ while (0) EOF --error 1 --exec $MYSQL_TEST < $MYSQLTEST_VARDIR/tmp/mysqltest.sql 2>&1 +remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql; --write_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql while (0){ @@ -1268,6 +1275,7 @@ while ($i) } EOF --exec echo "source $MYSQLTEST_VARDIR/tmp/mysqltest.sql; echo OK;" | $MYSQL_TEST 2>&1 +remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql; # Repeat connect/disconnect --write_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql @@ -1282,6 +1290,7 @@ EOF --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR --error 1 --exec echo "source $MYSQLTEST_VARDIR/tmp/mysqltest.sql;" | $MYSQL_TEST 2>&1 +remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql; # Select disconnected connection --write_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql @@ -1292,6 +1301,7 @@ EOF --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR --error 1 --exec echo "source $MYSQLTEST_VARDIR/tmp/mysqltest.sql;" | $MYSQL_TEST 2>&1 +remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql; # Connection name already used --write_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql @@ -1568,6 +1578,12 @@ write_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp END_DELIMITER; Content for test_file1 contains EOF END_DELIMITER file_exists $MYSQLTEST_VARDIR/tmp/test_file1.tmp; + +# write to already exisiting file +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--error 1 +--exec echo "write_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp;" | $MYSQL_TEST 2>&1 + remove_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp; # ---------------------------------------------------------------------------- @@ -1589,6 +1605,8 @@ append_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp; Appended text on nonexisting file EOF +remove_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp; + # ---------------------------------------------------------------------------- # test for cat_file # ---------------------------------------------------------------------------- @@ -1599,6 +1617,7 @@ for cat_file command of mysqltest EOF cat_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp; +remove_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp; --error 1 --exec echo "cat_file non_existing_file;" | $MYSQL_TEST 2>&1 @@ -1719,6 +1738,7 @@ chmod 0000 $MYSQLTEST_VARDIR/tmp/file1.tmp; #EOF chmod 0777 $MYSQLTEST_VARDIR/tmp/file1.tmp; +remove_file $MYSQLTEST_VARDIR/tmp/file1.tmp; --write_file $MYSQLTEST_VARDIR/tmp/file1.tmp test2 EOF diff --git a/mysql-test/t/sp-destruct.test b/mysql-test/t/sp-destruct.test index 13ddaa43fad..c568e6bb8f4 100644 --- a/mysql-test/t/sp-destruct.test +++ b/mysql-test/t/sp-destruct.test @@ -42,6 +42,7 @@ insert into t1 values (0); flush table mysql.proc; # Thrashing the .frm file +--remove_file $MYSQLTEST_VARDIR/master-data/mysql/proc.frm --write_file $MYSQLTEST_VARDIR/master-data/mysql/proc.frm saljdfa EOF From c35318cee16459c96be5803e80e2a2d9857615b3 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 7 Aug 2007 11:56:30 +0200 Subject: [PATCH 041/194] Bug#29547 mysql-test-run to retrieve warnings for failed command - Run "SHOW WARNINGS" when mysqltest fails and display all but the last warning(since it's the same as "last error") on stderr - Fix typo client/mysqltest.c: - Display any warnings produced prior to the error that caused mysqltest to die. - Fix typo "cur_con" -> "con_slot" - Move initialization of the "cur_con" pointer to just before it's initialized so it can be used to check if a connection to mysql exist. --- client/mysqltest.c | 85 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 81 insertions(+), 4 deletions(-) diff --git a/client/mysqltest.c b/client/mysqltest.c index 1659c7e6ac5..1d481f33f47 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -235,7 +235,7 @@ struct st_connection #endif /*EMBEDDED_LIBRARY*/ }; struct st_connection connections[128]; -struct st_connection* cur_con, *next_con, *connections_end; +struct st_connection* cur_con= NULL, *next_con, *connections_end; /* List of commands in mysqltest @@ -604,6 +604,77 @@ void do_eval(DYNAMIC_STRING *query_eval, const char *query, } +/* + Show any warnings just before the error. Since the last error + is added to the warning stack, only print @@warning_count-1 warnings. + + NOTE! This function should be safe to call when an error + has occured and this any further errors will be ignored(although logged) + + SYNOPSIS + show_warnings_before_error + mysql - connection to use + +*/ + +static void show_warnings_before_error(MYSQL* mysql) +{ + MYSQL_RES* res; + const char* query= "SHOW WARNINGS"; + DBUG_ENTER("show_warnings_before_error"); + + if (!mysql) + DBUG_VOID_RETURN; + + if (mysql_query(mysql, query)) + { + log_msg("Error running query '%s': %d %s", + query, mysql_errno(mysql), mysql_error(mysql)); + DBUG_VOID_RETURN; + } + + if ((res= mysql_store_result(mysql)) == NULL) + { + /* No result set returned */ + DBUG_VOID_RETURN; + } + + if (mysql_num_rows(res) <= 1) + { + /* Don't display the last row, it's "last error" */ + } + else + { + MYSQL_ROW row; + unsigned int row_num= 0; + unsigned int num_fields= mysql_num_fields(res); + + fprintf(stderr, "\nWarnings from just before the error:\n"); + while ((row= mysql_fetch_row(res))) + { + unsigned int i; + unsigned long *lengths= mysql_fetch_lengths(res); + + if (++row_num >= mysql_num_rows(res)) + { + /* Don't display the last row, it's "last error" */ + break; + } + + for(i= 0; i < num_fields; i++) + { + fprintf(stderr, "%.*s ", lengths[i], + row[i] ? row[i] : "NULL"); + } + fprintf(stderr, "\n"); + } + } + mysql_free_result(res); + + DBUG_VOID_RETURN; +} + + enum arg_type { ARG_STRING, @@ -903,6 +974,13 @@ void die(const char *fmt, ...) if (result_file_name && ds_warning_messages.length) dump_warning_messages(); + /* + Help debugging by displaying any warnings that might have + been produced prior to the error + */ + if (cur_con) + show_warnings_before_error(&cur_con->mysql); + cleanup_and_exit(1); } @@ -1010,7 +1088,6 @@ void log_msg(const char *fmt, ...) size_t len; DBUG_ENTER("log_msg"); - memset(buff, 0, sizeof(buff)); va_start(args, fmt); len= my_vsnprintf(buff, sizeof(buff)-1, fmt, args); va_end(args); @@ -4044,7 +4121,7 @@ void do_connect(struct st_command *command) mysql_options(&con_slot->mysql, MYSQL_SET_CHARSET_NAME, charset_info->csname); if (opt_charsets_dir) - mysql_options(&cur_con->mysql, MYSQL_SET_CHARSET_DIR, + mysql_options(&con_slot->mysql, MYSQL_SET_CHARSET_DIR, opt_charsets_dir); #ifdef HAVE_OPENSSL @@ -6471,7 +6548,6 @@ int main(int argc, char **argv) connections_end= connections + (sizeof(connections)/sizeof(struct st_connection)) - 1; next_con= connections + 1; - cur_con= connections; #ifdef EMBEDDED_LIBRARY /* set appropriate stack for the 'query' threads */ @@ -6547,6 +6623,7 @@ int main(int argc, char **argv) if (cursor_protocol_enabled) ps_protocol_enabled= 1; + cur_con= connections; if (!( mysql_init(&cur_con->mysql))) die("Failed in mysql_init()"); if (opt_compress) From c6e88899460bd3478761f37a873a822f379a170d Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 7 Aug 2007 19:25:45 +0500 Subject: [PATCH 042/194] Reversing additional change suggested by Serg under terms of bug#28875 for better performance. The change appeared to require more changes in item_cmpfunc.cc, which is dangerous in 5.0. Conversion between a latin1 column and an ascii string constant stopped to work. mysql-test/r/ctype_recoding.result: Adding test case. mysql-test/t/ctype_recoding.test: Adding test case. --- mysql-test/r/ctype_recoding.result | 8 ++++++++ mysql-test/t/ctype_recoding.test | 10 ++++++++++ sql/sql_string.cc | 2 -- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/ctype_recoding.result b/mysql-test/r/ctype_recoding.result index 125e0edd1f9..3826792306f 100644 --- a/mysql-test/r/ctype_recoding.result +++ b/mysql-test/r/ctype_recoding.result @@ -187,6 +187,14 @@ select * from t1 where a=_latin1' ERROR HY000: Illegal mix of collations (cp1251_general_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '=' drop table t1; set names latin1; +set names ascii; +create table t1 (a char(1) character set latin1); +insert into t1 values ('a'); +select * from t1 where a='a'; +a +a +drop table t1; +set names latin1; create table t1 (a char(10) character set utf8 collate utf8_bin); insert into t1 values (' xxx'); select * from t1 where a=lpad('xxx',10,' '); diff --git a/mysql-test/t/ctype_recoding.test b/mysql-test/t/ctype_recoding.test index c18c46b6b08..1f55aea414a 100644 --- a/mysql-test/t/ctype_recoding.test +++ b/mysql-test/t/ctype_recoding.test @@ -152,6 +152,16 @@ select * from t1 where a=_latin1' drop table t1; set names latin1; +# +# Test the same with ascii +# +set names ascii; +create table t1 (a char(1) character set latin1); +insert into t1 values ('a'); +select * from t1 where a='a'; +drop table t1; +set names latin1; + # # Bug#10446 Illegal mix of collations # diff --git a/sql/sql_string.cc b/sql/sql_string.cc index a87074c3359..9d7df73cd7a 100644 --- a/sql/sql_string.cc +++ b/sql/sql_string.cc @@ -263,8 +263,6 @@ bool String::needs_conversion(uint32 arg_length, (to_cs == &my_charset_bin) || (to_cs == from_cs) || my_charset_same(from_cs, to_cs) || - (my_charset_is_ascii_based(to_cs) && - my_charset_is_8bit_pure_ascii(from_cs)) || ((from_cs == &my_charset_bin) && (!(*offset=(arg_length % to_cs->mbminlen))))) return FALSE; From 79b0f8d30d36d7f925ddc38a10f58c183b91bc4f Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 8 Aug 2007 09:31:45 +0200 Subject: [PATCH 043/194] Fix warning --- client/mysqltest.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/mysqltest.c b/client/mysqltest.c index 4951e88849f..e5daae2ffbe 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -663,7 +663,7 @@ static void show_warnings_before_error(MYSQL* mysql) for(i= 0; i < num_fields; i++) { - fprintf(stderr, "%.*s ", lengths[i], + fprintf(stderr, "%.*s ", (int)lengths[i], row[i] ? row[i] : "NULL"); } fprintf(stderr, "\n"); From 0193dbd7f90486a2fb5447fe65d289699c50fc27 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 8 Aug 2007 10:04:26 +0200 Subject: [PATCH 044/194] Improve comments and log messages in lib/mtr_timer.pl --- mysql-test/lib/mtr_timer.pl | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/mysql-test/lib/mtr_timer.pl b/mysql-test/lib/mtr_timer.pl index 86a9f58514f..d8b6953fb46 100644 --- a/mysql-test/lib/mtr_timer.pl +++ b/mysql-test/lib/mtr_timer.pl @@ -52,12 +52,10 @@ sub mtr_init_timers () { sub mtr_timer_start($$$) { my ($timers,$name,$duration)= @_; - mtr_verbose("mtr_timer_start: $name, $duration"); - if ( exists $timers->{'timers'}->{$name} ) { # We have an old running timer, kill it - mtr_verbose("There is an old timer running"); + mtr_warning("There is an old timer running"); mtr_timer_stop($timers,$name); } @@ -75,22 +73,22 @@ sub mtr_timer_start($$$) { } else { - mtr_error("can't fork"); + mtr_error("can't fork timer, error: $!"); } } if ( $tpid ) { # Parent, record the information - mtr_verbose("timer parent, record info($name, $tpid, $duration)"); + mtr_verbose("Starting timer for '$name',", + "duration: $duration, pid: $tpid"); $timers->{'timers'}->{$name}->{'pid'}= $tpid; $timers->{'timers'}->{$name}->{'duration'}= $duration; $timers->{'pids'}->{$tpid}= $name; } else { - # Child, redirect output and exec - # FIXME do we need to redirect streams? + # Child, install signal handlers and sleep for "duration" # Don't do the ^C cleanup in the timeout child processes! # There is actually a race here, if we get ^C after fork(), but before @@ -98,13 +96,13 @@ sub mtr_timer_start($$$) { $SIG{INT}= 'DEFAULT'; $SIG{TERM}= sub { - mtr_verbose("timer woke up, exiting!"); + mtr_verbose("timer $$ woke up, exiting!"); exit(0); }; $0= "mtr_timer(timers,$name,$duration)"; sleep($duration); - mtr_verbose("timer expired after $duration seconds"); + mtr_verbose("timer $$ expired after $duration seconds"); exit(0); } } @@ -114,12 +112,10 @@ sub mtr_timer_start($$$) { sub mtr_timer_stop ($$) { my ($timers,$name)= @_; - mtr_verbose("mtr_timer_stop: $name"); - if ( exists $timers->{'timers'}->{$name} ) { my $tpid= $timers->{'timers'}->{$name}->{'pid'}; - mtr_verbose("Stopping timer with pid $tpid"); + mtr_verbose("Stopping timer for '$name' with pid $tpid"); # FIXME as Cygwin reuses pids fast, maybe check that is # the expected process somehow?! @@ -134,11 +130,8 @@ sub mtr_timer_stop ($$) { return 1; } - else - { - mtr_error("Asked to stop timer \"$name\" not started"); - return 0; - } + + mtr_error("Asked to stop timer '$name' not started"); } @@ -158,7 +151,8 @@ sub mtr_timer_timeout ($$) { return "" unless exists $timers->{'pids'}->{$pid}; - # We got a timeout, return the name ot the timer + # Got a timeout(the process with $pid is recorded as being a timer) + # return the name of the timer return $timers->{'pids'}->{$pid}; } From 14df8d5cb89ce774c8fb3e1e8c2b2a1b17ac96f8 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 8 Aug 2007 16:39:13 +0200 Subject: [PATCH 045/194] Remove file before writing to it. --- mysql-test/t/csv.test | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/mysql-test/t/csv.test b/mysql-test/t/csv.test index 4aff4b27976..5c877557dfc 100644 --- a/mysql-test/t/csv.test +++ b/mysql-test/t/csv.test @@ -1424,6 +1424,7 @@ DROP TABLE test_repair_table2; # Corrupt csv file and see if we can repair it CREATE TABLE test_repair_table3 ( val integer ) ENGINE = CSV; +--remove_file $MYSQLTEST_VARDIR/master-data/test/test_repair_table3.CSV --write_file $MYSQLTEST_VARDIR/master-data/test/test_repair_table3.CSV "1" "4" @@ -1476,6 +1477,7 @@ CREATE TABLE test_repair_table5 ( ) ENGINE = CSV; # Corrupt a table -- put a file with wrong # of columns +--remove_file $MYSQLTEST_VARDIR/master-data/test/test_repair_table5.CSV --write_file $MYSQLTEST_VARDIR/master-data/test/test_repair_table5.CSV "1","101","IBM" EOF @@ -1629,6 +1631,7 @@ insert into bug22080_1 values(2,'string'); insert into bug22080_1 values(3,'string'); # Create first corrupt file as described in bug report +--remove_file $MYSQLTEST_VARDIR/master-data/test/bug22080_2.CSV --write_file $MYSQLTEST_VARDIR/master-data/test/bug22080_2.CSV 1,"string" 2","string" @@ -1636,6 +1639,7 @@ insert into bug22080_1 values(3,'string'); EOF # Create second corrupt file as described in bug report +--remove_file $MYSQLTEST_VARDIR/master-data/test/bug22080_3.CSV --write_file $MYSQLTEST_VARDIR/master-data/test/bug22080_3.CSV 1,"string" "2",string" @@ -1696,6 +1700,7 @@ check table t1; drop table t1; create table t1(a int, b int) engine=csv; +--remove_file $MYSQLTEST_VARDIR/master-data/test/t1.CSV --write_file $MYSQLTEST_VARDIR/master-data/test/t1.CSV 1, 1E-2 -2E2, .9 From 5501f528f5a6f41f8e38cabbbd2d52fcb29993a6 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 8 Aug 2007 16:44:01 +0200 Subject: [PATCH 046/194] Remove extra newline added to files created by write_file and append_file client/mysqltest.c: - Remove the extra newline first in the file produced by write_file and append_file - Add check for too many arguments passed to 'check_command_args' mysql-test/r/mysqltest.result: Update test result mysql-test/t/mysqltest.test: Add test to check that no extra newline is created --- client/mysqltest.c | 23 +++++++++++++++++++++++ mysql-test/r/mysqltest.result | 1 + mysql-test/t/mysqltest.test | 1 + 3 files changed, 25 insertions(+) diff --git a/client/mysqltest.c b/client/mysqltest.c index 1d481f33f47..541c0cb4394 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -753,6 +753,15 @@ void check_command_args(struct st_command *command, command->first_word_len, command->query); } + /* Check for too many arguments passed */ + ptr= command->last_argument; + while(ptr <= command->end) + { + if (*ptr && *ptr != ' ') + die("Extra argument '%s' passed to '%.*s'", + ptr, command->first_word_len, command->query); + ptr++; + } DBUG_VOID_RETURN; } @@ -2691,8 +2700,22 @@ void read_until_delimiter(DYNAMIC_STRING *ds, c= my_getc(cur_file->file); if (c == '\n') + { cur_file->lineno++; + /* Skip newline from the same line as the command */ + if (start_lineno == (cur_file->lineno - 1)) + continue; + } + else if (start_lineno == cur_file->lineno) + { + /* + No characters except \n are allowed on + the same line as the command + */ + die("Trailing characters found after command"); + } + if (feof(cur_file->file)) die("End of file encountered before '%s' delimiter was found", ds_delimiter->str); diff --git a/mysql-test/r/mysqltest.result b/mysql-test/r/mysqltest.result index 513216c062e..5ee1bc4dc0d 100644 --- a/mysql-test/r/mysqltest.result +++ b/mysql-test/r/mysqltest.result @@ -533,6 +533,7 @@ drop table t1; mysqltest: At line 1: Missing required argument 'filename' to command 'remove_file' mysqltest: At line 1: Missing required argument 'filename' to command 'write_file' mysqltest: At line 1: End of file encountered before 'EOF' delimiter was found +Content for test_file1 Some data for cat_file command of mysqltest diff --git a/mysql-test/t/mysqltest.test b/mysql-test/t/mysqltest.test index 20140307e57..791bacd636c 100644 --- a/mysql-test/t/mysqltest.test +++ b/mysql-test/t/mysqltest.test @@ -1564,6 +1564,7 @@ write_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp; Content for test_file1 EOF file_exists $MYSQLTEST_VARDIR/tmp/test_file1.tmp; +cat_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp; remove_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp; write_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp END_DELIMITER; From c48a3d7943edd420da6314c389e9501a85331d49 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 8 Aug 2007 16:45:18 +0200 Subject: [PATCH 047/194] Use "create_temp_file" to create a temporary file name for the perl script --- client/mysqltest.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/client/mysqltest.c b/client/mysqltest.c index 541c0cb4394..543dabf52f0 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -2970,8 +2970,10 @@ void do_send_quit(struct st_command *command) void do_perl(struct st_command *command) { int error; - char buf[FN_REFLEN]; + File fd; FILE *res_file; + char buf[FN_REFLEN]; + char temp_file_path[FN_REFLEN]; static DYNAMIC_STRING ds_script; static DYNAMIC_STRING ds_delimiter; const struct command_arg perl_args[] = { @@ -2994,14 +2996,17 @@ void do_perl(struct st_command *command) DBUG_PRINT("info", ("Executing perl: %s", ds_script.str)); - /* Format a name for a tmp .pl file that is unique for this process */ - my_snprintf(buf, sizeof(buf), "%s/tmp/tmp_%d.pl", - getenv("MYSQLTEST_VARDIR"), getpid()); - str_to_file(buf, ds_script.str, ds_script.length); + /* Create temporary file name */ + if ((fd= create_temp_file(temp_file_path, getenv("MYSQLTEST_VARDIR"), + "tmp", O_CREAT | O_SHARE | O_RDWR, + MYF(MY_WME))) < 0) + die("Failed to create temporary file for perl command"); + my_close(fd, MYF(0)); - /* Format the perl command */ - my_snprintf(buf, sizeof(buf), "perl %s/tmp/tmp_%d.pl", - getenv("MYSQLTEST_VARDIR"), getpid()); + str_to_file(temp_file_path, ds_script.str, ds_script.length); + + /* Format the "perl " command */ + my_snprintf(buf, sizeof(buf), "perl %s", temp_file_path); if (!(res_file= popen(buf, "r")) && command->abort_on_error) die("popen(\"%s\", \"r\") failed", buf); @@ -3019,6 +3024,10 @@ void do_perl(struct st_command *command) } } error= pclose(res_file); + + /* Remove the temporary file */ + my_delete(temp_file_path, MYF(0)); + handle_command_error(command, WEXITSTATUS(error)); dynstr_free(&ds_script); dynstr_free(&ds_delimiter); From ddbf9fdc1cc39978add9762f71cd77106e3ce8c4 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 8 Aug 2007 18:03:44 +0200 Subject: [PATCH 048/194] Don't require a space between "if" and "(". This should also fix "while" and "connect" It's now possible to write "if(" client/mysqltest.c: Don't require a space between for example "if" and "(". This should also fix "while" and "connect" mysql-test/t/mysqltest.test: Remove space between if and ( to check it works --- client/mysqltest.c | 8 ++++++-- mysql-test/t/mysqltest.test | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/client/mysqltest.c b/client/mysqltest.c index 543dabf52f0..65e965ef128 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -4814,9 +4814,13 @@ int read_command(struct st_command** command_ptr) if (!(command->query_buf= command->query= my_strdup(p, MYF(MY_WME)))) die("Out of memory"); - /* Calculate first word and first argument */ - for (p= command->query; *p && !my_isspace(charset_info, *p) ; p++) ; + /* Calculate first word length(the command), terminated by space or ( */ + p= command->query; + while (*p && !my_isspace(charset_info, *p) && *p != '(') + p++; command->first_word_len= (uint) (p - command->query); + DBUG_PRINT("info", ("first_word: %.*s", + command->first_word_len, command->query)); /* Skip spaces between command and first argument */ while (*p && my_isspace(charset_info, *p)) diff --git a/mysql-test/t/mysqltest.test b/mysql-test/t/mysqltest.test index 791bacd636c..4f9964552d9 100644 --- a/mysql-test/t/mysqltest.test +++ b/mysql-test/t/mysqltest.test @@ -969,7 +969,7 @@ if (!$counter) echo Counter is not 0, (counter=10); } let $counter=0; -if ($counter) +if($counter) { echo Counter is greater than 0, (counter=0); } From 3250963e7b2f5145bf837d03a1d9ac6cd3cb51c9 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 8 Aug 2007 12:21:04 -0400 Subject: [PATCH 049/194] Correct bad merge, and remove version numbers from test case. mysql-test/r/mysqlbinlog2.result: Change test case to remove server version number. mysql-test/t/mysqlbinlog2.test: Change test case to remove server version number. mysys/mf_iocache2.c: Correcting bad merge. --- mysql-test/r/mysqlbinlog2.result | 2 +- mysql-test/t/mysqlbinlog2.test | 2 +- mysys/mf_iocache2.c | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/mysqlbinlog2.result b/mysql-test/r/mysqlbinlog2.result index bb73ebde777..5347787d829 100644 --- a/mysql-test/r/mysqlbinlog2.result +++ b/mysql-test/r/mysqlbinlog2.result @@ -19,7 +19,7 @@ insert into t1 values(null, "f"); /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; DELIMITER /*!*/; # at {pos} -#{yymmdd} {HH:MM:SS} server id 1 end_log_pos {pos} Start: binlog v 4, server v 5.1.18-beta-debug-log created {yymmdd} {HH:MM:SS} at startup +#{yymmdd} {HH:MM:SS} server id 1 end_log_pos {pos} Start: binlog v #, server v ## created {yymmdd} {HH:MM:SS} at startup ROLLBACK/*!*/; # at {pos} #{yymmdd} {HH:MM:SS} server id 1 end_log_pos {pos} Query thread_id={integer} exec_time={integer} error_code=0 diff --git a/mysql-test/t/mysqlbinlog2.test b/mysql-test/t/mysqlbinlog2.test index fa487662c10..be9397aafee 100644 --- a/mysql-test/t/mysqlbinlog2.test +++ b/mysql-test/t/mysqlbinlog2.test @@ -41,7 +41,7 @@ select "--- Local --" as ""; # be time dependent (the Start events). Better than nothing. # ---replace_regex /[[:<:]][0-9]{6} [0-9 ][0-9]:[0-9]{2}:[0-9]{2}[[:>:]]/{yymmdd} {HH:MM:SS}/ /=[0-9]+ /={integer} / /# at [0-9]+/# at {pos}/ /(pos:?) [0-9]+/\1 {pos}/ +--replace_regex /[[:<:]][0-9]{6} [0-9 ][0-9]:[0-9]{2}:[0-9]{2}[[:>:]]/{yymmdd} {HH:MM:SS}/ /=[0-9]+ /={integer} / /# at [0-9]+/# at {pos}/ /(pos:?) [0-9]+/\1 {pos}/ /binlog v [0-9]+, server v [^ ]* created/binlog v #, server v ## created/ --exec $MYSQL_BINLOG $MYSQLTEST_VARDIR/log/master-bin.000001 --disable_query_log diff --git a/mysys/mf_iocache2.c b/mysys/mf_iocache2.c index 39110445481..c54c7d13548 100644 --- a/mysys/mf_iocache2.c +++ b/mysys/mf_iocache2.c @@ -415,6 +415,7 @@ process_flags: if (*fmt == 'd') length2= (size_t) (int10_to_str((long) iarg,buff, -10) - buff); else + length2= (uint) (int10_to_str((long) (uint) iarg,buff,10)- buff); /* minimum width padding */ if (minimum_width > length2) From 4cfe994ebcc9c9f1ff710694916a1d6b1e22af7f Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 8 Aug 2007 17:16:26 -0700 Subject: [PATCH 050/194] Updated to result files for cluster tests for version 5.1.21 Updared to 'views' test - forcing sort order Updateds included masked results as a result of bug 30322 mysql-test/suite/funcs_1/include/ndb_tb2.inc: Correction to test file creating an ndb table mysql-test/suite/funcs_1/r/innodb_views.result: Updated resut file - forcing order by mysql-test/suite/funcs_1/r/memory_views.result: Updated resut file - forcing order by mysql-test/suite/funcs_1/r/myisam_views.result: Updated resut file - forcing order by mysql-test/suite/funcs_1/r/ndb_cursors.result: updated result file mysql-test/suite/funcs_1/r/ndb_func_view.result: updated result file mysql-test/suite/funcs_1/r/ndb_storedproc_07.result: updated result file mysql-test/suite/funcs_1/r/ndb_storedproc_08.result: updated result file mysql-test/suite/funcs_1/r/ndb_trig_0102.result: updated result file mysql-test/suite/funcs_1/r/ndb_trig_03.result: updated result file mysql-test/suite/funcs_1/r/ndb_trig_03e.result: updated result file mysql-test/suite/funcs_1/r/ndb_trig_0407.result: updated result file mysql-test/suite/funcs_1/r/ndb_trig_08.result: updated result file mysql-test/suite/funcs_1/r/ndb_trig_09.result: updated result file mysql-test/suite/funcs_1/r/ndb_trig_1011ext.result: updated result file mysql-test/suite/funcs_1/r/ndb_views.result: updated result file mysql-test/suite/funcs_1/views/views_master.inc: updated test file - forcing sort order mysql-test/suite/funcs_2/r/ndb_charset.result: Updated result file --- mysql-test/suite/funcs_1/include/ndb_tb2.inc | 2 +- .../suite/funcs_1/r/innodb_views.result | 558 ++++--- .../suite/funcs_1/r/memory_views.result | 558 ++++--- .../suite/funcs_1/r/myisam_views.result | 512 ++++--- mysql-test/suite/funcs_1/r/ndb_cursors.result | 2 +- .../suite/funcs_1/r/ndb_func_view.result | 1334 ++++++++--------- .../suite/funcs_1/r/ndb_storedproc_07.result | 8 +- .../suite/funcs_1/r/ndb_storedproc_08.result | 108 ++ .../suite/funcs_1/r/ndb_trig_0102.result | 4 +- mysql-test/suite/funcs_1/r/ndb_trig_03.result | 2 +- .../suite/funcs_1/r/ndb_trig_03e.result | 26 +- .../suite/funcs_1/r/ndb_trig_0407.result | 2 +- mysql-test/suite/funcs_1/r/ndb_trig_08.result | 7 +- mysql-test/suite/funcs_1/r/ndb_trig_09.result | 2 +- .../suite/funcs_1/r/ndb_trig_1011ext.result | 2 +- mysql-test/suite/funcs_1/r/ndb_views.result | 657 ++++---- .../suite/funcs_1/views/views_master.inc | 136 +- mysql-test/suite/funcs_2/r/ndb_charset.result | 248 +-- 18 files changed, 2068 insertions(+), 2100 deletions(-) diff --git a/mysql-test/suite/funcs_1/include/ndb_tb2.inc b/mysql-test/suite/funcs_1/include/ndb_tb2.inc index 4a59ed7bf2d..3e6efe47e18 100644 --- a/mysql-test/suite/funcs_1/include/ndb_tb2.inc +++ b/mysql-test/suite/funcs_1/include/ndb_tb2.inc @@ -55,7 +55,7 @@ f106 year(3) not null default 2000, f107 year(4) not null default 2000, f108 enum("1enum","2enum") not null default "1enum", f109 set("1set","2set") not null default "1set" -) engine = innodb; +) engine = ndb; --replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR eval load data infile '$MYSQL_TEST_DIR/suite/funcs_1/data/ndb_tb2.txt' into table tb2 ; diff --git a/mysql-test/suite/funcs_1/r/innodb_views.result b/mysql-test/suite/funcs_1/r/innodb_views.result index 13df98d4b08..48a97f80b14 100644 --- a/mysql-test/suite/funcs_1/r/innodb_views.result +++ b/mysql-test/suite/funcs_1/r/innodb_views.result @@ -184,47 +184,47 @@ Insert into t1 values (500,9866); Drop view if exists v1 ; CREATE VIEW v1 AS select f59,f60,f61 FROM test.tb2 where f59=250; -select * FROM v1 limit 0,10; +select * FROM v1 order by f60,f61 limit 0,10; f59 f60 f61 250 87895654 NULL Drop view if exists v1 ; CREATE VIEW v1 AS select f59,f60,f61 FROM test.tb2 limit 100; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59,f60,f61 limit 0,10; f59 f60 f61 1 1 0000000001 2 2 0000000002 3 3 0000000003 4 4 0000000004 +4 74 NULL 5 5 0000000005 6 6 0000000006 7 7 0000000007 8 8 0000000008 9 9 0000000009 -10 10 0000000010 CREATE or REPLACE VIEW v1 AS select f59,f60,f61 FROM test.tb2 limit 4,3; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59,f60,f61 limit 0,10; f59 f60 f61 5 5 0000000005 6 6 0000000006 7 7 0000000007 CREATE or REPLACE VIEW v1 AS select distinct f59 FROM test.tb2 limit 4,3; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 5 6 7 ALTER VIEW v1 AS select f59 FROM test.tb2 limit 6,2; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 7 8 CREATE or REPLACE VIEW v1 AS select f59 from tb2 order by f59 limit 100; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 1 2 @@ -266,7 +266,7 @@ f59 660 CREATE or REPLACE VIEW v1 AS select f59 from tb2 group by f59 limit 100; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 1 2 @@ -280,7 +280,7 @@ f59 10 CREATE or REPLACE VIEW v1 AS select f59 from tb2 group by f59 asc limit 100; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 1 2 @@ -294,21 +294,21 @@ f59 10 CREATE or REPLACE VIEW v1 AS select f59 from tb2 group by f59 desc limit 100; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 -569300 -76710 -9112 -7876 -3410 -3330 -2760 -2550 -987 -660 +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 CREATE or REPLACE VIEW v1 AS (select f59 from tb2) union (select f59 from t1) limit 100; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 1 2 @@ -322,7 +322,7 @@ f59 10 CREATE or REPLACE VIEW v1 AS (select f59 FROM tb2) UNION DISTINCT(select f59 FROM t1) ; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 1 2 @@ -336,103 +336,103 @@ f59 10 CREATE or REPLACE VIEW v1 AS (select f59 FROM tb2) UNION ALL(select f59 FROM t1) ; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 1 2 3 4 +4 5 6 7 8 9 -10 CREATE or REPLACE VIEW v1 AS select * FROM test.tb2 WITH LOCAL CHECK OPTION ; -select * FROM v1 limit 0,50; +select * FROM v1 order by f59,f60,f61,f62,f63,f64 limit 0,50; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 1 1 0000000001 0000000000000000000000000000000000000000000000000000000000000001 0000000001 0000000000000000000000000000000000000000000000000000000000000001 -5 0.000000000000000000000000000000 1 0.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549435e-38 1.17549e-38 1.175494352e-38 01.17549e-38 00000001.175494352e-38 01.17549e-38 00000001.175494352e-38 1000-01-01 838:59:58 1970-01-02 00:00:01 1970-01-02 00:00:01 1902 1902 1902 2enum 2set 2 2 0000000002 0000000000000000000000000000000000000000000000000000000000000002 0000000002 0000000000000000000000000000000000000000000000000000000000000002 -4 1.100000000000000000000000000000 2 1.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494349e-38 1.17549e-38 1.175494353e-38 01.17549e-38 00000001.175494353e-38 01.17549e-38 00000001.175494353e-38 1000-01-02 838:59:57 1970-01-03 00:00:02 1970-01-03 00:00:02 1903 1903 1903 1enum 1set,2set 3 3 0000000003 0000000000000000000000000000000000000000000000000000000000000003 0000000003 0000000000000000000000000000000000000000000000000000000000000003 -3 2.200000000000000000000000000000 3 2.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494348e-38 1.17549e-38 1.175494354e-38 01.17549e-38 00000001.175494354e-38 01.17549e-38 00000001.175494354e-38 1000-01-03 838:59:56 1970-01-04 00:00:03 1970-01-04 00:00:03 1904 1904 1904 2enum 1set 4 4 0000000004 0000000000000000000000000000000000000000000000000000000000000004 0000000004 0000000000000000000000000000000000000000000000000000000000000004 -2 3.300000000000000000000000000000 4 3.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494347e-38 1.17549e-38 1.175494355e-38 01.17549e-38 00000001.175494355e-38 01.17549e-38 00000001.175494355e-38 1000-01-04 838:59:55 1970-01-05 00:00:04 1970-01-05 00:00:04 1905 1905 1905 1enum 2set +4 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 5 5 0000000005 0000000000000000000000000000000000000000000000000000000000000005 0000000005 0000000000000000000000000000000000000000000000000000000000000005 -1 4.400000000000000000000000000000 5 4.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494346e-38 1.17549e-38 1.175494356e-38 01.17549e-38 00000001.175494356e-38 01.17549e-38 00000001.175494356e-38 1000-01-05 838:59:54 1970-01-06 00:00:05 1970-01-06 00:00:05 1906 1906 1906 2enum 1set,2set 6 6 0000000006 0000000000000000000000000000000000000000000000000000000000000006 0000000006 0000000000000000000000000000000000000000000000000000000000000006 0 5.500000000000000000000000000000 6 5.500000000000000000000000000000 0000000006 000000000000000000000000000000005.500000000000000000000000000000 0000000006 000000000000000000000000000000005.500000000000000000000000000000 -1.175494345e-38 1.175494357e-38 00000001.175494357e-38 00000001.175494357e-38 -1.175494345e-38 1.175494357e-38 00000001.175494357e-38 00000001.175494357e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494345e-38 1.17549e-38 1.175494357e-38 01.17549e-38 00000001.175494357e-38 01.17549e-38 00000001.175494357e-38 1000-01-06 838:59:53 1970-01-07 00:00:06 1970-01-07 00:00:06 1907 1907 1907 1enum 1set 7 7 0000000007 0000000000000000000000000000000000000000000000000000000000000007 0000000007 0000000000000000000000000000000000000000000000000000000000000007 1 6.600000000000000000000000000000 7 6.600000000000000000000000000000 0000000007 000000000000000000000000000000006.600000000000000000000000000000 0000000007 000000000000000000000000000000006.600000000000000000000000000000 -1.175494344e-38 1.175494358e-38 00000001.175494358e-38 00000001.175494358e-38 -1.175494344e-38 1.175494358e-38 00000001.175494358e-38 00000001.175494358e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494344e-38 1.17549e-38 1.175494358e-38 01.17549e-38 00000001.175494358e-38 01.17549e-38 00000001.175494358e-38 1000-01-07 838:59:52 1970-01-08 00:00:07 1970-01-08 00:00:07 1908 1908 1908 2enum 2set 8 8 0000000008 0000000000000000000000000000000000000000000000000000000000000008 0000000008 0000000000000000000000000000000000000000000000000000000000000008 2 7.700000000000000000000000000000 8 7.700000000000000000000000000000 0000000008 000000000000000000000000000000007.700000000000000000000000000000 0000000008 000000000000000000000000000000007.700000000000000000000000000000 -1.175494343e-38 1.175494359e-38 00000001.175494359e-38 00000001.175494359e-38 -1.175494343e-38 1.175494359e-38 00000001.175494359e-38 00000001.175494359e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494343e-38 1.17549e-38 1.175494359e-38 01.17549e-38 00000001.175494359e-38 01.17549e-38 00000001.175494359e-38 1000-01-08 838:59:51 1970-01-09 00:00:08 1970-01-09 00:00:08 1909 1909 1909 1enum 1set,2set 9 9 0000000009 0000000000000000000000000000000000000000000000000000000000000009 0000000009 0000000000000000000000000000000000000000000000000000000000000009 3 8.800000000000000000000000000000 9 8.800000000000000000000000000000 0000000009 000000000000000000000000000000008.800000000000000000000000000000 0000000009 000000000000000000000000000000008.800000000000000000000000000000 -1.175494342e-38 1.17549436e-38 000000001.17549436e-38 000000001.17549436e-38 -1.175494342e-38 1.17549436e-38 000000001.17549436e-38 000000001.17549436e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494342e-38 1.17549e-38 1.17549436e-38 01.17549e-38 000000001.17549436e-38 01.17549e-38 000000001.17549436e-38 1000-01-09 838:59:50 1970-01-10 00:00:09 1970-01-10 00:00:09 1910 1910 1910 2enum 1set 10 10 0000000010 0000000000000000000000000000000000000000000000000000000000000010 0000000010 0000000000000000000000000000000000000000000000000000000000000010 4 9.900000000000000000000000000000 10 9.900000000000000000000000000000 0000000010 000000000000000000000000000000009.900000000000000000000000000000 0000000010 000000000000000000000000000000009.900000000000000000000000000000 -1.175494341e-38 1.175494361e-38 00000001.175494361e-38 00000001.175494361e-38 -1.175494341e-38 1.175494361e-38 00000001.175494361e-38 00000001.175494361e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494341e-38 1.17549e-38 1.175494361e-38 01.17549e-38 00000001.175494361e-38 01.17549e-38 00000001.175494361e-38 1000-01-10 838:59:49 1970-01-11 00:00:10 1970-01-11 00:00:10 1911 1911 1911 1enum 2set -76710 226546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -2760 985654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -569300 9114376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -660 876546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -250 87895654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -340 9984376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -3410 996546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -2550 775654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -3330 764376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -441 16546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -24 51654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -323 14376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -34 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -4 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 15 87 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -22 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -394 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -94 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -195 87 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -292 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -987 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -7876 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -321 NULL 0000000765 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -9112 NULL 0000008771 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -107 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -109 108 0000000104 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -207 205 0000000206 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -209 208 0000000204 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -27 25 0000000026 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -29 28 0000000024 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 17 15 0000000016 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 19 18 0000000014 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +22 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +24 51654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +27 25 0000000026 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +29 28 0000000024 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +34 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +94 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +107 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 107 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 109 108 0000000104 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -299 899 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +109 108 0000000104 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +195 87 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +207 205 0000000206 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +209 208 0000000204 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 242 79 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +250 87895654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +292 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +299 899 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +321 NULL 0000000765 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +323 14376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +340 9984376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +394 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 424 89 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +441 16546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +660 876546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +987 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +2550 775654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +2760 985654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +3330 764376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +3410 996546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +7876 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +9112 NULL 0000008771 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +76710 226546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +569300 9114376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set CREATE or REPLACE VIEW v1 AS select * FROM test.tb2 WITH CASCADED CHECK OPTION ; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59,f60,f61,f62,f63,f64 limit 0,10; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 1 1 0000000001 0000000000000000000000000000000000000000000000000000000000000001 0000000001 0000000000000000000000000000000000000000000000000000000000000001 -5 0.000000000000000000000000000000 1 0.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549435e-38 1.17549e-38 1.175494352e-38 01.17549e-38 00000001.175494352e-38 01.17549e-38 00000001.175494352e-38 1000-01-01 838:59:58 1970-01-02 00:00:01 1970-01-02 00:00:01 1902 1902 1902 2enum 2set 2 2 0000000002 0000000000000000000000000000000000000000000000000000000000000002 0000000002 0000000000000000000000000000000000000000000000000000000000000002 -4 1.100000000000000000000000000000 2 1.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494349e-38 1.17549e-38 1.175494353e-38 01.17549e-38 00000001.175494353e-38 01.17549e-38 00000001.175494353e-38 1000-01-02 838:59:57 1970-01-03 00:00:02 1970-01-03 00:00:02 1903 1903 1903 1enum 1set,2set 3 3 0000000003 0000000000000000000000000000000000000000000000000000000000000003 0000000003 0000000000000000000000000000000000000000000000000000000000000003 -3 2.200000000000000000000000000000 3 2.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494348e-38 1.17549e-38 1.175494354e-38 01.17549e-38 00000001.175494354e-38 01.17549e-38 00000001.175494354e-38 1000-01-03 838:59:56 1970-01-04 00:00:03 1970-01-04 00:00:03 1904 1904 1904 2enum 1set 4 4 0000000004 0000000000000000000000000000000000000000000000000000000000000004 0000000004 0000000000000000000000000000000000000000000000000000000000000004 -2 3.300000000000000000000000000000 4 3.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494347e-38 1.17549e-38 1.175494355e-38 01.17549e-38 00000001.175494355e-38 01.17549e-38 00000001.175494355e-38 1000-01-04 838:59:55 1970-01-05 00:00:04 1970-01-05 00:00:04 1905 1905 1905 1enum 2set +4 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 5 5 0000000005 0000000000000000000000000000000000000000000000000000000000000005 0000000005 0000000000000000000000000000000000000000000000000000000000000005 -1 4.400000000000000000000000000000 5 4.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494346e-38 1.17549e-38 1.175494356e-38 01.17549e-38 00000001.175494356e-38 01.17549e-38 00000001.175494356e-38 1000-01-05 838:59:54 1970-01-06 00:00:05 1970-01-06 00:00:05 1906 1906 1906 2enum 1set,2set 6 6 0000000006 0000000000000000000000000000000000000000000000000000000000000006 0000000006 0000000000000000000000000000000000000000000000000000000000000006 0 5.500000000000000000000000000000 6 5.500000000000000000000000000000 0000000006 000000000000000000000000000000005.500000000000000000000000000000 0000000006 000000000000000000000000000000005.500000000000000000000000000000 -1.175494345e-38 1.175494357e-38 00000001.175494357e-38 00000001.175494357e-38 -1.175494345e-38 1.175494357e-38 00000001.175494357e-38 00000001.175494357e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494345e-38 1.17549e-38 1.175494357e-38 01.17549e-38 00000001.175494357e-38 01.17549e-38 00000001.175494357e-38 1000-01-06 838:59:53 1970-01-07 00:00:06 1970-01-07 00:00:06 1907 1907 1907 1enum 1set 7 7 0000000007 0000000000000000000000000000000000000000000000000000000000000007 0000000007 0000000000000000000000000000000000000000000000000000000000000007 1 6.600000000000000000000000000000 7 6.600000000000000000000000000000 0000000007 000000000000000000000000000000006.600000000000000000000000000000 0000000007 000000000000000000000000000000006.600000000000000000000000000000 -1.175494344e-38 1.175494358e-38 00000001.175494358e-38 00000001.175494358e-38 -1.175494344e-38 1.175494358e-38 00000001.175494358e-38 00000001.175494358e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494344e-38 1.17549e-38 1.175494358e-38 01.17549e-38 00000001.175494358e-38 01.17549e-38 00000001.175494358e-38 1000-01-07 838:59:52 1970-01-08 00:00:07 1970-01-08 00:00:07 1908 1908 1908 2enum 2set 8 8 0000000008 0000000000000000000000000000000000000000000000000000000000000008 0000000008 0000000000000000000000000000000000000000000000000000000000000008 2 7.700000000000000000000000000000 8 7.700000000000000000000000000000 0000000008 000000000000000000000000000000007.700000000000000000000000000000 0000000008 000000000000000000000000000000007.700000000000000000000000000000 -1.175494343e-38 1.175494359e-38 00000001.175494359e-38 00000001.175494359e-38 -1.175494343e-38 1.175494359e-38 00000001.175494359e-38 00000001.175494359e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494343e-38 1.17549e-38 1.175494359e-38 01.17549e-38 00000001.175494359e-38 01.17549e-38 00000001.175494359e-38 1000-01-08 838:59:51 1970-01-09 00:00:08 1970-01-09 00:00:08 1909 1909 1909 1enum 1set,2set 9 9 0000000009 0000000000000000000000000000000000000000000000000000000000000009 0000000009 0000000000000000000000000000000000000000000000000000000000000009 3 8.800000000000000000000000000000 9 8.800000000000000000000000000000 0000000009 000000000000000000000000000000008.800000000000000000000000000000 0000000009 000000000000000000000000000000008.800000000000000000000000000000 -1.175494342e-38 1.17549436e-38 000000001.17549436e-38 000000001.17549436e-38 -1.175494342e-38 1.17549436e-38 000000001.17549436e-38 000000001.17549436e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494342e-38 1.17549e-38 1.17549436e-38 01.17549e-38 000000001.17549436e-38 01.17549e-38 000000001.17549436e-38 1000-01-09 838:59:50 1970-01-10 00:00:09 1970-01-10 00:00:09 1910 1910 1910 2enum 1set -10 10 0000000010 0000000000000000000000000000000000000000000000000000000000000010 0000000010 0000000000000000000000000000000000000000000000000000000000000010 4 9.900000000000000000000000000000 10 9.900000000000000000000000000000 0000000010 000000000000000000000000000000009.900000000000000000000000000000 0000000010 000000000000000000000000000000009.900000000000000000000000000000 -1.175494341e-38 1.175494361e-38 00000001.175494361e-38 00000001.175494361e-38 -1.175494341e-38 1.175494361e-38 00000001.175494361e-38 00000001.175494361e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494341e-38 1.17549e-38 1.175494361e-38 01.17549e-38 00000001.175494361e-38 01.17549e-38 00000001.175494361e-38 1000-01-10 838:59:49 1970-01-11 00:00:10 1970-01-11 00:00:10 1911 1911 1911 1enum 2set CREATE OR REPLACE VIEW v1 AS SELECT F59, F60 FROM test.tb2 WITH CASCADED CHECK OPTION; -SELECT * FROM v1 limit 0,10; +SELECT * FROM v1 order by f59,f60 limit 0,10; F59 F60 1 1 2 2 3 3 4 4 +4 74 5 5 6 6 7 7 8 8 9 9 -10 10 CREATE or REPLACE VIEW v1 AS select f59, f60 from test.tb2 where f59=3330 ; -select * FROM v1 limit 0,10; +select * FROM v1 order by f60 limit 0,10; f59 f60 3330 764376 DROP VIEW v1 ; @@ -876,11 +876,11 @@ v1 CREATE ALGORITHM=TEMPTABLE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI SELECT * FROM test.v1; f1 1 -CREATE OR REPLACE VIEW test.v1 AS SELECT * FROM tb2 limit 2; +CREATE OR REPLACE VIEW test.v1 AS SELECT * FROM tb2 order by f59 limit 2; SHOW CREATE VIEW test.v1; View Create View character_set_client collation_connection -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `tb2`.`f59` AS `f59`,`tb2`.`f60` AS `f60`,`tb2`.`f61` AS `f61`,`tb2`.`f62` AS `f62`,`tb2`.`f63` AS `f63`,`tb2`.`f64` AS `f64`,`tb2`.`f65` AS `f65`,`tb2`.`f66` AS `f66`,`tb2`.`f67` AS `f67`,`tb2`.`f68` AS `f68`,`tb2`.`f69` AS `f69`,`tb2`.`f70` AS `f70`,`tb2`.`f71` AS `f71`,`tb2`.`f72` AS `f72`,`tb2`.`f73` AS `f73`,`tb2`.`f74` AS `f74`,`tb2`.`f75` AS `f75`,`tb2`.`f76` AS `f76`,`tb2`.`f77` AS `f77`,`tb2`.`f78` AS `f78`,`tb2`.`f79` AS `f79`,`tb2`.`f80` AS `f80`,`tb2`.`f81` AS `f81`,`tb2`.`f82` AS `f82`,`tb2`.`f83` AS `f83`,`tb2`.`f84` AS `f84`,`tb2`.`f85` AS `f85`,`tb2`.`f86` AS `f86`,`tb2`.`f87` AS `f87`,`tb2`.`f88` AS `f88`,`tb2`.`f89` AS `f89`,`tb2`.`f90` AS `f90`,`tb2`.`f91` AS `f91`,`tb2`.`f92` AS `f92`,`tb2`.`f93` AS `f93`,`tb2`.`f94` AS `f94`,`tb2`.`f95` AS `f95`,`tb2`.`f96` AS `f96`,`tb2`.`f97` AS `f97`,`tb2`.`f98` AS `f98`,`tb2`.`f99` AS `f99`,`tb2`.`f100` AS `f100`,`tb2`.`f101` AS `f101`,`tb2`.`f102` AS `f102`,`tb2`.`f103` AS `f103`,`tb2`.`f104` AS `f104`,`tb2`.`f105` AS `f105`,`tb2`.`f106` AS `f106`,`tb2`.`f107` AS `f107`,`tb2`.`f108` AS `f108`,`tb2`.`f109` AS `f109` from `tb2` limit 2 latin1 latin1_swedish_ci -SELECT * FROM test.v1 ; +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `tb2`.`f59` AS `f59`,`tb2`.`f60` AS `f60`,`tb2`.`f61` AS `f61`,`tb2`.`f62` AS `f62`,`tb2`.`f63` AS `f63`,`tb2`.`f64` AS `f64`,`tb2`.`f65` AS `f65`,`tb2`.`f66` AS `f66`,`tb2`.`f67` AS `f67`,`tb2`.`f68` AS `f68`,`tb2`.`f69` AS `f69`,`tb2`.`f70` AS `f70`,`tb2`.`f71` AS `f71`,`tb2`.`f72` AS `f72`,`tb2`.`f73` AS `f73`,`tb2`.`f74` AS `f74`,`tb2`.`f75` AS `f75`,`tb2`.`f76` AS `f76`,`tb2`.`f77` AS `f77`,`tb2`.`f78` AS `f78`,`tb2`.`f79` AS `f79`,`tb2`.`f80` AS `f80`,`tb2`.`f81` AS `f81`,`tb2`.`f82` AS `f82`,`tb2`.`f83` AS `f83`,`tb2`.`f84` AS `f84`,`tb2`.`f85` AS `f85`,`tb2`.`f86` AS `f86`,`tb2`.`f87` AS `f87`,`tb2`.`f88` AS `f88`,`tb2`.`f89` AS `f89`,`tb2`.`f90` AS `f90`,`tb2`.`f91` AS `f91`,`tb2`.`f92` AS `f92`,`tb2`.`f93` AS `f93`,`tb2`.`f94` AS `f94`,`tb2`.`f95` AS `f95`,`tb2`.`f96` AS `f96`,`tb2`.`f97` AS `f97`,`tb2`.`f98` AS `f98`,`tb2`.`f99` AS `f99`,`tb2`.`f100` AS `f100`,`tb2`.`f101` AS `f101`,`tb2`.`f102` AS `f102`,`tb2`.`f103` AS `f103`,`tb2`.`f104` AS `f104`,`tb2`.`f105` AS `f105`,`tb2`.`f106` AS `f106`,`tb2`.`f107` AS `f107`,`tb2`.`f108` AS `f108`,`tb2`.`f109` AS `f109` from `tb2` order by `tb2`.`f59` limit 2 latin1 latin1_swedish_ci +SELECT * FROM test.v1 order by f59,f60,f61,f62,f63,f64,f65; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 1 1 0000000001 0000000000000000000000000000000000000000000000000000000000000001 0000000001 0000000000000000000000000000000000000000000000000000000000000001 -5 0.000000000000000000000000000000 1 0.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549435e-38 1.17549e-38 1.175494352e-38 01.17549e-38 00000001.175494352e-38 01.17549e-38 00000001.175494352e-38 1000-01-01 838:59:58 1970-01-02 00:00:01 1970-01-02 00:00:01 1902 1902 1902 2enum 2set 2 2 0000000002 0000000000000000000000000000000000000000000000000000000000000002 0000000002 0000000000000000000000000000000000000000000000000000000000000002 -4 1.100000000000000000000000000000 2 1.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494349e-38 1.17549e-38 1.175494353e-38 01.17549e-38 00000001.175494353e-38 01.17549e-38 00000001.175494353e-38 1000-01-02 838:59:57 1970-01-03 00:00:02 1970-01-03 00:00:02 1903 1903 1903 1enum 1set,2set @@ -888,48 +888,48 @@ CREATE OR REPLACE VIEW test.v1 AS SELECT F59 FROM tb2 limit 10,100; SHOW CREATE VIEW test.v1; View Create View character_set_client collation_connection v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `tb2`.`f59` AS `F59` from `tb2` limit 10,100 latin1 latin1_swedish_ci -SELECT * FROM test.v1; +SELECT * FROM test.v1 order by F59; F59 -76710 -2760 -569300 -660 -250 -340 -3410 -2550 -3330 -441 -24 -323 -34 4 15 -22 -394 -94 -195 -292 -987 -7876 -321 -9112 -500 -500 -500 -107 -109 -207 -209 -27 -29 17 19 +22 +24 +27 +29 +34 +94 +107 107 109 -299 +109 +195 +207 +209 242 +250 +292 +299 +321 +323 +340 +394 424 +441 +500 +500 +500 +660 +987 +2550 +2760 +3330 +3410 +7876 +9112 +76710 +569300 Drop table test.t1 ; Drop view test.v1 ; @@ -1081,7 +1081,7 @@ Testcase 3.3.1.21 -------------------------------------------------------------------------------- DROP VIEW IF EXISTS v1; CREATE VIEW test.v1( F59, F60 ) AS SELECT F59, F60 From tb2 LIMIT 2; -SELECT * FROM test.v1; +SELECT * FROM test.v1 order by F59, F60 desc; F59 F60 1 1 2 2 @@ -1190,7 +1190,7 @@ DROP VIEW IF EXISTS test.v1; Drop VIEW IF EXISTS test.v1_1 ; Create view test.v1 AS Select * from test.tb2 limit 2 ; Create view test.v1_1 AS Select F59 from test.v1 ; -Select * from test.v1_1 limit 20 ; +Select * from test.v1_1 order by F59 limit 20 ; F59 1 2 @@ -1204,58 +1204,58 @@ create database test2 ; Create view test2.v2 AS Select * from test.tb2 limit 50,50; use test2 ; Create view v1 AS Select * from test.tb2 limit 50 ; -Select * from v1 ; +Select * from v1 order by f59,f60,f61,f62,f63,f64,f65; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 1 1 0000000001 0000000000000000000000000000000000000000000000000000000000000001 0000000001 0000000000000000000000000000000000000000000000000000000000000001 -5 0.000000000000000000000000000000 1 0.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549435e-38 1.17549e-38 1.175494352e-38 01.17549e-38 00000001.175494352e-38 01.17549e-38 00000001.175494352e-38 1000-01-01 838:59:58 1970-01-02 00:00:01 1970-01-02 00:00:01 1902 1902 1902 2enum 2set 2 2 0000000002 0000000000000000000000000000000000000000000000000000000000000002 0000000002 0000000000000000000000000000000000000000000000000000000000000002 -4 1.100000000000000000000000000000 2 1.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494349e-38 1.17549e-38 1.175494353e-38 01.17549e-38 00000001.175494353e-38 01.17549e-38 00000001.175494353e-38 1000-01-02 838:59:57 1970-01-03 00:00:02 1970-01-03 00:00:02 1903 1903 1903 1enum 1set,2set 3 3 0000000003 0000000000000000000000000000000000000000000000000000000000000003 0000000003 0000000000000000000000000000000000000000000000000000000000000003 -3 2.200000000000000000000000000000 3 2.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494348e-38 1.17549e-38 1.175494354e-38 01.17549e-38 00000001.175494354e-38 01.17549e-38 00000001.175494354e-38 1000-01-03 838:59:56 1970-01-04 00:00:03 1970-01-04 00:00:03 1904 1904 1904 2enum 1set 4 4 0000000004 0000000000000000000000000000000000000000000000000000000000000004 0000000004 0000000000000000000000000000000000000000000000000000000000000004 -2 3.300000000000000000000000000000 4 3.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494347e-38 1.17549e-38 1.175494355e-38 01.17549e-38 00000001.175494355e-38 01.17549e-38 00000001.175494355e-38 1000-01-04 838:59:55 1970-01-05 00:00:04 1970-01-05 00:00:04 1905 1905 1905 1enum 2set +4 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 5 5 0000000005 0000000000000000000000000000000000000000000000000000000000000005 0000000005 0000000000000000000000000000000000000000000000000000000000000005 -1 4.400000000000000000000000000000 5 4.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494346e-38 1.17549e-38 1.175494356e-38 01.17549e-38 00000001.175494356e-38 01.17549e-38 00000001.175494356e-38 1000-01-05 838:59:54 1970-01-06 00:00:05 1970-01-06 00:00:05 1906 1906 1906 2enum 1set,2set 6 6 0000000006 0000000000000000000000000000000000000000000000000000000000000006 0000000006 0000000000000000000000000000000000000000000000000000000000000006 0 5.500000000000000000000000000000 6 5.500000000000000000000000000000 0000000006 000000000000000000000000000000005.500000000000000000000000000000 0000000006 000000000000000000000000000000005.500000000000000000000000000000 -1.175494345e-38 1.175494357e-38 00000001.175494357e-38 00000001.175494357e-38 -1.175494345e-38 1.175494357e-38 00000001.175494357e-38 00000001.175494357e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494345e-38 1.17549e-38 1.175494357e-38 01.17549e-38 00000001.175494357e-38 01.17549e-38 00000001.175494357e-38 1000-01-06 838:59:53 1970-01-07 00:00:06 1970-01-07 00:00:06 1907 1907 1907 1enum 1set 7 7 0000000007 0000000000000000000000000000000000000000000000000000000000000007 0000000007 0000000000000000000000000000000000000000000000000000000000000007 1 6.600000000000000000000000000000 7 6.600000000000000000000000000000 0000000007 000000000000000000000000000000006.600000000000000000000000000000 0000000007 000000000000000000000000000000006.600000000000000000000000000000 -1.175494344e-38 1.175494358e-38 00000001.175494358e-38 00000001.175494358e-38 -1.175494344e-38 1.175494358e-38 00000001.175494358e-38 00000001.175494358e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494344e-38 1.17549e-38 1.175494358e-38 01.17549e-38 00000001.175494358e-38 01.17549e-38 00000001.175494358e-38 1000-01-07 838:59:52 1970-01-08 00:00:07 1970-01-08 00:00:07 1908 1908 1908 2enum 2set 8 8 0000000008 0000000000000000000000000000000000000000000000000000000000000008 0000000008 0000000000000000000000000000000000000000000000000000000000000008 2 7.700000000000000000000000000000 8 7.700000000000000000000000000000 0000000008 000000000000000000000000000000007.700000000000000000000000000000 0000000008 000000000000000000000000000000007.700000000000000000000000000000 -1.175494343e-38 1.175494359e-38 00000001.175494359e-38 00000001.175494359e-38 -1.175494343e-38 1.175494359e-38 00000001.175494359e-38 00000001.175494359e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494343e-38 1.17549e-38 1.175494359e-38 01.17549e-38 00000001.175494359e-38 01.17549e-38 00000001.175494359e-38 1000-01-08 838:59:51 1970-01-09 00:00:08 1970-01-09 00:00:08 1909 1909 1909 1enum 1set,2set 9 9 0000000009 0000000000000000000000000000000000000000000000000000000000000009 0000000009 0000000000000000000000000000000000000000000000000000000000000009 3 8.800000000000000000000000000000 9 8.800000000000000000000000000000 0000000009 000000000000000000000000000000008.800000000000000000000000000000 0000000009 000000000000000000000000000000008.800000000000000000000000000000 -1.175494342e-38 1.17549436e-38 000000001.17549436e-38 000000001.17549436e-38 -1.175494342e-38 1.17549436e-38 000000001.17549436e-38 000000001.17549436e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494342e-38 1.17549e-38 1.17549436e-38 01.17549e-38 000000001.17549436e-38 01.17549e-38 000000001.17549436e-38 1000-01-09 838:59:50 1970-01-10 00:00:09 1970-01-10 00:00:09 1910 1910 1910 2enum 1set 10 10 0000000010 0000000000000000000000000000000000000000000000000000000000000010 0000000010 0000000000000000000000000000000000000000000000000000000000000010 4 9.900000000000000000000000000000 10 9.900000000000000000000000000000 0000000010 000000000000000000000000000000009.900000000000000000000000000000 0000000010 000000000000000000000000000000009.900000000000000000000000000000 -1.175494341e-38 1.175494361e-38 00000001.175494361e-38 00000001.175494361e-38 -1.175494341e-38 1.175494361e-38 00000001.175494361e-38 00000001.175494361e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494341e-38 1.17549e-38 1.175494361e-38 01.17549e-38 00000001.175494361e-38 01.17549e-38 00000001.175494361e-38 1000-01-10 838:59:49 1970-01-11 00:00:10 1970-01-11 00:00:10 1911 1911 1911 1enum 2set -76710 226546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -2760 985654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -569300 9114376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -660 876546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -250 87895654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -340 9984376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -3410 996546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -2550 775654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -3330 764376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -441 16546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -24 51654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -323 14376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -34 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -4 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 15 87 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -22 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -394 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -94 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -195 87 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -292 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -987 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -7876 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -321 NULL 0000000765 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -9112 NULL 0000008771 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -107 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -109 108 0000000104 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -207 205 0000000206 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -209 208 0000000204 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -27 25 0000000026 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -29 28 0000000024 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 17 15 0000000016 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 19 18 0000000014 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +22 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +24 51654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +27 25 0000000026 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +29 28 0000000024 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +34 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +94 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +107 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 107 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 109 108 0000000104 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -299 899 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +109 108 0000000104 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +195 87 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +207 205 0000000206 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +209 208 0000000204 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 242 79 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +250 87895654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +292 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +299 899 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +321 NULL 0000000765 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +323 14376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +340 9984376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +394 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 424 89 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +441 16546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +660 876546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +987 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +2550 775654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +2760 985654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +3330 764376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +3410 996546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +7876 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +9112 NULL 0000008771 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +76710 226546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +569300 9114376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set Select * from test2.v2 ; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 Drop view if exists test2.v1 ; @@ -1318,18 +1318,18 @@ CREATE VIEW test.v1 AS SELECT test.v1_firstview.f59, test.v1_firstview.f60 FROM test.v1_firstview INNER JOIN test.v1_secondview ON test.v1_firstview.f59 = test.v1_secondview.f59 ; -SELECT * FROM test.v1 limit 0,10; +SELECT * FROM test.v1 order by f59,f60 limit 0,10; f59 f60 1 1 2 2 3 3 4 4 +4 4 +4 74 4 74 5 5 6 6 7 7 -8 8 -9 9 Drop view if exists test.v1_firstview ; Drop view if exists test.v1_secondview ; Drop view if exists test.v1 ; @@ -1347,18 +1347,18 @@ CREATE VIEW v1 AS SELECT test.v1_firstview.F59, test.v1_firstview.F60 FROM test.v1_firstview INNER JOIN test.v1_secondview ON test.v1_firstview.f59 = test.v1_secondview.f59 ; -SELECT * FROM v1 limit 0,10; +SELECT * FROM v1 order by f59,f60 limit 0,10; F59 F60 1 1 2 2 3 3 4 4 +4 4 +4 74 4 74 5 5 6 6 7 7 -8 8 -9 9 Drop view v1 ; Drop view test.v1_firstview ; Drop view test.v1_secondview ; @@ -1373,18 +1373,18 @@ CREATE VIEW test.v1 AS SELECT test.v1_firstview.f59, test.v1_firstview.f60 FROM test.v1_firstview INNER JOIN test.tb2 ON test.v1_firstview.f59 = test.tb2.f59; -SELECT * FROM test.v1 limit 0,10; +SELECT * FROM test.v1 order by f59,f60 limit 0,10; f59 f60 1 1 2 2 3 3 4 4 +4 4 +4 74 4 74 5 5 6 6 7 7 -8 8 -9 9 Drop view test.v1 ; Drop view test.v1_firstview; @@ -1397,18 +1397,18 @@ CREATE VIEW v1_firstview AS SELECT * FROM test.tb2 ; CREATE VIEW v1 AS SELECT v1_firstview.f59, v1_firstview.f60 FROM v1_firstview INNER JOIN test.tb2 ON v1_firstview.f59 = test.tb2.f59 ; -SELECT * FROM v1 limit 0,10; +SELECT * FROM v1 order by f59,f60 limit 0,10; f59 f60 1 1 2 2 3 3 4 4 +4 4 +4 74 4 74 5 5 6 6 7 7 -8 8 -9 9 Drop database test2 ; Testcase 3.3.1.37 @@ -1420,18 +1420,18 @@ Drop view if exists test.v1_1 ; Drop view if exists test.v1_1 ; Drop view if exists test.v1_main ; Create view test.v1 as Select f59, f60 FROM test.tb2; -Select * from test.v1 limit 0,10; +Select * from test.v1 order by f59,f60 limit 0,10; f59 f60 1 1 2 2 3 3 4 4 +4 74 5 5 6 6 7 7 8 8 9 9 -10 10 Create table t1(f59 int, f60 int); Insert into t1 values (90,507) ; Create view v1_1 as Select f59,f60 from t1 ; @@ -1441,18 +1441,18 @@ f59 f60 Create view v1_main as SELECT test.tb2.f59 FROM test.tb2 JOIN test.v1 ON test.tb2.f59 = test.v1.f59; -Select * from v1_main limit 0,10; +Select * from v1_main order by f59 limit 0,10; f59 1 2 3 4 4 +4 +4 5 6 7 -8 -9 Drop table t1; Drop view test.v1 ; Drop view test.v1_1 ; @@ -1738,7 +1738,7 @@ Drop view if exists test.v1_main; Drop view if exists test1.v1_1 ; Drop database if exists test3 ; Create view test.v1 as Select f59, f60 FROM test.tb2 limit 20 ; -Select * from test.v1 ; +Select * from test.v1 order by f59,f60; f59 f60 1 1 2 2 @@ -1750,16 +1750,16 @@ f59 f60 8 8 9 9 10 10 -76710 226546 -2760 985654 -569300 9114376 -660 876546 250 87895654 340 9984376 -3410 996546 -2550 775654 -3330 764376 441 16546 +660 876546 +2550 775654 +2760 985654 +3330 764376 +3410 996546 +76710 226546 +569300 9114376 Create table test1.t1 (f59 int,f60 int) ; Insert into test1.t1 values (199,507) ; Create view test1.v1_1 as Select f59,f60 from test1.t1 ; @@ -1792,7 +1792,7 @@ Drop view if exists test.v1 ; CREATE VIEW test.v1 AS Select f59 from (Select * FROM tb2 limit 20) tx ; ERROR HY000: View's SELECT contains a subquery in the FROM clause -SELECT * FROM test.v1 ; +SELECT * FROM test.v1 order by f59 ; ERROR 42S02: Table 'test.v1' doesn't exist Drop view if exists test.v1 ; @@ -1873,7 +1873,7 @@ CREATE VIEW test.v1 AS SELECT * FROM test.tb2 where f59 = 04; UPDATE test.v1 SET f59 = 30 where F59 = 04 ; affected rows: 2 info: Rows matched: 2 Changed: 2 Warnings: 0 -SELECT * FROM test.v1 where f59 = 30 ; +SELECT * FROM test.v1 where f59 = 30 order by f59; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 SELECT * FROM test.tb2 where f59 = 30 ; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 @@ -1886,7 +1886,7 @@ SELECT * FROM tb2 where f59 = 100 ; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 100 4 0000000004 0000000000000000000000000000000000000000000000000000000000000004 0000000004 0000000000000000000000000000000000000000000000000000000000000004 -2 3.300000000000000000000000000000 4 3.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494347e-38 1.17549e-38 1.175494355e-38 01.17549e-38 00000001.175494355e-38 01.17549e-38 00000001.175494355e-38 1000-01-04 838:59:55 1970-01-05 00:00:04 1970-01-05 00:00:04 1905 1905 1905 1enum 2set 100 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -SELECT * FROM test.v1 ; +SELECT * FROM test.v1 order by f59 ; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 drop view if exists test.v1 ; Drop TABLE IF EXISTS test.t1 ; @@ -1962,7 +1962,7 @@ CREATE VIEW test.v1 AS SELECT f59,f60 FROM test.tb2 where f59 = 195 WITH CHECK OPTION ; UPDATE test.v1 SET f59 = 198 where f59=195 ; ERROR HY000: CHECK OPTION failed 'test.v1' -SELECT * FROM test.v1 ; +SELECT * FROM test.v1 order by f59 ; f59 f60 195 87 drop view if exists test.v1 ; @@ -1976,7 +1976,7 @@ FROM test.tb2 where F59 = 0987 WITH LOCAL CHECK OPTION ; CREATE VIEW test.v2 as SELECT * FROM test.v1 ; UPDATE test.v1 SET F59 = 919 where f59 = 0987 ; ERROR HY000: CHECK OPTION failed 'test.v1' -SELECT * FROM test.v1 ; +SELECT * FROM test.v1 order by f59 ; f59 f60 987 41 UPDATE test.v2 SET F59 = 9879 where f59 = 919 ; @@ -9671,115 +9671,115 @@ Testcase 3.3.1.50 - 3.3.1.53 -------------------------------------------------------------------------------- DROP VIEW IF EXISTS test.v1; CREATE VIEW test.v1 AS SELECT * FROM test.tb2 limit 5 ; -SELECT * FROM test.v1 ; +SELECT * FROM test.v1 order by f59 ; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 1 1 0000000001 0000000000000000000000000000000000000000000000000000000000000001 0000000001 0000000000000000000000000000000000000000000000000000000000000001 -5 0.000000000000000000000000000000 1 0.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549435e-38 1.17549e-38 1.175494352e-38 01.17549e-38 00000001.175494352e-38 01.17549e-38 00000001.175494352e-38 1000-01-01 838:59:58 1970-01-02 00:00:01 1970-01-02 00:00:01 1902 1902 1902 2enum 2set 2 2 0000000002 0000000000000000000000000000000000000000000000000000000000000002 0000000002 0000000000000000000000000000000000000000000000000000000000000002 -4 1.100000000000000000000000000000 2 1.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494349e-38 1.17549e-38 1.175494353e-38 01.17549e-38 00000001.175494353e-38 01.17549e-38 00000001.175494353e-38 1000-01-02 838:59:57 1970-01-03 00:00:02 1970-01-03 00:00:02 1903 1903 1903 1enum 1set,2set 3 3 0000000003 0000000000000000000000000000000000000000000000000000000000000003 0000000003 0000000000000000000000000000000000000000000000000000000000000003 -3 2.200000000000000000000000000000 3 2.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494348e-38 1.17549e-38 1.175494354e-38 01.17549e-38 00000001.175494354e-38 01.17549e-38 00000001.175494354e-38 1000-01-03 838:59:56 1970-01-04 00:00:03 1970-01-04 00:00:03 1904 1904 1904 2enum 1set -100 4 0000000004 0000000000000000000000000000000000000000000000000000000000000004 0000000004 0000000000000000000000000000000000000000000000000000000000000004 -2 3.300000000000000000000000000000 4 3.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494347e-38 1.17549e-38 1.175494355e-38 01.17549e-38 00000001.175494355e-38 01.17549e-38 00000001.175494355e-38 1000-01-04 838:59:55 1970-01-05 00:00:04 1970-01-05 00:00:04 1905 1905 1905 1enum 2set 5 5 0000000005 0000000000000000000000000000000000000000000000000000000000000005 0000000005 0000000000000000000000000000000000000000000000000000000000000005 -1 4.400000000000000000000000000000 5 4.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494346e-38 1.17549e-38 1.175494356e-38 01.17549e-38 00000001.175494356e-38 01.17549e-38 00000001.175494356e-38 1000-01-05 838:59:54 1970-01-06 00:00:05 1970-01-06 00:00:05 1906 1906 1906 2enum 1set,2set +100 4 0000000004 0000000000000000000000000000000000000000000000000000000000000004 0000000004 0000000000000000000000000000000000000000000000000000000000000004 -2 3.300000000000000000000000000000 4 3.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494347e-38 1.17549e-38 1.175494355e-38 01.17549e-38 00000001.175494355e-38 01.17549e-38 00000001.175494355e-38 1000-01-04 838:59:55 1970-01-05 00:00:04 1970-01-05 00:00:04 1905 1905 1905 1enum 2set drop view test.v1 ; CREATE VIEW test.v1 AS SELECT F59,F61 FROM test.tb2 limit 50 ; -SELECT * FROM test.v1 ; +SELECT * FROM test.v1 order by F59, F61 ; F59 F61 1 0000000001 2 0000000002 3 0000000003 -100 0000000004 5 0000000005 6 0000000006 7 0000000007 8 0000000008 9 0000000009 10 0000000010 -76710 NULL -2760 NULL -569300 NULL -660 NULL -250 NULL -340 NULL -3410 NULL -2550 NULL -3330 NULL -441 NULL -24 NULL -323 NULL -34 NULL -100 NULL 15 NULL -22 NULL -394 NULL -94 NULL -195 NULL -292 NULL -987 NULL -7876 NULL -321 0000000765 -9112 0000008771 -500 0000000900 -500 0000000900 -500 0000000900 -107 0000000106 -109 0000000104 -207 0000000206 -209 0000000204 -27 0000000026 -29 0000000024 17 0000000016 19 0000000014 +22 NULL +24 NULL +27 0000000026 +29 0000000024 +34 NULL +94 NULL +100 NULL +100 0000000004 +107 0000000106 107 0000000106 109 0000000104 -299 NULL +109 0000000104 +195 NULL +207 0000000206 +209 0000000204 242 NULL +250 NULL +292 NULL +299 NULL +321 0000000765 +323 NULL +340 NULL +394 NULL 424 NULL +441 NULL +500 0000000900 +500 0000000900 +500 0000000900 +660 NULL +987 NULL +2550 NULL +2760 NULL +3330 NULL +3410 NULL +7876 NULL +9112 0000008771 +76710 NULL +569300 NULL drop view test.v1 ; -CREATE VIEW test.v1 AS SELECT * FROM test.tb2 limit 20 ; -SELECT * FROM test.v1; +CREATE VIEW test.v1 AS SELECT * FROM test.tb2 order by f59, f60, f61 limit 20 ; +SELECT * FROM test.v1 order by f59,f60,f61 ; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 1 1 0000000001 0000000000000000000000000000000000000000000000000000000000000001 0000000001 0000000000000000000000000000000000000000000000000000000000000001 -5 0.000000000000000000000000000000 1 0.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549435e-38 1.17549e-38 1.175494352e-38 01.17549e-38 00000001.175494352e-38 01.17549e-38 00000001.175494352e-38 1000-01-01 838:59:58 1970-01-02 00:00:01 1970-01-02 00:00:01 1902 1902 1902 2enum 2set 2 2 0000000002 0000000000000000000000000000000000000000000000000000000000000002 0000000002 0000000000000000000000000000000000000000000000000000000000000002 -4 1.100000000000000000000000000000 2 1.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494349e-38 1.17549e-38 1.175494353e-38 01.17549e-38 00000001.175494353e-38 01.17549e-38 00000001.175494353e-38 1000-01-02 838:59:57 1970-01-03 00:00:02 1970-01-03 00:00:02 1903 1903 1903 1enum 1set,2set 3 3 0000000003 0000000000000000000000000000000000000000000000000000000000000003 0000000003 0000000000000000000000000000000000000000000000000000000000000003 -3 2.200000000000000000000000000000 3 2.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494348e-38 1.17549e-38 1.175494354e-38 01.17549e-38 00000001.175494354e-38 01.17549e-38 00000001.175494354e-38 1000-01-03 838:59:56 1970-01-04 00:00:03 1970-01-04 00:00:03 1904 1904 1904 2enum 1set -100 4 0000000004 0000000000000000000000000000000000000000000000000000000000000004 0000000004 0000000000000000000000000000000000000000000000000000000000000004 -2 3.300000000000000000000000000000 4 3.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494347e-38 1.17549e-38 1.175494355e-38 01.17549e-38 00000001.175494355e-38 01.17549e-38 00000001.175494355e-38 1000-01-04 838:59:55 1970-01-05 00:00:04 1970-01-05 00:00:04 1905 1905 1905 1enum 2set 5 5 0000000005 0000000000000000000000000000000000000000000000000000000000000005 0000000005 0000000000000000000000000000000000000000000000000000000000000005 -1 4.400000000000000000000000000000 5 4.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494346e-38 1.17549e-38 1.175494356e-38 01.17549e-38 00000001.175494356e-38 01.17549e-38 00000001.175494356e-38 1000-01-05 838:59:54 1970-01-06 00:00:05 1970-01-06 00:00:05 1906 1906 1906 2enum 1set,2set 6 6 0000000006 0000000000000000000000000000000000000000000000000000000000000006 0000000006 0000000000000000000000000000000000000000000000000000000000000006 0 5.500000000000000000000000000000 6 5.500000000000000000000000000000 0000000006 000000000000000000000000000000005.500000000000000000000000000000 0000000006 000000000000000000000000000000005.500000000000000000000000000000 -1.175494345e-38 1.175494357e-38 00000001.175494357e-38 00000001.175494357e-38 -1.175494345e-38 1.175494357e-38 00000001.175494357e-38 00000001.175494357e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494345e-38 1.17549e-38 1.175494357e-38 01.17549e-38 00000001.175494357e-38 01.17549e-38 00000001.175494357e-38 1000-01-06 838:59:53 1970-01-07 00:00:06 1970-01-07 00:00:06 1907 1907 1907 1enum 1set 7 7 0000000007 0000000000000000000000000000000000000000000000000000000000000007 0000000007 0000000000000000000000000000000000000000000000000000000000000007 1 6.600000000000000000000000000000 7 6.600000000000000000000000000000 0000000007 000000000000000000000000000000006.600000000000000000000000000000 0000000007 000000000000000000000000000000006.600000000000000000000000000000 -1.175494344e-38 1.175494358e-38 00000001.175494358e-38 00000001.175494358e-38 -1.175494344e-38 1.175494358e-38 00000001.175494358e-38 00000001.175494358e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494344e-38 1.17549e-38 1.175494358e-38 01.17549e-38 00000001.175494358e-38 01.17549e-38 00000001.175494358e-38 1000-01-07 838:59:52 1970-01-08 00:00:07 1970-01-08 00:00:07 1908 1908 1908 2enum 2set 8 8 0000000008 0000000000000000000000000000000000000000000000000000000000000008 0000000008 0000000000000000000000000000000000000000000000000000000000000008 2 7.700000000000000000000000000000 8 7.700000000000000000000000000000 0000000008 000000000000000000000000000000007.700000000000000000000000000000 0000000008 000000000000000000000000000000007.700000000000000000000000000000 -1.175494343e-38 1.175494359e-38 00000001.175494359e-38 00000001.175494359e-38 -1.175494343e-38 1.175494359e-38 00000001.175494359e-38 00000001.175494359e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494343e-38 1.17549e-38 1.175494359e-38 01.17549e-38 00000001.175494359e-38 01.17549e-38 00000001.175494359e-38 1000-01-08 838:59:51 1970-01-09 00:00:08 1970-01-09 00:00:08 1909 1909 1909 1enum 1set,2set 9 9 0000000009 0000000000000000000000000000000000000000000000000000000000000009 0000000009 0000000000000000000000000000000000000000000000000000000000000009 3 8.800000000000000000000000000000 9 8.800000000000000000000000000000 0000000009 000000000000000000000000000000008.800000000000000000000000000000 0000000009 000000000000000000000000000000008.800000000000000000000000000000 -1.175494342e-38 1.17549436e-38 000000001.17549436e-38 000000001.17549436e-38 -1.175494342e-38 1.17549436e-38 000000001.17549436e-38 000000001.17549436e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494342e-38 1.17549e-38 1.17549436e-38 01.17549e-38 000000001.17549436e-38 01.17549e-38 000000001.17549436e-38 1000-01-09 838:59:50 1970-01-10 00:00:09 1970-01-10 00:00:09 1910 1910 1910 2enum 1set 10 10 0000000010 0000000000000000000000000000000000000000000000000000000000000010 0000000010 0000000000000000000000000000000000000000000000000000000000000010 4 9.900000000000000000000000000000 10 9.900000000000000000000000000000 0000000010 000000000000000000000000000000009.900000000000000000000000000000 0000000010 000000000000000000000000000000009.900000000000000000000000000000 -1.175494341e-38 1.175494361e-38 00000001.175494361e-38 00000001.175494361e-38 -1.175494341e-38 1.175494361e-38 00000001.175494361e-38 00000001.175494361e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494341e-38 1.17549e-38 1.175494361e-38 01.17549e-38 00000001.175494361e-38 01.17549e-38 00000001.175494361e-38 1000-01-10 838:59:49 1970-01-11 00:00:10 1970-01-11 00:00:10 1911 1911 1911 1enum 2set -76710 226546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -2760 985654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -569300 9114376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -660 876546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -250 87895654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -340 9984376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -3410 996546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -2550 775654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -3330 764376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -441 16546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +15 87 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +17 15 0000000016 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +19 18 0000000014 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +22 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +24 51654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +27 25 0000000026 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +29 28 0000000024 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +34 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +94 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +100 4 0000000004 0000000000000000000000000000000000000000000000000000000000000004 0000000004 0000000000000000000000000000000000000000000000000000000000000004 -2 3.300000000000000000000000000000 4 3.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494347e-38 1.17549e-38 1.175494355e-38 01.17549e-38 00000001.175494355e-38 01.17549e-38 00000001.175494355e-38 1000-01-04 838:59:55 1970-01-05 00:00:04 1970-01-05 00:00:04 1905 1905 1905 1enum 2set +100 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set drop view test.v1 ; CREATE VIEW test.v1 AS SELECT F59,f61 FROM test.tb2 limit 20 ; -SELECT * FROM test.v1 limit 50; +SELECT * FROM test.v1 order by f59,f61 desc limit 50; F59 f61 1 0000000001 2 0000000002 3 0000000003 -100 0000000004 5 0000000005 6 0000000006 7 0000000007 8 0000000008 9 0000000009 10 0000000010 -76710 NULL -2760 NULL -569300 NULL -660 NULL +100 0000000004 250 NULL 340 NULL -3410 NULL -2550 NULL -3330 NULL 441 NULL +660 NULL +2550 NULL +2760 NULL +3330 NULL +3410 NULL +76710 NULL +569300 NULL drop view test.v1 ; Testcase 3.3.1.54 @@ -9798,7 +9798,7 @@ Insert into t2 values (2,2000) ; Insert into t2 values (31,97) ; Create view test.v1 as select t1.f59, t1.f60 from t1,t2 where t1.f59=t2.f59 ; -Select * from test.v1 limit 50 ; +Select * from test.v1 order by f59 limit 50 ; f59 f60 1 10 2 20 @@ -9864,7 +9864,7 @@ create or replace view test.v1 as Select t1.f59 t1_f59, t2.f59 t2_f59, t1.f60 t1_f60, t2.f60 t2_f60, t1.f61 t1_f61, t2.f61 t2_f61 from t1 inner join t2 where t1.f59 = t2.f59 ; -select * from test.v1; +select * from test.v1 order by t1_f59 ; t1_f59 t2_f59 t1_f60 t2_f60 t1_f61 t2_f61 2 2 double double 6 6 3 3 single-f3 single-f3 4 6 @@ -9877,7 +9877,7 @@ t1_f59 t2_f59 t1_f60 t2_f60 t1_f61 t2_f61 Create or replace view test.v1 as Select t1.f59 AS t1_f59, t2.f59 AS t2_f59 FROM t2 cross join t1; -Select * from v1; +Select * from v1 order by t1_f59,t2_f59; t1_f59 t2_f59 1 2 1 3 @@ -9903,7 +9903,7 @@ t1_f59 t2_f59 Create or replace view test.v1 as Select straight_join t1.f59 AS t1_f59, t2.f59 AS t2_f59 FROM t2,t1; -Select * from v1; +Select * from v1 order by t1_f59,t2_f59; t1_f59 t2_f59 1 2 1 3 @@ -9929,7 +9929,7 @@ t1_f59 t2_f59 Create or replace view test.v1 as Select f59, f60, f61, a, b FROM t2 natural join t1; -Select * from v1; +Select * from v1 order by f59; f59 f60 f61 a b 2 double 6 2 2 Select f59, f60, f61, a, b @@ -9940,11 +9940,11 @@ Create or replace view test.v1 as Select t1.f59 t1_f59, t2.f59 t2_f59, t1.f60 t1_f60, t2.f60 t2_f60, t1.f61 t1_f61, t2.f61 t2_f61 FROM t2 left outer join t1 on t2.f59=t1.f59; -Select * from v1; +Select * from v1 order by t1_f59; t1_f59 t2_f59 t1_f60 t2_f60 t1_f61 t2_f61 +NULL 4 NULL single NULL 4 2 2 double double 6 6 3 3 single-f3 single-f3 4 6 -NULL 4 NULL single NULL 4 Select t1.f59 t1_f59, t2.f59 t2_f59, t1.f60 t1_f60, t2.f60 t2_f60, t1.f61 t1_f61, t2.f61 t2_f61 FROM t2 left outer join t1 on t2.f59=t1.f59; @@ -9955,7 +9955,7 @@ NULL 4 NULL single NULL 4 Create or replace view test.v1 as Select f59, f60, f61, t1.a, t2.b FROM t2 natural left outer join t1; -Select * from v1; +Select * from v1 order by f59; f59 f60 f61 a b 2 double 6 2 2 3 single-f3 6 NULL 3 @@ -9970,7 +9970,7 @@ Create or replace view test.v1 as Select t1.f59 t1_f59, t2.f59 t2_f59, t1.f60 t1_f60, t2.f60 t2_f60, t1.f61 t1_f61, t2.f61 t2_f61 FROM t2 right outer join t1 on t2.f59=t1.f59; -Select * from v1; +Select * from v1 order by t1_f59; t1_f59 t2_f59 t1_f60 t2_f60 t1_f61 t2_f61 1 NULL single NULL 3 NULL 2 2 double double 6 6 @@ -9985,11 +9985,11 @@ t1_f59 t2_f59 t1_f60 t2_f60 t1_f61 t2_f61 Create or replace view test.v1 as Select f59, f60, a, b FROM t2 natural right outer join t1; -Select * from v1; +Select * from v1 order by f59 desc; f59 f60 a b -1 single 1 NULL -2 double 2 2 3 single-f3 3 NULL +2 double 2 2 +1 single 1 NULL Select f59, f60, a, b FROM t2 natural right outer join t1; f59 f60 a b @@ -10010,18 +10010,18 @@ Insert into t1 values (107,501,601) ; Insert into t1 values (901,801,401) ; Create or replace view test.v1 as Select tb2.f59 FROM tb2 LEFT JOIN t1 on tb2.f59 = t1.f59 ; -Select * from test.v1 limit 0,10; +Select * from test.v1 order by f59 limit 0,10; f59 1 2 3 -100 5 6 7 8 9 10 +15 Drop view if exists test.v1 ; Drop table if exists t1 ; Drop view if exists v1; @@ -10031,7 +10031,7 @@ Insert into t1 values (207,201,201) ; Insert into t1 values (201,201,201) ; Create or replace view test.v1 as Select tb2.f59 FROM tb2 INNER JOIN t1 on tb2.f59 = t1.f59 ; -Select * from test.v1 limit 0,10; +Select * from test.v1 order by f59 limit 0,10; f59 207 Drop view if exists test.v1 ; @@ -10043,7 +10043,7 @@ Insert into t1 values (27,21,21) ; Insert into t1 values (21,21,21) ; Create or replace view test.v1 as Select tb2.f59 FROM tb2 CROSS JOIN t1 on tb2.f59 = t1.f59 ; -Select * from test.v1 limit 0,10; +Select * from test.v1 order by f59 limit 0,10; f59 27 Drop view test.v1 ; @@ -10058,18 +10058,18 @@ Insert into t1 values (17,51,61) ; Insert into t1 values (91,81,41) ; Create or replace view test.v1 as (Select f59 FROM tb2 where f59=17 ) Union ALL (Select f59 from t1 where f59=17 ); -Select * from test.v1 limit 0,10; +Select * from test.v1 order by f59 limit 0,10; f59 17 17 Create or replace view test.v1 as (Select f59 FROM tb2 where f59=17 ) Union (Select f59 from t1 where f59=17 ); -Select * from test.v1 limit 0,10; +Select * from test.v1 order by f59 limit 0,10; f59 17 Create or replace view test.v1 as (Select f59 FROM tb2 where f59=17 ) Union Distinct (Select f59 from t1 where f60=17 ); -Select * from test.v1 limit 0,10; +Select * from test.v1 order by f59 limit 0,10; f59 17 Drop view test.v1 ; @@ -10081,7 +10081,7 @@ insert into t1 values (107,501,601); insert into t1 values (901,801,401); create or replace view test.v1 as select tb2.f59 from tb2 join t1 on tb2.f59 = t1.f59; -select * from test.v1 limit 0,10; +select * from test.v1 order by f59 limit 0,10; f59 107 107 @@ -10089,7 +10089,7 @@ create or replace view test.v1 as (select f59 from tb2 where f59=107 ) union all (select f59 from t1 where f59=107 ); -select * from test.v1 limit 0,10; +select * from test.v1 order by f59 limit 0,10; f59 107 107 @@ -10098,14 +10098,14 @@ create or replace view test.v1 as (select f59 from tb2 where f59=107 ) union (select f59 from t1 where f59=107 ); -select * from test.v1 limit 0,10; +select * from test.v1 order by f59 limit 0,10; f59 107 create or replace view test.v1 as (select f59 from tb2 where f59=107 ) union distinct (select f59 from t1 where f59=107 ); -select * from test.v1 limit 0,10; +select * from test.v1 order by f59 limit 0,10; f59 107 drop view if exists test.v1 ; @@ -10116,13 +10116,13 @@ Testcase 3.3.1.64 Drop view if exists test.v1 ; CREATE VIEW test.v1 AS SELECT F59 FROM test.tb2 where test.tb2.F59 = 109; -SELECT * FROM test.v1 limit 0,10; +SELECT * FROM test.v1 order by f59 limit 0,10; F59 109 109 ALTER VIEW test.v1 AS SELECT * FROM test.tb2 WHERE test.tb2.f59 = 242 ; -SELECT * FROM test.v1 limit 0,10; +SELECT * FROM test.v1 order by f59 limit 0,10; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 242 79 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set Drop view test.v1 ; @@ -10269,15 +10269,13 @@ ERROR HY000: View 'test3.v32' references invalid table(s) or column(s) or functi EXPLAIN SELECT * FROM test3.v32; ERROR HY000: View 'test3.v32' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them -FIXME - Setting join_limit to 30 - hangs for higher values +FIXME - Setting join_limit to 28 - hangs for higher values ---------------------------------------------------------- -SET @join_limit = 30; +SET @join_limit = 28; SET @max_level = @join_limit - 1; DROP DATABASE IF EXISTS test3; DROP TABLE IF EXISTS test1.t1; DROP TABLE IF EXISTS test2.t1; -DROP VIEW IF EXISTS test1.v29; -DROP VIEW IF EXISTS test1.v28; DROP VIEW IF EXISTS test1.v27; DROP VIEW IF EXISTS test1.v26; DROP VIEW IF EXISTS test1.v25; @@ -10384,15 +10382,11 @@ CREATE OR REPLACE VIEW test1.v26 AS SELECT f1, f2 FROM test3.t1 tab1 NATURAL JOIN test1.v25 tab2; CREATE OR REPLACE VIEW test1.v27 AS SELECT f1, f2 FROM test1.t1 tab1 NATURAL JOIN test1.v26 tab2; -CREATE OR REPLACE VIEW test1.v28 AS SELECT f1, f2 -FROM test2.t1 tab1 NATURAL JOIN test1.v27 tab2; -CREATE OR REPLACE VIEW test1.v29 AS SELECT f1, f2 -FROM test3.t1 tab1 NATURAL JOIN test1.v28 tab2; -SHOW CREATE VIEW test1.v29; +SHOW CREATE VIEW test1.v27; View Create View character_set_client collation_connection -v29 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `test1`.`v29` AS select `tab1`.`f1` AS `f1`,`tab1`.`f2` AS `f2` from (`test3`.`t1` `tab1` join `test1`.`v28` `tab2` on(((`tab1`.`f1` = `tab2`.`f1`) and (`tab1`.`f2` = `tab2`.`f2`)))) latin1 latin1_swedish_ci +v27 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `test1`.`v27` AS select `tab1`.`f1` AS `f1`,`tab1`.`f2` AS `f2` from (`test1`.`t1` `tab1` join `test1`.`v26` `tab2` on(((`tab1`.`f1` = `tab2`.`f1`) and (`tab1`.`f2` = `tab2`.`f2`)))) latin1 latin1_swedish_ci SELECT CAST(f1 AS SIGNED INTEGER) AS f1, -CAST(f2 AS CHAR) AS f2 FROM test1.v29; +CAST(f2 AS CHAR) AS f2 FROM test1.v27; f1 f2 5 five @@ -10401,14 +10395,14 @@ differs on some platforms FIXME Is this a bug ? -------------------------------------------------------------------------------- EXPLAIN SELECT CAST(f1 AS SIGNED INTEGER) AS f1, -CAST(f2 AS CHAR) AS f2 FROM test1.v29; -CREATE VIEW test1.v30 AS SELECT f1, f2 -FROM test3.t1 tab1 NATURAL JOIN test1.v29 tab2; -SHOW CREATE VIEW test1.v30; +CAST(f2 AS CHAR) AS f2 FROM test1.v27; +CREATE VIEW test1.v28 AS SELECT f1, f2 +FROM test3.t1 tab1 NATURAL JOIN test1.v27 tab2; +SHOW CREATE VIEW test1.v28; View Create View character_set_client collation_connection -v30 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `test1`.`v30` AS select `tab1`.`f1` AS `f1`,`tab1`.`f2` AS `f2` from (`test3`.`t1` `tab1` join `test1`.`v29` `tab2` on(((`tab1`.`f1` = `tab2`.`f1`) and (`tab1`.`f2` = `tab2`.`f2`)))) latin1 latin1_swedish_ci +v28 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `test1`.`v28` AS select `tab1`.`f1` AS `f1`,`tab1`.`f2` AS `f2` from (`test3`.`t1` `tab1` join `test1`.`v27` `tab2` on(((`tab1`.`f1` = `tab2`.`f1`) and (`tab1`.`f2` = `tab2`.`f2`)))) latin1 latin1_swedish_ci SELECT CAST(f1 AS SIGNED INTEGER) AS f1, -CAST(f2 AS CHAR) AS f2 FROM test1.v30; +CAST(f2 AS CHAR) AS f2 FROM test1.v28; f1 f2 5 five @@ -10417,33 +10411,31 @@ differs on some platforms FIXME Is this a bug ? -------------------------------------------------------------------------------- EXPLAIN SELECT CAST(f1 AS SIGNED INTEGER) AS f1, -CAST(f2 AS CHAR) AS f2 FROM test1.v30; -DROP VIEW IF EXISTS test1.v30; +CAST(f2 AS CHAR) AS f2 FROM test1.v28; +DROP VIEW IF EXISTS test1.v28; CREATE OR REPLACE VIEW test1.v0 AS SELECT f1 as f2, f2 as f1 FROM test2.t1; CREATE OR REPLACE VIEW test2.v0 AS SELECT CAST('0001-01-01' AS DATE) as f1, f2 FROM test3.t1; -SHOW CREATE VIEW test1.v29; +SHOW CREATE VIEW test1.v27; SELECT CAST(f1 AS SIGNED INTEGER) AS f1, -CAST(f2 AS CHAR) AS f2 FROM test1.v29; +CAST(f2 AS CHAR) AS f2 FROM test1.v27; EXPLAIN SELECT CAST(f1 AS SIGNED INTEGER) AS f1, -CAST(f2 AS CHAR) AS f2 FROM test1.v29; +CAST(f2 AS CHAR) AS f2 FROM test1.v27; CREATE OR REPLACE VIEW test3.v0 AS SELECT f1 , CONVERT('ßÄäÖöÜü§' USING UCS2) as f2 FROM test1.t1; -SHOW CREATE VIEW test1.v29; +SHOW CREATE VIEW test1.v27; SELECT CAST(f1 AS SIGNED INTEGER) AS f1, -CAST(f2 AS CHAR) AS f2 FROM test1.v29; +CAST(f2 AS CHAR) AS f2 FROM test1.v27; EXPLAIN SELECT CAST(f1 AS SIGNED INTEGER) AS f1, -CAST(f2 AS CHAR) AS f2 FROM test1.v29; +CAST(f2 AS CHAR) AS f2 FROM test1.v27; CREATE OR REPLACE VIEW test3.v0 AS SELECT CONVERT('ßÄäÖöÜü§' USING UCS2) as f1, f2 FROM test1.t1; -SHOW CREATE VIEW test1.v29; +SHOW CREATE VIEW test1.v27; SELECT CAST(f1 AS SIGNED INTEGER) AS f1, -CAST(f2 AS CHAR) AS f2 FROM test1.v29; +CAST(f2 AS CHAR) AS f2 FROM test1.v27; EXPLAIN SELECT CAST(f1 AS SIGNED INTEGER) AS f1, -CAST(f2 AS CHAR) AS f2 FROM test1.v29; -DROP VIEW IF EXISTS test1.v29; -DROP VIEW IF EXISTS test1.v28; +CAST(f2 AS CHAR) AS f2 FROM test1.v27; DROP VIEW IF EXISTS test1.v27; DROP VIEW IF EXISTS test1.v26; DROP VIEW IF EXISTS test1.v25; @@ -10514,7 +10506,7 @@ info: Rows matched: 1 Changed: 1 Warnings: 0 SELECT * FROM tb2 where f59 = 8 and f60 = 105; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 8 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -SELECT f59,f60 FROM test.v1 where f59 = 8 and f60 = 105; +SELECT f59,f60 FROM test.v1 where f59 = 8 and f60 = 105 ; f59 f60 8 105 Drop view test.v1 ; @@ -10533,7 +10525,7 @@ f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 891 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 891 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 891 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -SELECT f59,f60 FROM test.v1 where f59 = 891 and f60 = 105; +SELECT f59,f60 FROM test.v1 where f59 = 891 and f60 = 105 ; f59 f60 891 105 891 105 @@ -10550,7 +10542,7 @@ DELETE FROM test.v1 where f59 = 789 ; affected rows: 1 SELECT * FROM tb2 where f59 = 789 ; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 -SELECT f59,f60 FROM test.v1 where f59 = 789; +SELECT f59,f60 FROM test.v1 where f59 = 789 order by f60 ; f59 f60 Drop view test.v1 ; @@ -10563,7 +10555,7 @@ DELETE FROM test.v1 where f59 = 711 ; affected rows: 1 SELECT * FROM tb2 where f59 = 711 ; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 -SELECT f59,f60 FROM test.v1 where f59 = 711; +SELECT f59,f60 FROM test.v1 where f59 = 711 order by f60 ; f59 f60 Drop view test.v1 ; diff --git a/mysql-test/suite/funcs_1/r/memory_views.result b/mysql-test/suite/funcs_1/r/memory_views.result index 1e48d273d00..4bc0c4a3fa4 100644 --- a/mysql-test/suite/funcs_1/r/memory_views.result +++ b/mysql-test/suite/funcs_1/r/memory_views.result @@ -188,47 +188,47 @@ Insert into t1 values (500,9866); Drop view if exists v1 ; CREATE VIEW v1 AS select f59,f60,f61 FROM test.tb2 where f59=250; -select * FROM v1 limit 0,10; +select * FROM v1 order by f60,f61 limit 0,10; f59 f60 f61 250 87895654 NULL Drop view if exists v1 ; CREATE VIEW v1 AS select f59,f60,f61 FROM test.tb2 limit 100; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59,f60,f61 limit 0,10; f59 f60 f61 1 1 0000000001 2 2 0000000002 3 3 0000000003 4 4 0000000004 +4 74 NULL 5 5 0000000005 6 6 0000000006 7 7 0000000007 8 8 0000000008 9 9 0000000009 -10 10 0000000010 CREATE or REPLACE VIEW v1 AS select f59,f60,f61 FROM test.tb2 limit 4,3; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59,f60,f61 limit 0,10; f59 f60 f61 5 5 0000000005 6 6 0000000006 7 7 0000000007 CREATE or REPLACE VIEW v1 AS select distinct f59 FROM test.tb2 limit 4,3; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 5 6 7 ALTER VIEW v1 AS select f59 FROM test.tb2 limit 6,2; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 7 8 CREATE or REPLACE VIEW v1 AS select f59 from tb2 order by f59 limit 100; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 1 2 @@ -270,7 +270,7 @@ f59 660 CREATE or REPLACE VIEW v1 AS select f59 from tb2 group by f59 limit 100; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 1 2 @@ -284,7 +284,7 @@ f59 10 CREATE or REPLACE VIEW v1 AS select f59 from tb2 group by f59 asc limit 100; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 1 2 @@ -298,21 +298,21 @@ f59 10 CREATE or REPLACE VIEW v1 AS select f59 from tb2 group by f59 desc limit 100; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 -569300 -76710 -9112 -7876 -3410 -3330 -2760 -2550 -987 -660 +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 CREATE or REPLACE VIEW v1 AS (select f59 from tb2) union (select f59 from t1) limit 100; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 1 2 @@ -326,7 +326,7 @@ f59 10 CREATE or REPLACE VIEW v1 AS (select f59 FROM tb2) UNION DISTINCT(select f59 FROM t1) ; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 1 2 @@ -340,103 +340,103 @@ f59 10 CREATE or REPLACE VIEW v1 AS (select f59 FROM tb2) UNION ALL(select f59 FROM t1) ; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 1 2 3 4 +4 5 6 7 8 9 -10 CREATE or REPLACE VIEW v1 AS select * FROM test.tb2 WITH LOCAL CHECK OPTION ; -select * FROM v1 limit 0,50; +select * FROM v1 order by f59,f60,f61,f62,f63,f64 limit 0,50; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 1 1 0000000001 0000000000000000000000000000000000000000000000000000000000000001 0000000001 0000000000000000000000000000000000000000000000000000000000000001 -5 0.000000000000000000000000000000 1 0.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549435e-38 1.17549e-38 1.175494352e-38 01.17549e-38 00000001.175494352e-38 01.17549e-38 00000001.175494352e-38 1000-01-01 838:59:58 1970-01-02 00:00:01 1970-01-02 00:00:01 1902 1902 1902 2enum 2set 2 2 0000000002 0000000000000000000000000000000000000000000000000000000000000002 0000000002 0000000000000000000000000000000000000000000000000000000000000002 -4 1.100000000000000000000000000000 2 1.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494349e-38 1.17549e-38 1.175494353e-38 01.17549e-38 00000001.175494353e-38 01.17549e-38 00000001.175494353e-38 1000-01-02 838:59:57 1970-01-03 00:00:02 1970-01-03 00:00:02 1903 1903 1903 1enum 1set,2set 3 3 0000000003 0000000000000000000000000000000000000000000000000000000000000003 0000000003 0000000000000000000000000000000000000000000000000000000000000003 -3 2.200000000000000000000000000000 3 2.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494348e-38 1.17549e-38 1.175494354e-38 01.17549e-38 00000001.175494354e-38 01.17549e-38 00000001.175494354e-38 1000-01-03 838:59:56 1970-01-04 00:00:03 1970-01-04 00:00:03 1904 1904 1904 2enum 1set 4 4 0000000004 0000000000000000000000000000000000000000000000000000000000000004 0000000004 0000000000000000000000000000000000000000000000000000000000000004 -2 3.300000000000000000000000000000 4 3.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494347e-38 1.17549e-38 1.175494355e-38 01.17549e-38 00000001.175494355e-38 01.17549e-38 00000001.175494355e-38 1000-01-04 838:59:55 1970-01-05 00:00:04 1970-01-05 00:00:04 1905 1905 1905 1enum 2set +4 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 5 5 0000000005 0000000000000000000000000000000000000000000000000000000000000005 0000000005 0000000000000000000000000000000000000000000000000000000000000005 -1 4.400000000000000000000000000000 5 4.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494346e-38 1.17549e-38 1.175494356e-38 01.17549e-38 00000001.175494356e-38 01.17549e-38 00000001.175494356e-38 1000-01-05 838:59:54 1970-01-06 00:00:05 1970-01-06 00:00:05 1906 1906 1906 2enum 1set,2set 6 6 0000000006 0000000000000000000000000000000000000000000000000000000000000006 0000000006 0000000000000000000000000000000000000000000000000000000000000006 0 5.500000000000000000000000000000 6 5.500000000000000000000000000000 0000000006 000000000000000000000000000000005.500000000000000000000000000000 0000000006 000000000000000000000000000000005.500000000000000000000000000000 -1.175494345e-38 1.175494357e-38 00000001.175494357e-38 00000001.175494357e-38 -1.175494345e-38 1.175494357e-38 00000001.175494357e-38 00000001.175494357e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494345e-38 1.17549e-38 1.175494357e-38 01.17549e-38 00000001.175494357e-38 01.17549e-38 00000001.175494357e-38 1000-01-06 838:59:53 1970-01-07 00:00:06 1970-01-07 00:00:06 1907 1907 1907 1enum 1set 7 7 0000000007 0000000000000000000000000000000000000000000000000000000000000007 0000000007 0000000000000000000000000000000000000000000000000000000000000007 1 6.600000000000000000000000000000 7 6.600000000000000000000000000000 0000000007 000000000000000000000000000000006.600000000000000000000000000000 0000000007 000000000000000000000000000000006.600000000000000000000000000000 -1.175494344e-38 1.175494358e-38 00000001.175494358e-38 00000001.175494358e-38 -1.175494344e-38 1.175494358e-38 00000001.175494358e-38 00000001.175494358e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494344e-38 1.17549e-38 1.175494358e-38 01.17549e-38 00000001.175494358e-38 01.17549e-38 00000001.175494358e-38 1000-01-07 838:59:52 1970-01-08 00:00:07 1970-01-08 00:00:07 1908 1908 1908 2enum 2set 8 8 0000000008 0000000000000000000000000000000000000000000000000000000000000008 0000000008 0000000000000000000000000000000000000000000000000000000000000008 2 7.700000000000000000000000000000 8 7.700000000000000000000000000000 0000000008 000000000000000000000000000000007.700000000000000000000000000000 0000000008 000000000000000000000000000000007.700000000000000000000000000000 -1.175494343e-38 1.175494359e-38 00000001.175494359e-38 00000001.175494359e-38 -1.175494343e-38 1.175494359e-38 00000001.175494359e-38 00000001.175494359e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494343e-38 1.17549e-38 1.175494359e-38 01.17549e-38 00000001.175494359e-38 01.17549e-38 00000001.175494359e-38 1000-01-08 838:59:51 1970-01-09 00:00:08 1970-01-09 00:00:08 1909 1909 1909 1enum 1set,2set 9 9 0000000009 0000000000000000000000000000000000000000000000000000000000000009 0000000009 0000000000000000000000000000000000000000000000000000000000000009 3 8.800000000000000000000000000000 9 8.800000000000000000000000000000 0000000009 000000000000000000000000000000008.800000000000000000000000000000 0000000009 000000000000000000000000000000008.800000000000000000000000000000 -1.175494342e-38 1.17549436e-38 000000001.17549436e-38 000000001.17549436e-38 -1.175494342e-38 1.17549436e-38 000000001.17549436e-38 000000001.17549436e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494342e-38 1.17549e-38 1.17549436e-38 01.17549e-38 000000001.17549436e-38 01.17549e-38 000000001.17549436e-38 1000-01-09 838:59:50 1970-01-10 00:00:09 1970-01-10 00:00:09 1910 1910 1910 2enum 1set 10 10 0000000010 0000000000000000000000000000000000000000000000000000000000000010 0000000010 0000000000000000000000000000000000000000000000000000000000000010 4 9.900000000000000000000000000000 10 9.900000000000000000000000000000 0000000010 000000000000000000000000000000009.900000000000000000000000000000 0000000010 000000000000000000000000000000009.900000000000000000000000000000 -1.175494341e-38 1.175494361e-38 00000001.175494361e-38 00000001.175494361e-38 -1.175494341e-38 1.175494361e-38 00000001.175494361e-38 00000001.175494361e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494341e-38 1.17549e-38 1.175494361e-38 01.17549e-38 00000001.175494361e-38 01.17549e-38 00000001.175494361e-38 1000-01-10 838:59:49 1970-01-11 00:00:10 1970-01-11 00:00:10 1911 1911 1911 1enum 2set -76710 226546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -2760 985654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -569300 9114376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -660 876546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -250 87895654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -340 9984376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -3410 996546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -2550 775654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -3330 764376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -441 16546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -24 51654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -323 14376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -34 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -4 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 15 87 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -22 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -394 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -94 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -195 87 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -292 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -987 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -7876 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -321 NULL 0000000765 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -9112 NULL 0000008771 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -107 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -109 108 0000000104 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -207 205 0000000206 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -209 208 0000000204 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -27 25 0000000026 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -29 28 0000000024 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 17 15 0000000016 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 19 18 0000000014 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +22 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +24 51654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +27 25 0000000026 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +29 28 0000000024 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +34 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +94 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +107 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 107 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 109 108 0000000104 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -299 899 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +109 108 0000000104 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +195 87 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +207 205 0000000206 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +209 208 0000000204 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 242 79 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +250 87895654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +292 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +299 899 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +321 NULL 0000000765 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +323 14376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +340 9984376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +394 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 424 89 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +441 16546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +660 876546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +987 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +2550 775654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +2760 985654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +3330 764376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +3410 996546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +7876 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +9112 NULL 0000008771 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +76710 226546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +569300 9114376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set CREATE or REPLACE VIEW v1 AS select * FROM test.tb2 WITH CASCADED CHECK OPTION ; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59,f60,f61,f62,f63,f64 limit 0,10; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 1 1 0000000001 0000000000000000000000000000000000000000000000000000000000000001 0000000001 0000000000000000000000000000000000000000000000000000000000000001 -5 0.000000000000000000000000000000 1 0.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549435e-38 1.17549e-38 1.175494352e-38 01.17549e-38 00000001.175494352e-38 01.17549e-38 00000001.175494352e-38 1000-01-01 838:59:58 1970-01-02 00:00:01 1970-01-02 00:00:01 1902 1902 1902 2enum 2set 2 2 0000000002 0000000000000000000000000000000000000000000000000000000000000002 0000000002 0000000000000000000000000000000000000000000000000000000000000002 -4 1.100000000000000000000000000000 2 1.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494349e-38 1.17549e-38 1.175494353e-38 01.17549e-38 00000001.175494353e-38 01.17549e-38 00000001.175494353e-38 1000-01-02 838:59:57 1970-01-03 00:00:02 1970-01-03 00:00:02 1903 1903 1903 1enum 1set,2set 3 3 0000000003 0000000000000000000000000000000000000000000000000000000000000003 0000000003 0000000000000000000000000000000000000000000000000000000000000003 -3 2.200000000000000000000000000000 3 2.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494348e-38 1.17549e-38 1.175494354e-38 01.17549e-38 00000001.175494354e-38 01.17549e-38 00000001.175494354e-38 1000-01-03 838:59:56 1970-01-04 00:00:03 1970-01-04 00:00:03 1904 1904 1904 2enum 1set 4 4 0000000004 0000000000000000000000000000000000000000000000000000000000000004 0000000004 0000000000000000000000000000000000000000000000000000000000000004 -2 3.300000000000000000000000000000 4 3.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494347e-38 1.17549e-38 1.175494355e-38 01.17549e-38 00000001.175494355e-38 01.17549e-38 00000001.175494355e-38 1000-01-04 838:59:55 1970-01-05 00:00:04 1970-01-05 00:00:04 1905 1905 1905 1enum 2set +4 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 5 5 0000000005 0000000000000000000000000000000000000000000000000000000000000005 0000000005 0000000000000000000000000000000000000000000000000000000000000005 -1 4.400000000000000000000000000000 5 4.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494346e-38 1.17549e-38 1.175494356e-38 01.17549e-38 00000001.175494356e-38 01.17549e-38 00000001.175494356e-38 1000-01-05 838:59:54 1970-01-06 00:00:05 1970-01-06 00:00:05 1906 1906 1906 2enum 1set,2set 6 6 0000000006 0000000000000000000000000000000000000000000000000000000000000006 0000000006 0000000000000000000000000000000000000000000000000000000000000006 0 5.500000000000000000000000000000 6 5.500000000000000000000000000000 0000000006 000000000000000000000000000000005.500000000000000000000000000000 0000000006 000000000000000000000000000000005.500000000000000000000000000000 -1.175494345e-38 1.175494357e-38 00000001.175494357e-38 00000001.175494357e-38 -1.175494345e-38 1.175494357e-38 00000001.175494357e-38 00000001.175494357e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494345e-38 1.17549e-38 1.175494357e-38 01.17549e-38 00000001.175494357e-38 01.17549e-38 00000001.175494357e-38 1000-01-06 838:59:53 1970-01-07 00:00:06 1970-01-07 00:00:06 1907 1907 1907 1enum 1set 7 7 0000000007 0000000000000000000000000000000000000000000000000000000000000007 0000000007 0000000000000000000000000000000000000000000000000000000000000007 1 6.600000000000000000000000000000 7 6.600000000000000000000000000000 0000000007 000000000000000000000000000000006.600000000000000000000000000000 0000000007 000000000000000000000000000000006.600000000000000000000000000000 -1.175494344e-38 1.175494358e-38 00000001.175494358e-38 00000001.175494358e-38 -1.175494344e-38 1.175494358e-38 00000001.175494358e-38 00000001.175494358e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494344e-38 1.17549e-38 1.175494358e-38 01.17549e-38 00000001.175494358e-38 01.17549e-38 00000001.175494358e-38 1000-01-07 838:59:52 1970-01-08 00:00:07 1970-01-08 00:00:07 1908 1908 1908 2enum 2set 8 8 0000000008 0000000000000000000000000000000000000000000000000000000000000008 0000000008 0000000000000000000000000000000000000000000000000000000000000008 2 7.700000000000000000000000000000 8 7.700000000000000000000000000000 0000000008 000000000000000000000000000000007.700000000000000000000000000000 0000000008 000000000000000000000000000000007.700000000000000000000000000000 -1.175494343e-38 1.175494359e-38 00000001.175494359e-38 00000001.175494359e-38 -1.175494343e-38 1.175494359e-38 00000001.175494359e-38 00000001.175494359e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494343e-38 1.17549e-38 1.175494359e-38 01.17549e-38 00000001.175494359e-38 01.17549e-38 00000001.175494359e-38 1000-01-08 838:59:51 1970-01-09 00:00:08 1970-01-09 00:00:08 1909 1909 1909 1enum 1set,2set 9 9 0000000009 0000000000000000000000000000000000000000000000000000000000000009 0000000009 0000000000000000000000000000000000000000000000000000000000000009 3 8.800000000000000000000000000000 9 8.800000000000000000000000000000 0000000009 000000000000000000000000000000008.800000000000000000000000000000 0000000009 000000000000000000000000000000008.800000000000000000000000000000 -1.175494342e-38 1.17549436e-38 000000001.17549436e-38 000000001.17549436e-38 -1.175494342e-38 1.17549436e-38 000000001.17549436e-38 000000001.17549436e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494342e-38 1.17549e-38 1.17549436e-38 01.17549e-38 000000001.17549436e-38 01.17549e-38 000000001.17549436e-38 1000-01-09 838:59:50 1970-01-10 00:00:09 1970-01-10 00:00:09 1910 1910 1910 2enum 1set -10 10 0000000010 0000000000000000000000000000000000000000000000000000000000000010 0000000010 0000000000000000000000000000000000000000000000000000000000000010 4 9.900000000000000000000000000000 10 9.900000000000000000000000000000 0000000010 000000000000000000000000000000009.900000000000000000000000000000 0000000010 000000000000000000000000000000009.900000000000000000000000000000 -1.175494341e-38 1.175494361e-38 00000001.175494361e-38 00000001.175494361e-38 -1.175494341e-38 1.175494361e-38 00000001.175494361e-38 00000001.175494361e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494341e-38 1.17549e-38 1.175494361e-38 01.17549e-38 00000001.175494361e-38 01.17549e-38 00000001.175494361e-38 1000-01-10 838:59:49 1970-01-11 00:00:10 1970-01-11 00:00:10 1911 1911 1911 1enum 2set CREATE OR REPLACE VIEW v1 AS SELECT F59, F60 FROM test.tb2 WITH CASCADED CHECK OPTION; -SELECT * FROM v1 limit 0,10; +SELECT * FROM v1 order by f59,f60 limit 0,10; F59 F60 1 1 2 2 3 3 4 4 +4 74 5 5 6 6 7 7 8 8 9 9 -10 10 CREATE or REPLACE VIEW v1 AS select f59, f60 from test.tb2 where f59=3330 ; -select * FROM v1 limit 0,10; +select * FROM v1 order by f60 limit 0,10; f59 f60 3330 764376 DROP VIEW v1 ; @@ -880,11 +880,11 @@ v1 CREATE ALGORITHM=TEMPTABLE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI SELECT * FROM test.v1; f1 1 -CREATE OR REPLACE VIEW test.v1 AS SELECT * FROM tb2 limit 2; +CREATE OR REPLACE VIEW test.v1 AS SELECT * FROM tb2 order by f59 limit 2; SHOW CREATE VIEW test.v1; View Create View character_set_client collation_connection -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `tb2`.`f59` AS `f59`,`tb2`.`f60` AS `f60`,`tb2`.`f61` AS `f61`,`tb2`.`f62` AS `f62`,`tb2`.`f63` AS `f63`,`tb2`.`f64` AS `f64`,`tb2`.`f65` AS `f65`,`tb2`.`f66` AS `f66`,`tb2`.`f67` AS `f67`,`tb2`.`f68` AS `f68`,`tb2`.`f69` AS `f69`,`tb2`.`f70` AS `f70`,`tb2`.`f71` AS `f71`,`tb2`.`f72` AS `f72`,`tb2`.`f73` AS `f73`,`tb2`.`f74` AS `f74`,`tb2`.`f75` AS `f75`,`tb2`.`f76` AS `f76`,`tb2`.`f77` AS `f77`,`tb2`.`f78` AS `f78`,`tb2`.`f79` AS `f79`,`tb2`.`f80` AS `f80`,`tb2`.`f81` AS `f81`,`tb2`.`f82` AS `f82`,`tb2`.`f83` AS `f83`,`tb2`.`f84` AS `f84`,`tb2`.`f85` AS `f85`,`tb2`.`f86` AS `f86`,`tb2`.`f87` AS `f87`,`tb2`.`f88` AS `f88`,`tb2`.`f89` AS `f89`,`tb2`.`f90` AS `f90`,`tb2`.`f91` AS `f91`,`tb2`.`f92` AS `f92`,`tb2`.`f93` AS `f93`,`tb2`.`f94` AS `f94`,`tb2`.`f95` AS `f95`,`tb2`.`f96` AS `f96`,`tb2`.`f97` AS `f97`,`tb2`.`f98` AS `f98`,`tb2`.`f99` AS `f99`,`tb2`.`f100` AS `f100`,`tb2`.`f101` AS `f101`,`tb2`.`f102` AS `f102`,`tb2`.`f103` AS `f103`,`tb2`.`f104` AS `f104`,`tb2`.`f105` AS `f105`,`tb2`.`f106` AS `f106`,`tb2`.`f107` AS `f107`,`tb2`.`f108` AS `f108`,`tb2`.`f109` AS `f109` from `tb2` limit 2 latin1 latin1_swedish_ci -SELECT * FROM test.v1 ; +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `tb2`.`f59` AS `f59`,`tb2`.`f60` AS `f60`,`tb2`.`f61` AS `f61`,`tb2`.`f62` AS `f62`,`tb2`.`f63` AS `f63`,`tb2`.`f64` AS `f64`,`tb2`.`f65` AS `f65`,`tb2`.`f66` AS `f66`,`tb2`.`f67` AS `f67`,`tb2`.`f68` AS `f68`,`tb2`.`f69` AS `f69`,`tb2`.`f70` AS `f70`,`tb2`.`f71` AS `f71`,`tb2`.`f72` AS `f72`,`tb2`.`f73` AS `f73`,`tb2`.`f74` AS `f74`,`tb2`.`f75` AS `f75`,`tb2`.`f76` AS `f76`,`tb2`.`f77` AS `f77`,`tb2`.`f78` AS `f78`,`tb2`.`f79` AS `f79`,`tb2`.`f80` AS `f80`,`tb2`.`f81` AS `f81`,`tb2`.`f82` AS `f82`,`tb2`.`f83` AS `f83`,`tb2`.`f84` AS `f84`,`tb2`.`f85` AS `f85`,`tb2`.`f86` AS `f86`,`tb2`.`f87` AS `f87`,`tb2`.`f88` AS `f88`,`tb2`.`f89` AS `f89`,`tb2`.`f90` AS `f90`,`tb2`.`f91` AS `f91`,`tb2`.`f92` AS `f92`,`tb2`.`f93` AS `f93`,`tb2`.`f94` AS `f94`,`tb2`.`f95` AS `f95`,`tb2`.`f96` AS `f96`,`tb2`.`f97` AS `f97`,`tb2`.`f98` AS `f98`,`tb2`.`f99` AS `f99`,`tb2`.`f100` AS `f100`,`tb2`.`f101` AS `f101`,`tb2`.`f102` AS `f102`,`tb2`.`f103` AS `f103`,`tb2`.`f104` AS `f104`,`tb2`.`f105` AS `f105`,`tb2`.`f106` AS `f106`,`tb2`.`f107` AS `f107`,`tb2`.`f108` AS `f108`,`tb2`.`f109` AS `f109` from `tb2` order by `tb2`.`f59` limit 2 latin1 latin1_swedish_ci +SELECT * FROM test.v1 order by f59,f60,f61,f62,f63,f64,f65; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 1 1 0000000001 0000000000000000000000000000000000000000000000000000000000000001 0000000001 0000000000000000000000000000000000000000000000000000000000000001 -5 0.000000000000000000000000000000 1 0.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549435e-38 1.17549e-38 1.175494352e-38 01.17549e-38 00000001.175494352e-38 01.17549e-38 00000001.175494352e-38 1000-01-01 838:59:58 1970-01-02 00:00:01 1970-01-02 00:00:01 1902 1902 1902 2enum 2set 2 2 0000000002 0000000000000000000000000000000000000000000000000000000000000002 0000000002 0000000000000000000000000000000000000000000000000000000000000002 -4 1.100000000000000000000000000000 2 1.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494349e-38 1.17549e-38 1.175494353e-38 01.17549e-38 00000001.175494353e-38 01.17549e-38 00000001.175494353e-38 1000-01-02 838:59:57 1970-01-03 00:00:02 1970-01-03 00:00:02 1903 1903 1903 1enum 1set,2set @@ -892,48 +892,48 @@ CREATE OR REPLACE VIEW test.v1 AS SELECT F59 FROM tb2 limit 10,100; SHOW CREATE VIEW test.v1; View Create View character_set_client collation_connection v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `tb2`.`f59` AS `F59` from `tb2` limit 10,100 latin1 latin1_swedish_ci -SELECT * FROM test.v1; +SELECT * FROM test.v1 order by F59; F59 -76710 -2760 -569300 -660 -250 -340 -3410 -2550 -3330 -441 -24 -323 -34 4 15 -22 -394 -94 -195 -292 -987 -7876 -321 -9112 -500 -500 -500 -107 -109 -207 -209 -27 -29 17 19 +22 +24 +27 +29 +34 +94 +107 107 109 -299 +109 +195 +207 +209 242 +250 +292 +299 +321 +323 +340 +394 424 +441 +500 +500 +500 +660 +987 +2550 +2760 +3330 +3410 +7876 +9112 +76710 +569300 Drop table test.t1 ; Drop view test.v1 ; @@ -1085,7 +1085,7 @@ Testcase 3.3.1.21 -------------------------------------------------------------------------------- DROP VIEW IF EXISTS v1; CREATE VIEW test.v1( F59, F60 ) AS SELECT F59, F60 From tb2 LIMIT 2; -SELECT * FROM test.v1; +SELECT * FROM test.v1 order by F59, F60 desc; F59 F60 1 1 2 2 @@ -1194,7 +1194,7 @@ DROP VIEW IF EXISTS test.v1; Drop VIEW IF EXISTS test.v1_1 ; Create view test.v1 AS Select * from test.tb2 limit 2 ; Create view test.v1_1 AS Select F59 from test.v1 ; -Select * from test.v1_1 limit 20 ; +Select * from test.v1_1 order by F59 limit 20 ; F59 1 2 @@ -1208,58 +1208,58 @@ create database test2 ; Create view test2.v2 AS Select * from test.tb2 limit 50,50; use test2 ; Create view v1 AS Select * from test.tb2 limit 50 ; -Select * from v1 ; +Select * from v1 order by f59,f60,f61,f62,f63,f64,f65; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 1 1 0000000001 0000000000000000000000000000000000000000000000000000000000000001 0000000001 0000000000000000000000000000000000000000000000000000000000000001 -5 0.000000000000000000000000000000 1 0.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549435e-38 1.17549e-38 1.175494352e-38 01.17549e-38 00000001.175494352e-38 01.17549e-38 00000001.175494352e-38 1000-01-01 838:59:58 1970-01-02 00:00:01 1970-01-02 00:00:01 1902 1902 1902 2enum 2set 2 2 0000000002 0000000000000000000000000000000000000000000000000000000000000002 0000000002 0000000000000000000000000000000000000000000000000000000000000002 -4 1.100000000000000000000000000000 2 1.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494349e-38 1.17549e-38 1.175494353e-38 01.17549e-38 00000001.175494353e-38 01.17549e-38 00000001.175494353e-38 1000-01-02 838:59:57 1970-01-03 00:00:02 1970-01-03 00:00:02 1903 1903 1903 1enum 1set,2set 3 3 0000000003 0000000000000000000000000000000000000000000000000000000000000003 0000000003 0000000000000000000000000000000000000000000000000000000000000003 -3 2.200000000000000000000000000000 3 2.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494348e-38 1.17549e-38 1.175494354e-38 01.17549e-38 00000001.175494354e-38 01.17549e-38 00000001.175494354e-38 1000-01-03 838:59:56 1970-01-04 00:00:03 1970-01-04 00:00:03 1904 1904 1904 2enum 1set 4 4 0000000004 0000000000000000000000000000000000000000000000000000000000000004 0000000004 0000000000000000000000000000000000000000000000000000000000000004 -2 3.300000000000000000000000000000 4 3.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494347e-38 1.17549e-38 1.175494355e-38 01.17549e-38 00000001.175494355e-38 01.17549e-38 00000001.175494355e-38 1000-01-04 838:59:55 1970-01-05 00:00:04 1970-01-05 00:00:04 1905 1905 1905 1enum 2set +4 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 5 5 0000000005 0000000000000000000000000000000000000000000000000000000000000005 0000000005 0000000000000000000000000000000000000000000000000000000000000005 -1 4.400000000000000000000000000000 5 4.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494346e-38 1.17549e-38 1.175494356e-38 01.17549e-38 00000001.175494356e-38 01.17549e-38 00000001.175494356e-38 1000-01-05 838:59:54 1970-01-06 00:00:05 1970-01-06 00:00:05 1906 1906 1906 2enum 1set,2set 6 6 0000000006 0000000000000000000000000000000000000000000000000000000000000006 0000000006 0000000000000000000000000000000000000000000000000000000000000006 0 5.500000000000000000000000000000 6 5.500000000000000000000000000000 0000000006 000000000000000000000000000000005.500000000000000000000000000000 0000000006 000000000000000000000000000000005.500000000000000000000000000000 -1.175494345e-38 1.175494357e-38 00000001.175494357e-38 00000001.175494357e-38 -1.175494345e-38 1.175494357e-38 00000001.175494357e-38 00000001.175494357e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494345e-38 1.17549e-38 1.175494357e-38 01.17549e-38 00000001.175494357e-38 01.17549e-38 00000001.175494357e-38 1000-01-06 838:59:53 1970-01-07 00:00:06 1970-01-07 00:00:06 1907 1907 1907 1enum 1set 7 7 0000000007 0000000000000000000000000000000000000000000000000000000000000007 0000000007 0000000000000000000000000000000000000000000000000000000000000007 1 6.600000000000000000000000000000 7 6.600000000000000000000000000000 0000000007 000000000000000000000000000000006.600000000000000000000000000000 0000000007 000000000000000000000000000000006.600000000000000000000000000000 -1.175494344e-38 1.175494358e-38 00000001.175494358e-38 00000001.175494358e-38 -1.175494344e-38 1.175494358e-38 00000001.175494358e-38 00000001.175494358e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494344e-38 1.17549e-38 1.175494358e-38 01.17549e-38 00000001.175494358e-38 01.17549e-38 00000001.175494358e-38 1000-01-07 838:59:52 1970-01-08 00:00:07 1970-01-08 00:00:07 1908 1908 1908 2enum 2set 8 8 0000000008 0000000000000000000000000000000000000000000000000000000000000008 0000000008 0000000000000000000000000000000000000000000000000000000000000008 2 7.700000000000000000000000000000 8 7.700000000000000000000000000000 0000000008 000000000000000000000000000000007.700000000000000000000000000000 0000000008 000000000000000000000000000000007.700000000000000000000000000000 -1.175494343e-38 1.175494359e-38 00000001.175494359e-38 00000001.175494359e-38 -1.175494343e-38 1.175494359e-38 00000001.175494359e-38 00000001.175494359e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494343e-38 1.17549e-38 1.175494359e-38 01.17549e-38 00000001.175494359e-38 01.17549e-38 00000001.175494359e-38 1000-01-08 838:59:51 1970-01-09 00:00:08 1970-01-09 00:00:08 1909 1909 1909 1enum 1set,2set 9 9 0000000009 0000000000000000000000000000000000000000000000000000000000000009 0000000009 0000000000000000000000000000000000000000000000000000000000000009 3 8.800000000000000000000000000000 9 8.800000000000000000000000000000 0000000009 000000000000000000000000000000008.800000000000000000000000000000 0000000009 000000000000000000000000000000008.800000000000000000000000000000 -1.175494342e-38 1.17549436e-38 000000001.17549436e-38 000000001.17549436e-38 -1.175494342e-38 1.17549436e-38 000000001.17549436e-38 000000001.17549436e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494342e-38 1.17549e-38 1.17549436e-38 01.17549e-38 000000001.17549436e-38 01.17549e-38 000000001.17549436e-38 1000-01-09 838:59:50 1970-01-10 00:00:09 1970-01-10 00:00:09 1910 1910 1910 2enum 1set 10 10 0000000010 0000000000000000000000000000000000000000000000000000000000000010 0000000010 0000000000000000000000000000000000000000000000000000000000000010 4 9.900000000000000000000000000000 10 9.900000000000000000000000000000 0000000010 000000000000000000000000000000009.900000000000000000000000000000 0000000010 000000000000000000000000000000009.900000000000000000000000000000 -1.175494341e-38 1.175494361e-38 00000001.175494361e-38 00000001.175494361e-38 -1.175494341e-38 1.175494361e-38 00000001.175494361e-38 00000001.175494361e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494341e-38 1.17549e-38 1.175494361e-38 01.17549e-38 00000001.175494361e-38 01.17549e-38 00000001.175494361e-38 1000-01-10 838:59:49 1970-01-11 00:00:10 1970-01-11 00:00:10 1911 1911 1911 1enum 2set -76710 226546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -2760 985654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -569300 9114376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -660 876546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -250 87895654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -340 9984376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -3410 996546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -2550 775654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -3330 764376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -441 16546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -24 51654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -323 14376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -34 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -4 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 15 87 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -22 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -394 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -94 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -195 87 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -292 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -987 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -7876 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -321 NULL 0000000765 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -9112 NULL 0000008771 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -107 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -109 108 0000000104 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -207 205 0000000206 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -209 208 0000000204 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -27 25 0000000026 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -29 28 0000000024 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 17 15 0000000016 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 19 18 0000000014 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +22 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +24 51654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +27 25 0000000026 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +29 28 0000000024 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +34 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +94 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +107 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 107 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 109 108 0000000104 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -299 899 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +109 108 0000000104 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +195 87 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +207 205 0000000206 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +209 208 0000000204 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 242 79 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +250 87895654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +292 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +299 899 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +321 NULL 0000000765 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +323 14376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +340 9984376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +394 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 424 89 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +441 16546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +660 876546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +987 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +2550 775654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +2760 985654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +3330 764376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +3410 996546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +7876 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +9112 NULL 0000008771 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +76710 226546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +569300 9114376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set Select * from test2.v2 ; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 Drop view if exists test2.v1 ; @@ -1322,18 +1322,18 @@ CREATE VIEW test.v1 AS SELECT test.v1_firstview.f59, test.v1_firstview.f60 FROM test.v1_firstview INNER JOIN test.v1_secondview ON test.v1_firstview.f59 = test.v1_secondview.f59 ; -SELECT * FROM test.v1 limit 0,10; +SELECT * FROM test.v1 order by f59,f60 limit 0,10; f59 f60 1 1 2 2 3 3 4 4 +4 4 +4 74 4 74 5 5 6 6 7 7 -8 8 -9 9 Drop view if exists test.v1_firstview ; Drop view if exists test.v1_secondview ; Drop view if exists test.v1 ; @@ -1351,18 +1351,18 @@ CREATE VIEW v1 AS SELECT test.v1_firstview.F59, test.v1_firstview.F60 FROM test.v1_firstview INNER JOIN test.v1_secondview ON test.v1_firstview.f59 = test.v1_secondview.f59 ; -SELECT * FROM v1 limit 0,10; +SELECT * FROM v1 order by f59,f60 limit 0,10; F59 F60 1 1 2 2 3 3 4 4 +4 4 +4 74 4 74 5 5 6 6 7 7 -8 8 -9 9 Drop view v1 ; Drop view test.v1_firstview ; Drop view test.v1_secondview ; @@ -1377,18 +1377,18 @@ CREATE VIEW test.v1 AS SELECT test.v1_firstview.f59, test.v1_firstview.f60 FROM test.v1_firstview INNER JOIN test.tb2 ON test.v1_firstview.f59 = test.tb2.f59; -SELECT * FROM test.v1 limit 0,10; +SELECT * FROM test.v1 order by f59,f60 limit 0,10; f59 f60 1 1 2 2 3 3 4 4 +4 4 +4 74 4 74 5 5 6 6 7 7 -8 8 -9 9 Drop view test.v1 ; Drop view test.v1_firstview; @@ -1401,18 +1401,18 @@ CREATE VIEW v1_firstview AS SELECT * FROM test.tb2 ; CREATE VIEW v1 AS SELECT v1_firstview.f59, v1_firstview.f60 FROM v1_firstview INNER JOIN test.tb2 ON v1_firstview.f59 = test.tb2.f59 ; -SELECT * FROM v1 limit 0,10; +SELECT * FROM v1 order by f59,f60 limit 0,10; f59 f60 1 1 2 2 3 3 4 4 +4 4 +4 74 4 74 5 5 6 6 7 7 -8 8 -9 9 Drop database test2 ; Testcase 3.3.1.37 @@ -1424,18 +1424,18 @@ Drop view if exists test.v1_1 ; Drop view if exists test.v1_1 ; Drop view if exists test.v1_main ; Create view test.v1 as Select f59, f60 FROM test.tb2; -Select * from test.v1 limit 0,10; +Select * from test.v1 order by f59,f60 limit 0,10; f59 f60 1 1 2 2 3 3 4 4 +4 74 5 5 6 6 7 7 8 8 9 9 -10 10 Create table t1(f59 int, f60 int); Insert into t1 values (90,507) ; Create view v1_1 as Select f59,f60 from t1 ; @@ -1445,18 +1445,18 @@ f59 f60 Create view v1_main as SELECT test.tb2.f59 FROM test.tb2 JOIN test.v1 ON test.tb2.f59 = test.v1.f59; -Select * from v1_main limit 0,10; +Select * from v1_main order by f59 limit 0,10; f59 1 2 3 4 4 +4 +4 5 6 7 -8 -9 Drop table t1; Drop view test.v1 ; Drop view test.v1_1 ; @@ -1742,7 +1742,7 @@ Drop view if exists test.v1_main; Drop view if exists test1.v1_1 ; Drop database if exists test3 ; Create view test.v1 as Select f59, f60 FROM test.tb2 limit 20 ; -Select * from test.v1 ; +Select * from test.v1 order by f59,f60; f59 f60 1 1 2 2 @@ -1754,16 +1754,16 @@ f59 f60 8 8 9 9 10 10 -76710 226546 -2760 985654 -569300 9114376 -660 876546 250 87895654 340 9984376 -3410 996546 -2550 775654 -3330 764376 441 16546 +660 876546 +2550 775654 +2760 985654 +3330 764376 +3410 996546 +76710 226546 +569300 9114376 Create table test1.t1 (f59 int,f60 int) ; Insert into test1.t1 values (199,507) ; Create view test1.v1_1 as Select f59,f60 from test1.t1 ; @@ -1796,7 +1796,7 @@ Drop view if exists test.v1 ; CREATE VIEW test.v1 AS Select f59 from (Select * FROM tb2 limit 20) tx ; ERROR HY000: View's SELECT contains a subquery in the FROM clause -SELECT * FROM test.v1 ; +SELECT * FROM test.v1 order by f59 ; ERROR 42S02: Table 'test.v1' doesn't exist Drop view if exists test.v1 ; @@ -1877,7 +1877,7 @@ CREATE VIEW test.v1 AS SELECT * FROM test.tb2 where f59 = 04; UPDATE test.v1 SET f59 = 30 where F59 = 04 ; affected rows: 2 info: Rows matched: 2 Changed: 2 Warnings: 0 -SELECT * FROM test.v1 where f59 = 30 ; +SELECT * FROM test.v1 where f59 = 30 order by f59; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 SELECT * FROM test.tb2 where f59 = 30 ; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 @@ -1890,7 +1890,7 @@ SELECT * FROM tb2 where f59 = 100 ; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 100 4 0000000004 0000000000000000000000000000000000000000000000000000000000000004 0000000004 0000000000000000000000000000000000000000000000000000000000000004 -2 3.300000000000000000000000000000 4 3.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494347e-38 1.17549e-38 1.175494355e-38 01.17549e-38 00000001.175494355e-38 01.17549e-38 00000001.175494355e-38 1000-01-04 838:59:55 1970-01-05 00:00:04 1970-01-05 00:00:04 1905 1905 1905 1enum 2set 100 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -SELECT * FROM test.v1 ; +SELECT * FROM test.v1 order by f59 ; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 drop view if exists test.v1 ; Drop TABLE IF EXISTS test.t1 ; @@ -1967,7 +1967,7 @@ CREATE VIEW test.v1 AS SELECT f59,f60 FROM test.tb2 where f59 = 195 WITH CHECK OPTION ; UPDATE test.v1 SET f59 = 198 where f59=195 ; ERROR HY000: CHECK OPTION failed 'test.v1' -SELECT * FROM test.v1 ; +SELECT * FROM test.v1 order by f59 ; f59 f60 195 87 drop view if exists test.v1 ; @@ -1981,7 +1981,7 @@ FROM test.tb2 where F59 = 0987 WITH LOCAL CHECK OPTION ; CREATE VIEW test.v2 as SELECT * FROM test.v1 ; UPDATE test.v1 SET F59 = 919 where f59 = 0987 ; ERROR HY000: CHECK OPTION failed 'test.v1' -SELECT * FROM test.v1 ; +SELECT * FROM test.v1 order by f59 ; f59 f60 987 41 UPDATE test.v2 SET F59 = 9879 where f59 = 919 ; @@ -9676,115 +9676,115 @@ Testcase 3.3.1.50 - 3.3.1.53 -------------------------------------------------------------------------------- DROP VIEW IF EXISTS test.v1; CREATE VIEW test.v1 AS SELECT * FROM test.tb2 limit 5 ; -SELECT * FROM test.v1 ; +SELECT * FROM test.v1 order by f59 ; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 1 1 0000000001 0000000000000000000000000000000000000000000000000000000000000001 0000000001 0000000000000000000000000000000000000000000000000000000000000001 -5 0.000000000000000000000000000000 1 0.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549435e-38 1.17549e-38 1.175494352e-38 01.17549e-38 00000001.175494352e-38 01.17549e-38 00000001.175494352e-38 1000-01-01 838:59:58 1970-01-02 00:00:01 1970-01-02 00:00:01 1902 1902 1902 2enum 2set 2 2 0000000002 0000000000000000000000000000000000000000000000000000000000000002 0000000002 0000000000000000000000000000000000000000000000000000000000000002 -4 1.100000000000000000000000000000 2 1.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494349e-38 1.17549e-38 1.175494353e-38 01.17549e-38 00000001.175494353e-38 01.17549e-38 00000001.175494353e-38 1000-01-02 838:59:57 1970-01-03 00:00:02 1970-01-03 00:00:02 1903 1903 1903 1enum 1set,2set 3 3 0000000003 0000000000000000000000000000000000000000000000000000000000000003 0000000003 0000000000000000000000000000000000000000000000000000000000000003 -3 2.200000000000000000000000000000 3 2.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494348e-38 1.17549e-38 1.175494354e-38 01.17549e-38 00000001.175494354e-38 01.17549e-38 00000001.175494354e-38 1000-01-03 838:59:56 1970-01-04 00:00:03 1970-01-04 00:00:03 1904 1904 1904 2enum 1set -100 4 0000000004 0000000000000000000000000000000000000000000000000000000000000004 0000000004 0000000000000000000000000000000000000000000000000000000000000004 -2 3.300000000000000000000000000000 4 3.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494347e-38 1.17549e-38 1.175494355e-38 01.17549e-38 00000001.175494355e-38 01.17549e-38 00000001.175494355e-38 1000-01-04 838:59:55 1970-01-05 00:00:04 1970-01-05 00:00:04 1905 1905 1905 1enum 2set 5 5 0000000005 0000000000000000000000000000000000000000000000000000000000000005 0000000005 0000000000000000000000000000000000000000000000000000000000000005 -1 4.400000000000000000000000000000 5 4.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494346e-38 1.17549e-38 1.175494356e-38 01.17549e-38 00000001.175494356e-38 01.17549e-38 00000001.175494356e-38 1000-01-05 838:59:54 1970-01-06 00:00:05 1970-01-06 00:00:05 1906 1906 1906 2enum 1set,2set +100 4 0000000004 0000000000000000000000000000000000000000000000000000000000000004 0000000004 0000000000000000000000000000000000000000000000000000000000000004 -2 3.300000000000000000000000000000 4 3.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494347e-38 1.17549e-38 1.175494355e-38 01.17549e-38 00000001.175494355e-38 01.17549e-38 00000001.175494355e-38 1000-01-04 838:59:55 1970-01-05 00:00:04 1970-01-05 00:00:04 1905 1905 1905 1enum 2set drop view test.v1 ; CREATE VIEW test.v1 AS SELECT F59,F61 FROM test.tb2 limit 50 ; -SELECT * FROM test.v1 ; +SELECT * FROM test.v1 order by F59, F61 ; F59 F61 1 0000000001 2 0000000002 3 0000000003 -100 0000000004 5 0000000005 6 0000000006 7 0000000007 8 0000000008 9 0000000009 10 0000000010 -76710 NULL -2760 NULL -569300 NULL -660 NULL -250 NULL -340 NULL -3410 NULL -2550 NULL -3330 NULL -441 NULL -24 NULL -323 NULL -34 NULL -100 NULL 15 NULL -22 NULL -394 NULL -94 NULL -195 NULL -292 NULL -987 NULL -7876 NULL -321 0000000765 -9112 0000008771 -500 0000000900 -500 0000000900 -500 0000000900 -107 0000000106 -109 0000000104 -207 0000000206 -209 0000000204 -27 0000000026 -29 0000000024 17 0000000016 19 0000000014 +22 NULL +24 NULL +27 0000000026 +29 0000000024 +34 NULL +94 NULL +100 NULL +100 0000000004 +107 0000000106 107 0000000106 109 0000000104 -299 NULL +109 0000000104 +195 NULL +207 0000000206 +209 0000000204 242 NULL +250 NULL +292 NULL +299 NULL +321 0000000765 +323 NULL +340 NULL +394 NULL 424 NULL +441 NULL +500 0000000900 +500 0000000900 +500 0000000900 +660 NULL +987 NULL +2550 NULL +2760 NULL +3330 NULL +3410 NULL +7876 NULL +9112 0000008771 +76710 NULL +569300 NULL drop view test.v1 ; -CREATE VIEW test.v1 AS SELECT * FROM test.tb2 limit 20 ; -SELECT * FROM test.v1; +CREATE VIEW test.v1 AS SELECT * FROM test.tb2 order by f59, f60, f61 limit 20 ; +SELECT * FROM test.v1 order by f59,f60,f61 ; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 1 1 0000000001 0000000000000000000000000000000000000000000000000000000000000001 0000000001 0000000000000000000000000000000000000000000000000000000000000001 -5 0.000000000000000000000000000000 1 0.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549435e-38 1.17549e-38 1.175494352e-38 01.17549e-38 00000001.175494352e-38 01.17549e-38 00000001.175494352e-38 1000-01-01 838:59:58 1970-01-02 00:00:01 1970-01-02 00:00:01 1902 1902 1902 2enum 2set 2 2 0000000002 0000000000000000000000000000000000000000000000000000000000000002 0000000002 0000000000000000000000000000000000000000000000000000000000000002 -4 1.100000000000000000000000000000 2 1.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494349e-38 1.17549e-38 1.175494353e-38 01.17549e-38 00000001.175494353e-38 01.17549e-38 00000001.175494353e-38 1000-01-02 838:59:57 1970-01-03 00:00:02 1970-01-03 00:00:02 1903 1903 1903 1enum 1set,2set 3 3 0000000003 0000000000000000000000000000000000000000000000000000000000000003 0000000003 0000000000000000000000000000000000000000000000000000000000000003 -3 2.200000000000000000000000000000 3 2.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494348e-38 1.17549e-38 1.175494354e-38 01.17549e-38 00000001.175494354e-38 01.17549e-38 00000001.175494354e-38 1000-01-03 838:59:56 1970-01-04 00:00:03 1970-01-04 00:00:03 1904 1904 1904 2enum 1set -100 4 0000000004 0000000000000000000000000000000000000000000000000000000000000004 0000000004 0000000000000000000000000000000000000000000000000000000000000004 -2 3.300000000000000000000000000000 4 3.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494347e-38 1.17549e-38 1.175494355e-38 01.17549e-38 00000001.175494355e-38 01.17549e-38 00000001.175494355e-38 1000-01-04 838:59:55 1970-01-05 00:00:04 1970-01-05 00:00:04 1905 1905 1905 1enum 2set 5 5 0000000005 0000000000000000000000000000000000000000000000000000000000000005 0000000005 0000000000000000000000000000000000000000000000000000000000000005 -1 4.400000000000000000000000000000 5 4.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494346e-38 1.17549e-38 1.175494356e-38 01.17549e-38 00000001.175494356e-38 01.17549e-38 00000001.175494356e-38 1000-01-05 838:59:54 1970-01-06 00:00:05 1970-01-06 00:00:05 1906 1906 1906 2enum 1set,2set 6 6 0000000006 0000000000000000000000000000000000000000000000000000000000000006 0000000006 0000000000000000000000000000000000000000000000000000000000000006 0 5.500000000000000000000000000000 6 5.500000000000000000000000000000 0000000006 000000000000000000000000000000005.500000000000000000000000000000 0000000006 000000000000000000000000000000005.500000000000000000000000000000 -1.175494345e-38 1.175494357e-38 00000001.175494357e-38 00000001.175494357e-38 -1.175494345e-38 1.175494357e-38 00000001.175494357e-38 00000001.175494357e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494345e-38 1.17549e-38 1.175494357e-38 01.17549e-38 00000001.175494357e-38 01.17549e-38 00000001.175494357e-38 1000-01-06 838:59:53 1970-01-07 00:00:06 1970-01-07 00:00:06 1907 1907 1907 1enum 1set 7 7 0000000007 0000000000000000000000000000000000000000000000000000000000000007 0000000007 0000000000000000000000000000000000000000000000000000000000000007 1 6.600000000000000000000000000000 7 6.600000000000000000000000000000 0000000007 000000000000000000000000000000006.600000000000000000000000000000 0000000007 000000000000000000000000000000006.600000000000000000000000000000 -1.175494344e-38 1.175494358e-38 00000001.175494358e-38 00000001.175494358e-38 -1.175494344e-38 1.175494358e-38 00000001.175494358e-38 00000001.175494358e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494344e-38 1.17549e-38 1.175494358e-38 01.17549e-38 00000001.175494358e-38 01.17549e-38 00000001.175494358e-38 1000-01-07 838:59:52 1970-01-08 00:00:07 1970-01-08 00:00:07 1908 1908 1908 2enum 2set 8 8 0000000008 0000000000000000000000000000000000000000000000000000000000000008 0000000008 0000000000000000000000000000000000000000000000000000000000000008 2 7.700000000000000000000000000000 8 7.700000000000000000000000000000 0000000008 000000000000000000000000000000007.700000000000000000000000000000 0000000008 000000000000000000000000000000007.700000000000000000000000000000 -1.175494343e-38 1.175494359e-38 00000001.175494359e-38 00000001.175494359e-38 -1.175494343e-38 1.175494359e-38 00000001.175494359e-38 00000001.175494359e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494343e-38 1.17549e-38 1.175494359e-38 01.17549e-38 00000001.175494359e-38 01.17549e-38 00000001.175494359e-38 1000-01-08 838:59:51 1970-01-09 00:00:08 1970-01-09 00:00:08 1909 1909 1909 1enum 1set,2set 9 9 0000000009 0000000000000000000000000000000000000000000000000000000000000009 0000000009 0000000000000000000000000000000000000000000000000000000000000009 3 8.800000000000000000000000000000 9 8.800000000000000000000000000000 0000000009 000000000000000000000000000000008.800000000000000000000000000000 0000000009 000000000000000000000000000000008.800000000000000000000000000000 -1.175494342e-38 1.17549436e-38 000000001.17549436e-38 000000001.17549436e-38 -1.175494342e-38 1.17549436e-38 000000001.17549436e-38 000000001.17549436e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494342e-38 1.17549e-38 1.17549436e-38 01.17549e-38 000000001.17549436e-38 01.17549e-38 000000001.17549436e-38 1000-01-09 838:59:50 1970-01-10 00:00:09 1970-01-10 00:00:09 1910 1910 1910 2enum 1set 10 10 0000000010 0000000000000000000000000000000000000000000000000000000000000010 0000000010 0000000000000000000000000000000000000000000000000000000000000010 4 9.900000000000000000000000000000 10 9.900000000000000000000000000000 0000000010 000000000000000000000000000000009.900000000000000000000000000000 0000000010 000000000000000000000000000000009.900000000000000000000000000000 -1.175494341e-38 1.175494361e-38 00000001.175494361e-38 00000001.175494361e-38 -1.175494341e-38 1.175494361e-38 00000001.175494361e-38 00000001.175494361e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494341e-38 1.17549e-38 1.175494361e-38 01.17549e-38 00000001.175494361e-38 01.17549e-38 00000001.175494361e-38 1000-01-10 838:59:49 1970-01-11 00:00:10 1970-01-11 00:00:10 1911 1911 1911 1enum 2set -76710 226546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -2760 985654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -569300 9114376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -660 876546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -250 87895654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -340 9984376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -3410 996546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -2550 775654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -3330 764376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -441 16546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +15 87 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +17 15 0000000016 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +19 18 0000000014 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +22 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +24 51654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +27 25 0000000026 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +29 28 0000000024 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +34 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +94 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +100 4 0000000004 0000000000000000000000000000000000000000000000000000000000000004 0000000004 0000000000000000000000000000000000000000000000000000000000000004 -2 3.300000000000000000000000000000 4 3.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494347e-38 1.17549e-38 1.175494355e-38 01.17549e-38 00000001.175494355e-38 01.17549e-38 00000001.175494355e-38 1000-01-04 838:59:55 1970-01-05 00:00:04 1970-01-05 00:00:04 1905 1905 1905 1enum 2set +100 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set drop view test.v1 ; CREATE VIEW test.v1 AS SELECT F59,f61 FROM test.tb2 limit 20 ; -SELECT * FROM test.v1 limit 50; +SELECT * FROM test.v1 order by f59,f61 desc limit 50; F59 f61 1 0000000001 2 0000000002 3 0000000003 -100 0000000004 5 0000000005 6 0000000006 7 0000000007 8 0000000008 9 0000000009 10 0000000010 -76710 NULL -2760 NULL -569300 NULL -660 NULL +100 0000000004 250 NULL 340 NULL -3410 NULL -2550 NULL -3330 NULL 441 NULL +660 NULL +2550 NULL +2760 NULL +3330 NULL +3410 NULL +76710 NULL +569300 NULL drop view test.v1 ; Testcase 3.3.1.54 @@ -9803,7 +9803,7 @@ Insert into t2 values (2,2000) ; Insert into t2 values (31,97) ; Create view test.v1 as select t1.f59, t1.f60 from t1,t2 where t1.f59=t2.f59 ; -Select * from test.v1 limit 50 ; +Select * from test.v1 order by f59 limit 50 ; f59 f60 1 10 2 20 @@ -9869,7 +9869,7 @@ create or replace view test.v1 as Select t1.f59 t1_f59, t2.f59 t2_f59, t1.f60 t1_f60, t2.f60 t2_f60, t1.f61 t1_f61, t2.f61 t2_f61 from t1 inner join t2 where t1.f59 = t2.f59 ; -select * from test.v1; +select * from test.v1 order by t1_f59 ; t1_f59 t2_f59 t1_f60 t2_f60 t1_f61 t2_f61 2 2 double double 6 6 3 3 single-f3 single-f3 4 6 @@ -9882,7 +9882,7 @@ t1_f59 t2_f59 t1_f60 t2_f60 t1_f61 t2_f61 Create or replace view test.v1 as Select t1.f59 AS t1_f59, t2.f59 AS t2_f59 FROM t2 cross join t1; -Select * from v1; +Select * from v1 order by t1_f59,t2_f59; t1_f59 t2_f59 1 2 1 3 @@ -9908,7 +9908,7 @@ t1_f59 t2_f59 Create or replace view test.v1 as Select straight_join t1.f59 AS t1_f59, t2.f59 AS t2_f59 FROM t2,t1; -Select * from v1; +Select * from v1 order by t1_f59,t2_f59; t1_f59 t2_f59 1 2 1 3 @@ -9934,7 +9934,7 @@ t1_f59 t2_f59 Create or replace view test.v1 as Select f59, f60, f61, a, b FROM t2 natural join t1; -Select * from v1; +Select * from v1 order by f59; f59 f60 f61 a b 2 double 6 2 2 Select f59, f60, f61, a, b @@ -9945,11 +9945,11 @@ Create or replace view test.v1 as Select t1.f59 t1_f59, t2.f59 t2_f59, t1.f60 t1_f60, t2.f60 t2_f60, t1.f61 t1_f61, t2.f61 t2_f61 FROM t2 left outer join t1 on t2.f59=t1.f59; -Select * from v1; +Select * from v1 order by t1_f59; t1_f59 t2_f59 t1_f60 t2_f60 t1_f61 t2_f61 +NULL 4 NULL single NULL 4 2 2 double double 6 6 3 3 single-f3 single-f3 4 6 -NULL 4 NULL single NULL 4 Select t1.f59 t1_f59, t2.f59 t2_f59, t1.f60 t1_f60, t2.f60 t2_f60, t1.f61 t1_f61, t2.f61 t2_f61 FROM t2 left outer join t1 on t2.f59=t1.f59; @@ -9960,7 +9960,7 @@ NULL 4 NULL single NULL 4 Create or replace view test.v1 as Select f59, f60, f61, t1.a, t2.b FROM t2 natural left outer join t1; -Select * from v1; +Select * from v1 order by f59; f59 f60 f61 a b 2 double 6 2 2 3 single-f3 6 NULL 3 @@ -9975,7 +9975,7 @@ Create or replace view test.v1 as Select t1.f59 t1_f59, t2.f59 t2_f59, t1.f60 t1_f60, t2.f60 t2_f60, t1.f61 t1_f61, t2.f61 t2_f61 FROM t2 right outer join t1 on t2.f59=t1.f59; -Select * from v1; +Select * from v1 order by t1_f59; t1_f59 t2_f59 t1_f60 t2_f60 t1_f61 t2_f61 1 NULL single NULL 3 NULL 2 2 double double 6 6 @@ -9990,11 +9990,11 @@ t1_f59 t2_f59 t1_f60 t2_f60 t1_f61 t2_f61 Create or replace view test.v1 as Select f59, f60, a, b FROM t2 natural right outer join t1; -Select * from v1; +Select * from v1 order by f59 desc; f59 f60 a b -1 single 1 NULL -2 double 2 2 3 single-f3 3 NULL +2 double 2 2 +1 single 1 NULL Select f59, f60, a, b FROM t2 natural right outer join t1; f59 f60 a b @@ -10015,18 +10015,18 @@ Insert into t1 values (107,501,601) ; Insert into t1 values (901,801,401) ; Create or replace view test.v1 as Select tb2.f59 FROM tb2 LEFT JOIN t1 on tb2.f59 = t1.f59 ; -Select * from test.v1 limit 0,10; +Select * from test.v1 order by f59 limit 0,10; f59 1 2 3 -100 5 6 7 8 9 10 +15 Drop view if exists test.v1 ; Drop table if exists t1 ; Drop view if exists v1; @@ -10036,7 +10036,7 @@ Insert into t1 values (207,201,201) ; Insert into t1 values (201,201,201) ; Create or replace view test.v1 as Select tb2.f59 FROM tb2 INNER JOIN t1 on tb2.f59 = t1.f59 ; -Select * from test.v1 limit 0,10; +Select * from test.v1 order by f59 limit 0,10; f59 207 Drop view if exists test.v1 ; @@ -10048,7 +10048,7 @@ Insert into t1 values (27,21,21) ; Insert into t1 values (21,21,21) ; Create or replace view test.v1 as Select tb2.f59 FROM tb2 CROSS JOIN t1 on tb2.f59 = t1.f59 ; -Select * from test.v1 limit 0,10; +Select * from test.v1 order by f59 limit 0,10; f59 27 Drop view test.v1 ; @@ -10063,18 +10063,18 @@ Insert into t1 values (17,51,61) ; Insert into t1 values (91,81,41) ; Create or replace view test.v1 as (Select f59 FROM tb2 where f59=17 ) Union ALL (Select f59 from t1 where f59=17 ); -Select * from test.v1 limit 0,10; +Select * from test.v1 order by f59 limit 0,10; f59 17 17 Create or replace view test.v1 as (Select f59 FROM tb2 where f59=17 ) Union (Select f59 from t1 where f59=17 ); -Select * from test.v1 limit 0,10; +Select * from test.v1 order by f59 limit 0,10; f59 17 Create or replace view test.v1 as (Select f59 FROM tb2 where f59=17 ) Union Distinct (Select f59 from t1 where f60=17 ); -Select * from test.v1 limit 0,10; +Select * from test.v1 order by f59 limit 0,10; f59 17 Drop view test.v1 ; @@ -10086,7 +10086,7 @@ insert into t1 values (107,501,601); insert into t1 values (901,801,401); create or replace view test.v1 as select tb2.f59 from tb2 join t1 on tb2.f59 = t1.f59; -select * from test.v1 limit 0,10; +select * from test.v1 order by f59 limit 0,10; f59 107 107 @@ -10094,7 +10094,7 @@ create or replace view test.v1 as (select f59 from tb2 where f59=107 ) union all (select f59 from t1 where f59=107 ); -select * from test.v1 limit 0,10; +select * from test.v1 order by f59 limit 0,10; f59 107 107 @@ -10103,14 +10103,14 @@ create or replace view test.v1 as (select f59 from tb2 where f59=107 ) union (select f59 from t1 where f59=107 ); -select * from test.v1 limit 0,10; +select * from test.v1 order by f59 limit 0,10; f59 107 create or replace view test.v1 as (select f59 from tb2 where f59=107 ) union distinct (select f59 from t1 where f59=107 ); -select * from test.v1 limit 0,10; +select * from test.v1 order by f59 limit 0,10; f59 107 drop view if exists test.v1 ; @@ -10121,13 +10121,13 @@ Testcase 3.3.1.64 Drop view if exists test.v1 ; CREATE VIEW test.v1 AS SELECT F59 FROM test.tb2 where test.tb2.F59 = 109; -SELECT * FROM test.v1 limit 0,10; +SELECT * FROM test.v1 order by f59 limit 0,10; F59 109 109 ALTER VIEW test.v1 AS SELECT * FROM test.tb2 WHERE test.tb2.f59 = 242 ; -SELECT * FROM test.v1 limit 0,10; +SELECT * FROM test.v1 order by f59 limit 0,10; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 242 79 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set Drop view test.v1 ; @@ -10274,15 +10274,13 @@ ERROR HY000: View 'test3.v32' references invalid table(s) or column(s) or functi EXPLAIN SELECT * FROM test3.v32; ERROR HY000: View 'test3.v32' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them -FIXME - Setting join_limit to 30 - hangs for higher values +FIXME - Setting join_limit to 28 - hangs for higher values ---------------------------------------------------------- -SET @join_limit = 30; +SET @join_limit = 28; SET @max_level = @join_limit - 1; DROP DATABASE IF EXISTS test3; DROP TABLE IF EXISTS test1.t1; DROP TABLE IF EXISTS test2.t1; -DROP VIEW IF EXISTS test1.v29; -DROP VIEW IF EXISTS test1.v28; DROP VIEW IF EXISTS test1.v27; DROP VIEW IF EXISTS test1.v26; DROP VIEW IF EXISTS test1.v25; @@ -10389,15 +10387,11 @@ CREATE OR REPLACE VIEW test1.v26 AS SELECT f1, f2 FROM test3.t1 tab1 NATURAL JOIN test1.v25 tab2; CREATE OR REPLACE VIEW test1.v27 AS SELECT f1, f2 FROM test1.t1 tab1 NATURAL JOIN test1.v26 tab2; -CREATE OR REPLACE VIEW test1.v28 AS SELECT f1, f2 -FROM test2.t1 tab1 NATURAL JOIN test1.v27 tab2; -CREATE OR REPLACE VIEW test1.v29 AS SELECT f1, f2 -FROM test3.t1 tab1 NATURAL JOIN test1.v28 tab2; -SHOW CREATE VIEW test1.v29; +SHOW CREATE VIEW test1.v27; View Create View character_set_client collation_connection -v29 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `test1`.`v29` AS select `tab1`.`f1` AS `f1`,`tab1`.`f2` AS `f2` from (`test3`.`t1` `tab1` join `test1`.`v28` `tab2` on(((`tab1`.`f1` = `tab2`.`f1`) and (`tab1`.`f2` = `tab2`.`f2`)))) latin1 latin1_swedish_ci +v27 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `test1`.`v27` AS select `tab1`.`f1` AS `f1`,`tab1`.`f2` AS `f2` from (`test1`.`t1` `tab1` join `test1`.`v26` `tab2` on(((`tab1`.`f1` = `tab2`.`f1`) and (`tab1`.`f2` = `tab2`.`f2`)))) latin1 latin1_swedish_ci SELECT CAST(f1 AS SIGNED INTEGER) AS f1, -CAST(f2 AS CHAR) AS f2 FROM test1.v29; +CAST(f2 AS CHAR) AS f2 FROM test1.v27; f1 f2 5 five @@ -10406,14 +10400,14 @@ differs on some platforms FIXME Is this a bug ? -------------------------------------------------------------------------------- EXPLAIN SELECT CAST(f1 AS SIGNED INTEGER) AS f1, -CAST(f2 AS CHAR) AS f2 FROM test1.v29; -CREATE VIEW test1.v30 AS SELECT f1, f2 -FROM test3.t1 tab1 NATURAL JOIN test1.v29 tab2; -SHOW CREATE VIEW test1.v30; +CAST(f2 AS CHAR) AS f2 FROM test1.v27; +CREATE VIEW test1.v28 AS SELECT f1, f2 +FROM test3.t1 tab1 NATURAL JOIN test1.v27 tab2; +SHOW CREATE VIEW test1.v28; View Create View character_set_client collation_connection -v30 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `test1`.`v30` AS select `tab1`.`f1` AS `f1`,`tab1`.`f2` AS `f2` from (`test3`.`t1` `tab1` join `test1`.`v29` `tab2` on(((`tab1`.`f1` = `tab2`.`f1`) and (`tab1`.`f2` = `tab2`.`f2`)))) latin1 latin1_swedish_ci +v28 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `test1`.`v28` AS select `tab1`.`f1` AS `f1`,`tab1`.`f2` AS `f2` from (`test3`.`t1` `tab1` join `test1`.`v27` `tab2` on(((`tab1`.`f1` = `tab2`.`f1`) and (`tab1`.`f2` = `tab2`.`f2`)))) latin1 latin1_swedish_ci SELECT CAST(f1 AS SIGNED INTEGER) AS f1, -CAST(f2 AS CHAR) AS f2 FROM test1.v30; +CAST(f2 AS CHAR) AS f2 FROM test1.v28; f1 f2 5 five @@ -10422,33 +10416,31 @@ differs on some platforms FIXME Is this a bug ? -------------------------------------------------------------------------------- EXPLAIN SELECT CAST(f1 AS SIGNED INTEGER) AS f1, -CAST(f2 AS CHAR) AS f2 FROM test1.v30; -DROP VIEW IF EXISTS test1.v30; +CAST(f2 AS CHAR) AS f2 FROM test1.v28; +DROP VIEW IF EXISTS test1.v28; CREATE OR REPLACE VIEW test1.v0 AS SELECT f1 as f2, f2 as f1 FROM test2.t1; CREATE OR REPLACE VIEW test2.v0 AS SELECT CAST('0001-01-01' AS DATE) as f1, f2 FROM test3.t1; -SHOW CREATE VIEW test1.v29; +SHOW CREATE VIEW test1.v27; SELECT CAST(f1 AS SIGNED INTEGER) AS f1, -CAST(f2 AS CHAR) AS f2 FROM test1.v29; +CAST(f2 AS CHAR) AS f2 FROM test1.v27; EXPLAIN SELECT CAST(f1 AS SIGNED INTEGER) AS f1, -CAST(f2 AS CHAR) AS f2 FROM test1.v29; +CAST(f2 AS CHAR) AS f2 FROM test1.v27; CREATE OR REPLACE VIEW test3.v0 AS SELECT f1 , CONVERT('ßÄäÖöÜü§' USING UCS2) as f2 FROM test1.t1; -SHOW CREATE VIEW test1.v29; +SHOW CREATE VIEW test1.v27; SELECT CAST(f1 AS SIGNED INTEGER) AS f1, -CAST(f2 AS CHAR) AS f2 FROM test1.v29; +CAST(f2 AS CHAR) AS f2 FROM test1.v27; EXPLAIN SELECT CAST(f1 AS SIGNED INTEGER) AS f1, -CAST(f2 AS CHAR) AS f2 FROM test1.v29; +CAST(f2 AS CHAR) AS f2 FROM test1.v27; CREATE OR REPLACE VIEW test3.v0 AS SELECT CONVERT('ßÄäÖöÜü§' USING UCS2) as f1, f2 FROM test1.t1; -SHOW CREATE VIEW test1.v29; +SHOW CREATE VIEW test1.v27; SELECT CAST(f1 AS SIGNED INTEGER) AS f1, -CAST(f2 AS CHAR) AS f2 FROM test1.v29; +CAST(f2 AS CHAR) AS f2 FROM test1.v27; EXPLAIN SELECT CAST(f1 AS SIGNED INTEGER) AS f1, -CAST(f2 AS CHAR) AS f2 FROM test1.v29; -DROP VIEW IF EXISTS test1.v29; -DROP VIEW IF EXISTS test1.v28; +CAST(f2 AS CHAR) AS f2 FROM test1.v27; DROP VIEW IF EXISTS test1.v27; DROP VIEW IF EXISTS test1.v26; DROP VIEW IF EXISTS test1.v25; @@ -10519,7 +10511,7 @@ info: Rows matched: 1 Changed: 1 Warnings: 0 SELECT * FROM tb2 where f59 = 8 and f60 = 105; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 8 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -SELECT f59,f60 FROM test.v1 where f59 = 8 and f60 = 105; +SELECT f59,f60 FROM test.v1 where f59 = 8 and f60 = 105 ; f59 f60 8 105 Drop view test.v1 ; @@ -10538,7 +10530,7 @@ f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 891 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 891 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 891 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -SELECT f59,f60 FROM test.v1 where f59 = 891 and f60 = 105; +SELECT f59,f60 FROM test.v1 where f59 = 891 and f60 = 105 ; f59 f60 891 105 891 105 @@ -10555,7 +10547,7 @@ DELETE FROM test.v1 where f59 = 789 ; affected rows: 1 SELECT * FROM tb2 where f59 = 789 ; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 -SELECT f59,f60 FROM test.v1 where f59 = 789; +SELECT f59,f60 FROM test.v1 where f59 = 789 order by f60 ; f59 f60 Drop view test.v1 ; @@ -10568,7 +10560,7 @@ DELETE FROM test.v1 where f59 = 711 ; affected rows: 1 SELECT * FROM tb2 where f59 = 711 ; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 -SELECT f59,f60 FROM test.v1 where f59 = 711; +SELECT f59,f60 FROM test.v1 where f59 = 711 order by f60 ; f59 f60 Drop view test.v1 ; diff --git a/mysql-test/suite/funcs_1/r/myisam_views.result b/mysql-test/suite/funcs_1/r/myisam_views.result index f1ec5db776c..3f4ad45f79a 100644 --- a/mysql-test/suite/funcs_1/r/myisam_views.result +++ b/mysql-test/suite/funcs_1/r/myisam_views.result @@ -206,47 +206,47 @@ Insert into t1 values (500,9866); Drop view if exists v1 ; CREATE VIEW v1 AS select f59,f60,f61 FROM test.tb2 where f59=250; -select * FROM v1 limit 0,10; +select * FROM v1 order by f60,f61 limit 0,10; f59 f60 f61 250 87895654 NULL Drop view if exists v1 ; CREATE VIEW v1 AS select f59,f60,f61 FROM test.tb2 limit 100; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59,f60,f61 limit 0,10; f59 f60 f61 1 1 0000000001 2 2 0000000002 3 3 0000000003 4 4 0000000004 +4 74 NULL 5 5 0000000005 6 6 0000000006 7 7 0000000007 8 8 0000000008 9 9 0000000009 -10 10 0000000010 CREATE or REPLACE VIEW v1 AS select f59,f60,f61 FROM test.tb2 limit 4,3; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59,f60,f61 limit 0,10; f59 f60 f61 5 5 0000000005 6 6 0000000006 7 7 0000000007 CREATE or REPLACE VIEW v1 AS select distinct f59 FROM test.tb2 limit 4,3; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 5 6 7 ALTER VIEW v1 AS select f59 FROM test.tb2 limit 6,2; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 7 8 CREATE or REPLACE VIEW v1 AS select f59 from tb2 order by f59 limit 100; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 1 2 @@ -288,7 +288,7 @@ f59 660 CREATE or REPLACE VIEW v1 AS select f59 from tb2 group by f59 limit 100; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 1 2 @@ -302,7 +302,7 @@ f59 10 CREATE or REPLACE VIEW v1 AS select f59 from tb2 group by f59 asc limit 100; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 1 2 @@ -316,21 +316,21 @@ f59 10 CREATE or REPLACE VIEW v1 AS select f59 from tb2 group by f59 desc limit 100; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 -569300 -76710 -9112 -7876 -3410 -3330 -2760 -2550 -987 -660 +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 CREATE or REPLACE VIEW v1 AS (select f59 from tb2) union (select f59 from t1) limit 100; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 1 2 @@ -344,7 +344,7 @@ f59 10 CREATE or REPLACE VIEW v1 AS (select f59 FROM tb2) UNION DISTINCT(select f59 FROM t1) ; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 1 2 @@ -358,103 +358,103 @@ f59 10 CREATE or REPLACE VIEW v1 AS (select f59 FROM tb2) UNION ALL(select f59 FROM t1) ; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 1 2 3 4 +4 5 6 7 8 9 -10 CREATE or REPLACE VIEW v1 AS select * FROM test.tb2 WITH LOCAL CHECK OPTION ; -select * FROM v1 limit 0,50; +select * FROM v1 order by f59,f60,f61,f62,f63,f64 limit 0,50; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 f110 f111 f112 f113 f114 f115 f116 f117 1 1 0000000001 0000000000000000000000000000000000000000000000000000000000000001 0000000001 0000000000000000000000000000000000000000000000000000000000000001 -5 0.000000000000000000000000000000 1 0.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549435e-38 1.17549e-38 1.175494352e-38 01.17549e-38 00000001.175494352e-38 01.17549e-38 00000001.175494352e-38 1000-01-01 838:59:58 1970-01-02 00:00:01 1970-01-02 00:00:01 1902 1902 1902 2enum 2set ��@@ $@$@ ��@@ $@$@$@$@@@@@@@@@@@ $@$@$@$@@@@@@@@@@@  ��@@ $@$@$@$@@@@@@@@@@@ 2 2 0000000002 0000000000000000000000000000000000000000000000000000000000000002 0000000002 0000000000000000000000000000000000000000000000000000000000000002 -4 1.100000000000000000000000000000 2 1.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494349e-38 1.17549e-38 1.175494353e-38 01.17549e-38 00000001.175494353e-38 01.17549e-38 00000001.175494353e-38 1000-01-02 838:59:57 1970-01-03 00:00:02 1970-01-03 00:00:02 1903 1903 1903 1enum 1set,2set ��@@@@ 4@4@ ��@@@@ ��4@�4@4@�4@��@@ @@ @ @@ @@@ ��4@�4@4@�4@��@@ @@ @ @@ @@@ �� ��@@@@ ��4@�4@4@�4@��@@ @@ @ @@ @@@ 3 3 0000000003 0000000000000000000000000000000000000000000000000000000000000003 0000000003 0000000000000000000000000000000000000000000000000000000000000003 -3 2.200000000000000000000000000000 3 2.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494348e-38 1.17549e-38 1.175494354e-38 01.17549e-38 00000001.175494354e-38 01.17549e-38 00000001.175494354e-38 1000-01-03 838:59:56 1970-01-04 00:00:03 1970-01-04 00:00:03 1904 1904 1904 2enum 1set @@@@@@ >@>@ @@@@@@ @@4@@>@>@@>@@@@@"@@"@"@@"@@@ @@4@@>@>@@>@@@@@"@@"@"@@"@@@ @@ @@@@@@ @@4@@>@>@@>@@@@@"@@"@"@@"@@@ 4 4 0000000004 0000000000000000000000000000000000000000000000000000000000000004 0000000004 0000000000000000000000000000000000000000000000000000000000000004 -2 3.300000000000000000000000000000 4 3.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494347e-38 1.17549e-38 1.175494355e-38 01.17549e-38 00000001.175494355e-38 01.17549e-38 00000001.175494355e-38 1000-01-04 838:59:55 1970-01-05 00:00:04 1970-01-05 00:00:04 1905 1905 1905 1enum 2set @@@@@@ D@D@ @@@@@@ @@I@@I@I@@I@@@"@"@&@"@&@&@"@&@"@"@ @@I@@I@I@@I@@@"@"@&@"@&@&@"@&@"@"@ @*@ @@@@@@ NULL +4 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL 5 5 0000000005 0000000000000000000000000000000000000000000000000000000000000005 0000000005 0000000000000000000000000000000000000000000000000000000000000005 -1 4.400000000000000000000000000000 5 4.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494346e-38 1.17549e-38 1.175494356e-38 01.17549e-38 00000001.175494356e-38 01.17549e-38 00000001.175494356e-38 1000-01-05 838:59:54 1970-01-06 00:00:05 1970-01-06 00:00:05 1906 1906 1906 2enum 1set,2set @@@@@@ I@I@ @@@@@@ @@N@@N@N@@N@@@$@$@(@$@(@(@$@(@$@$@ @@N@@N@N@@N@@@$@$@(@$@(@(@$@(@$@$@ @@ @@@@@@ @@I@@I@I@@I@@@"@"@&@"@&@&@"@&@"@"@ 6 6 0000000006 0000000000000000000000000000000000000000000000000000000000000006 0000000006 0000000000000000000000000000000000000000000000000000000000000006 0 5.500000000000000000000000000000 6 5.500000000000000000000000000000 0000000006 000000000000000000000000000000005.500000000000000000000000000000 0000000006 000000000000000000000000000000005.500000000000000000000000000000 -1.175494345e-38 1.175494357e-38 00000001.175494357e-38 00000001.175494357e-38 -1.175494345e-38 1.175494357e-38 00000001.175494357e-38 00000001.175494357e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494345e-38 1.17549e-38 1.175494357e-38 01.17549e-38 00000001.175494357e-38 01.17549e-38 00000001.175494357e-38 1000-01-06 838:59:53 1970-01-07 00:00:06 1970-01-07 00:00:06 1907 1907 1907 1enum 1set @@@@ @ @ 9@.@ @@@@ @ @ @@Q@@Q@Q@@Q@@@&@&@*@&@*@*@&@*@&@&@ @@Q@@Q@Q@@Q@@@&@&@*@&@*@*@&@*@&@&@ @@ @@@@ @ @ @@N@@N@N@@N@@@$@$@(@$@(@(@$@(@$@$@ 7 7 0000000007 0000000000000000000000000000000000000000000000000000000000000007 0000000007 0000000000000000000000000000000000000000000000000000000000000007 1 6.600000000000000000000000000000 7 6.600000000000000000000000000000 0000000007 000000000000000000000000000000006.600000000000000000000000000000 0000000007 000000000000000000000000000000006.600000000000000000000000000000 -1.175494344e-38 1.175494358e-38 00000001.175494358e-38 00000001.175494358e-38 -1.175494344e-38 1.175494358e-38 00000001.175494358e-38 00000001.175494358e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494344e-38 1.17549e-38 1.175494358e-38 01.17549e-38 00000001.175494358e-38 01.17549e-38 00000001.175494358e-38 1000-01-07 838:59:52 1970-01-08 00:00:07 1970-01-08 00:00:07 1908 1908 1908 2enum 2set ��@@ $@$@ ��@@ $@$@$@$@@@@@@@@@@@ $@$@$@$@@@@@@@@@@@  ��@@ $@$@$@$@@@@@@@@@@@ 8 8 0000000008 0000000000000000000000000000000000000000000000000000000000000008 0000000008 0000000000000000000000000000000000000000000000000000000000000008 2 7.700000000000000000000000000000 8 7.700000000000000000000000000000 0000000008 000000000000000000000000000000007.700000000000000000000000000000 0000000008 000000000000000000000000000000007.700000000000000000000000000000 -1.175494343e-38 1.175494359e-38 00000001.175494359e-38 00000001.175494359e-38 -1.175494343e-38 1.175494359e-38 00000001.175494359e-38 00000001.175494359e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494343e-38 1.17549e-38 1.175494359e-38 01.17549e-38 00000001.175494359e-38 01.17549e-38 00000001.175494359e-38 1000-01-08 838:59:51 1970-01-09 00:00:08 1970-01-09 00:00:08 1909 1909 1909 1enum 1set,2set ��@@@@ 4@4@ ��@@@@ ��4@�4@4@�4@��@@ @@ @ @@ @@@ ��4@�4@4@�4@��@@ @@ @ @@ @@@ �� ��@@@@ ��4@�4@4@�4@��@@ @@ @ @@ @@@ 9 9 0000000009 0000000000000000000000000000000000000000000000000000000000000009 0000000009 0000000000000000000000000000000000000000000000000000000000000009 3 8.800000000000000000000000000000 9 8.800000000000000000000000000000 0000000009 000000000000000000000000000000008.800000000000000000000000000000 0000000009 000000000000000000000000000000008.800000000000000000000000000000 -1.175494342e-38 1.17549436e-38 000000001.17549436e-38 000000001.17549436e-38 -1.175494342e-38 1.17549436e-38 000000001.17549436e-38 000000001.17549436e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494342e-38 1.17549e-38 1.17549436e-38 01.17549e-38 000000001.17549436e-38 01.17549e-38 000000001.17549436e-38 1000-01-09 838:59:50 1970-01-10 00:00:09 1970-01-10 00:00:09 1910 1910 1910 2enum 1set @@@@@@ >@>@ @@@@@@ @@4@@>@>@@>@@@@@"@@"@"@@"@@@ @@4@@>@>@@>@@@@@"@@"@"@@"@@@ @@ @@@@@@ @@4@@>@>@@>@@@@@"@@"@"@@"@@@ 10 10 0000000010 0000000000000000000000000000000000000000000000000000000000000010 0000000010 0000000000000000000000000000000000000000000000000000000000000010 4 9.900000000000000000000000000000 10 9.900000000000000000000000000000 0000000010 000000000000000000000000000000009.900000000000000000000000000000 0000000010 000000000000000000000000000000009.900000000000000000000000000000 -1.175494341e-38 1.175494361e-38 00000001.175494361e-38 00000001.175494361e-38 -1.175494341e-38 1.175494361e-38 00000001.175494361e-38 00000001.175494361e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494341e-38 1.17549e-38 1.175494361e-38 01.17549e-38 00000001.175494361e-38 01.17549e-38 00000001.175494361e-38 1000-01-10 838:59:49 1970-01-11 00:00:10 1970-01-11 00:00:10 1911 1911 1911 1enum 2set @@@@@@ D@D@ @@@@@@ @@I@@I@I@@I@@@"@"@&@"@&@&@"@&@"@"@ @@I@@I@I@@I@@@"@"@&@"@&@&@"@&@"@"@ @*@ @@@@@@ NULL -76710 226546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -2760 985654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -569300 9114376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -660 876546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -250 87895654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -340 9984376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -3410 996546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -2550 775654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -3330 764376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -441 16546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -24 51654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -323 14376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -34 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -4 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL 15 87 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -22 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -394 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -94 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -195 87 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -292 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -987 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -7876 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -321 NULL 0000000765 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -9112 NULL 0000008771 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -107 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -109 108 0000000104 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -207 205 0000000206 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -209 208 0000000204 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -27 25 0000000026 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -29 28 0000000024 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL 17 15 0000000016 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL 19 18 0000000014 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +22 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +24 51654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +27 25 0000000026 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +29 28 0000000024 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +34 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +94 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +107 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL 107 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL 109 108 0000000104 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -299 899 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +109 108 0000000104 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +195 87 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +207 205 0000000206 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +209 208 0000000204 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL 242 79 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +250 87895654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +292 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +299 899 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +321 NULL 0000000765 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +323 14376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +340 9984376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +394 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL 424 89 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +441 16546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +660 876546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +987 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +2550 775654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +2760 985654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +3330 764376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +3410 996546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +7876 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +9112 NULL 0000008771 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +76710 226546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +569300 9114376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL CREATE or REPLACE VIEW v1 AS select * FROM test.tb2 WITH CASCADED CHECK OPTION ; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59,f60,f61,f62,f63,f64 limit 0,10; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 f110 f111 f112 f113 f114 f115 f116 f117 1 1 0000000001 0000000000000000000000000000000000000000000000000000000000000001 0000000001 0000000000000000000000000000000000000000000000000000000000000001 -5 0.000000000000000000000000000000 1 0.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549435e-38 1.17549e-38 1.175494352e-38 01.17549e-38 00000001.175494352e-38 01.17549e-38 00000001.175494352e-38 1000-01-01 838:59:58 1970-01-02 00:00:01 1970-01-02 00:00:01 1902 1902 1902 2enum 2set ��@@ $@$@ ��@@ $@$@$@$@@@@@@@@@@@ $@$@$@$@@@@@@@@@@@  ��@@ $@$@$@$@@@@@@@@@@@ 2 2 0000000002 0000000000000000000000000000000000000000000000000000000000000002 0000000002 0000000000000000000000000000000000000000000000000000000000000002 -4 1.100000000000000000000000000000 2 1.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494349e-38 1.17549e-38 1.175494353e-38 01.17549e-38 00000001.175494353e-38 01.17549e-38 00000001.175494353e-38 1000-01-02 838:59:57 1970-01-03 00:00:02 1970-01-03 00:00:02 1903 1903 1903 1enum 1set,2set ��@@@@ 4@4@ ��@@@@ ��4@�4@4@�4@��@@ @@ @ @@ @@@ ��4@�4@4@�4@��@@ @@ @ @@ @@@ �� ��@@@@ ��4@�4@4@�4@��@@ @@ @ @@ @@@ 3 3 0000000003 0000000000000000000000000000000000000000000000000000000000000003 0000000003 0000000000000000000000000000000000000000000000000000000000000003 -3 2.200000000000000000000000000000 3 2.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494348e-38 1.17549e-38 1.175494354e-38 01.17549e-38 00000001.175494354e-38 01.17549e-38 00000001.175494354e-38 1000-01-03 838:59:56 1970-01-04 00:00:03 1970-01-04 00:00:03 1904 1904 1904 2enum 1set @@@@@@ >@>@ @@@@@@ @@4@@>@>@@>@@@@@"@@"@"@@"@@@ @@4@@>@>@@>@@@@@"@@"@"@@"@@@ @@ @@@@@@ @@4@@>@>@@>@@@@@"@@"@"@@"@@@ 4 4 0000000004 0000000000000000000000000000000000000000000000000000000000000004 0000000004 0000000000000000000000000000000000000000000000000000000000000004 -2 3.300000000000000000000000000000 4 3.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494347e-38 1.17549e-38 1.175494355e-38 01.17549e-38 00000001.175494355e-38 01.17549e-38 00000001.175494355e-38 1000-01-04 838:59:55 1970-01-05 00:00:04 1970-01-05 00:00:04 1905 1905 1905 1enum 2set @@@@@@ D@D@ @@@@@@ @@I@@I@I@@I@@@"@"@&@"@&@&@"@&@"@"@ @@I@@I@I@@I@@@"@"@&@"@&@&@"@&@"@"@ @*@ @@@@@@ NULL +4 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL 5 5 0000000005 0000000000000000000000000000000000000000000000000000000000000005 0000000005 0000000000000000000000000000000000000000000000000000000000000005 -1 4.400000000000000000000000000000 5 4.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494346e-38 1.17549e-38 1.175494356e-38 01.17549e-38 00000001.175494356e-38 01.17549e-38 00000001.175494356e-38 1000-01-05 838:59:54 1970-01-06 00:00:05 1970-01-06 00:00:05 1906 1906 1906 2enum 1set,2set @@@@@@ I@I@ @@@@@@ @@N@@N@N@@N@@@$@$@(@$@(@(@$@(@$@$@ @@N@@N@N@@N@@@$@$@(@$@(@(@$@(@$@$@ @@ @@@@@@ @@I@@I@I@@I@@@"@"@&@"@&@&@"@&@"@"@ 6 6 0000000006 0000000000000000000000000000000000000000000000000000000000000006 0000000006 0000000000000000000000000000000000000000000000000000000000000006 0 5.500000000000000000000000000000 6 5.500000000000000000000000000000 0000000006 000000000000000000000000000000005.500000000000000000000000000000 0000000006 000000000000000000000000000000005.500000000000000000000000000000 -1.175494345e-38 1.175494357e-38 00000001.175494357e-38 00000001.175494357e-38 -1.175494345e-38 1.175494357e-38 00000001.175494357e-38 00000001.175494357e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494345e-38 1.17549e-38 1.175494357e-38 01.17549e-38 00000001.175494357e-38 01.17549e-38 00000001.175494357e-38 1000-01-06 838:59:53 1970-01-07 00:00:06 1970-01-07 00:00:06 1907 1907 1907 1enum 1set @@@@ @ @ 9@.@ @@@@ @ @ @@Q@@Q@Q@@Q@@@&@&@*@&@*@*@&@*@&@&@ @@Q@@Q@Q@@Q@@@&@&@*@&@*@*@&@*@&@&@ @@ @@@@ @ @ @@N@@N@N@@N@@@$@$@(@$@(@(@$@(@$@$@ 7 7 0000000007 0000000000000000000000000000000000000000000000000000000000000007 0000000007 0000000000000000000000000000000000000000000000000000000000000007 1 6.600000000000000000000000000000 7 6.600000000000000000000000000000 0000000007 000000000000000000000000000000006.600000000000000000000000000000 0000000007 000000000000000000000000000000006.600000000000000000000000000000 -1.175494344e-38 1.175494358e-38 00000001.175494358e-38 00000001.175494358e-38 -1.175494344e-38 1.175494358e-38 00000001.175494358e-38 00000001.175494358e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494344e-38 1.17549e-38 1.175494358e-38 01.17549e-38 00000001.175494358e-38 01.17549e-38 00000001.175494358e-38 1000-01-07 838:59:52 1970-01-08 00:00:07 1970-01-08 00:00:07 1908 1908 1908 2enum 2set ��@@ $@$@ ��@@ $@$@$@$@@@@@@@@@@@ $@$@$@$@@@@@@@@@@@  ��@@ $@$@$@$@@@@@@@@@@@ 8 8 0000000008 0000000000000000000000000000000000000000000000000000000000000008 0000000008 0000000000000000000000000000000000000000000000000000000000000008 2 7.700000000000000000000000000000 8 7.700000000000000000000000000000 0000000008 000000000000000000000000000000007.700000000000000000000000000000 0000000008 000000000000000000000000000000007.700000000000000000000000000000 -1.175494343e-38 1.175494359e-38 00000001.175494359e-38 00000001.175494359e-38 -1.175494343e-38 1.175494359e-38 00000001.175494359e-38 00000001.175494359e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494343e-38 1.17549e-38 1.175494359e-38 01.17549e-38 00000001.175494359e-38 01.17549e-38 00000001.175494359e-38 1000-01-08 838:59:51 1970-01-09 00:00:08 1970-01-09 00:00:08 1909 1909 1909 1enum 1set,2set ��@@@@ 4@4@ ��@@@@ ��4@�4@4@�4@��@@ @@ @ @@ @@@ ��4@�4@4@�4@��@@ @@ @ @@ @@@ �� ��@@@@ ��4@�4@4@�4@��@@ @@ @ @@ @@@ 9 9 0000000009 0000000000000000000000000000000000000000000000000000000000000009 0000000009 0000000000000000000000000000000000000000000000000000000000000009 3 8.800000000000000000000000000000 9 8.800000000000000000000000000000 0000000009 000000000000000000000000000000008.800000000000000000000000000000 0000000009 000000000000000000000000000000008.800000000000000000000000000000 -1.175494342e-38 1.17549436e-38 000000001.17549436e-38 000000001.17549436e-38 -1.175494342e-38 1.17549436e-38 000000001.17549436e-38 000000001.17549436e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494342e-38 1.17549e-38 1.17549436e-38 01.17549e-38 000000001.17549436e-38 01.17549e-38 000000001.17549436e-38 1000-01-09 838:59:50 1970-01-10 00:00:09 1970-01-10 00:00:09 1910 1910 1910 2enum 1set @@@@@@ >@>@ @@@@@@ @@4@@>@>@@>@@@@@"@@"@"@@"@@@ @@4@@>@>@@>@@@@@"@@"@"@@"@@@ @@ @@@@@@ @@4@@>@>@@>@@@@@"@@"@"@@"@@@ -10 10 0000000010 0000000000000000000000000000000000000000000000000000000000000010 0000000010 0000000000000000000000000000000000000000000000000000000000000010 4 9.900000000000000000000000000000 10 9.900000000000000000000000000000 0000000010 000000000000000000000000000000009.900000000000000000000000000000 0000000010 000000000000000000000000000000009.900000000000000000000000000000 -1.175494341e-38 1.175494361e-38 00000001.175494361e-38 00000001.175494361e-38 -1.175494341e-38 1.175494361e-38 00000001.175494361e-38 00000001.175494361e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494341e-38 1.17549e-38 1.175494361e-38 01.17549e-38 00000001.175494361e-38 01.17549e-38 00000001.175494361e-38 1000-01-10 838:59:49 1970-01-11 00:00:10 1970-01-11 00:00:10 1911 1911 1911 1enum 2set @@@@@@ D@D@ @@@@@@ @@I@@I@I@@I@@@"@"@&@"@&@&@"@&@"@"@ @@I@@I@I@@I@@@"@"@&@"@&@&@"@&@"@"@ @*@ @@@@@@ NULL CREATE OR REPLACE VIEW v1 AS SELECT F59, F60 FROM test.tb2 WITH CASCADED CHECK OPTION; -SELECT * FROM v1 limit 0,10; +SELECT * FROM v1 order by f59,f60 limit 0,10; F59 F60 1 1 2 2 3 3 4 4 +4 74 5 5 6 6 7 7 8 8 9 9 -10 10 CREATE or REPLACE VIEW v1 AS select f59, f60 from test.tb2 where f59=3330 ; -select * FROM v1 limit 0,10; +select * FROM v1 order by f60 limit 0,10; f59 f60 3330 764376 DROP VIEW v1 ; @@ -898,11 +898,11 @@ v1 CREATE ALGORITHM=TEMPTABLE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI SELECT * FROM test.v1; f1 1 -CREATE OR REPLACE VIEW test.v1 AS SELECT * FROM tb2 limit 2; +CREATE OR REPLACE VIEW test.v1 AS SELECT * FROM tb2 order by f59 limit 2; SHOW CREATE VIEW test.v1; View Create View character_set_client collation_connection -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `tb2`.`f59` AS `f59`,`tb2`.`f60` AS `f60`,`tb2`.`f61` AS `f61`,`tb2`.`f62` AS `f62`,`tb2`.`f63` AS `f63`,`tb2`.`f64` AS `f64`,`tb2`.`f65` AS `f65`,`tb2`.`f66` AS `f66`,`tb2`.`f67` AS `f67`,`tb2`.`f68` AS `f68`,`tb2`.`f69` AS `f69`,`tb2`.`f70` AS `f70`,`tb2`.`f71` AS `f71`,`tb2`.`f72` AS `f72`,`tb2`.`f73` AS `f73`,`tb2`.`f74` AS `f74`,`tb2`.`f75` AS `f75`,`tb2`.`f76` AS `f76`,`tb2`.`f77` AS `f77`,`tb2`.`f78` AS `f78`,`tb2`.`f79` AS `f79`,`tb2`.`f80` AS `f80`,`tb2`.`f81` AS `f81`,`tb2`.`f82` AS `f82`,`tb2`.`f83` AS `f83`,`tb2`.`f84` AS `f84`,`tb2`.`f85` AS `f85`,`tb2`.`f86` AS `f86`,`tb2`.`f87` AS `f87`,`tb2`.`f88` AS `f88`,`tb2`.`f89` AS `f89`,`tb2`.`f90` AS `f90`,`tb2`.`f91` AS `f91`,`tb2`.`f92` AS `f92`,`tb2`.`f93` AS `f93`,`tb2`.`f94` AS `f94`,`tb2`.`f95` AS `f95`,`tb2`.`f96` AS `f96`,`tb2`.`f97` AS `f97`,`tb2`.`f98` AS `f98`,`tb2`.`f99` AS `f99`,`tb2`.`f100` AS `f100`,`tb2`.`f101` AS `f101`,`tb2`.`f102` AS `f102`,`tb2`.`f103` AS `f103`,`tb2`.`f104` AS `f104`,`tb2`.`f105` AS `f105`,`tb2`.`f106` AS `f106`,`tb2`.`f107` AS `f107`,`tb2`.`f108` AS `f108`,`tb2`.`f109` AS `f109`,`tb2`.`f110` AS `f110`,`tb2`.`f111` AS `f111`,`tb2`.`f112` AS `f112`,`tb2`.`f113` AS `f113`,`tb2`.`f114` AS `f114`,`tb2`.`f115` AS `f115`,`tb2`.`f116` AS `f116`,`tb2`.`f117` AS `f117` from `tb2` limit 2 latin1 latin1_swedish_ci -SELECT * FROM test.v1 ; +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `tb2`.`f59` AS `f59`,`tb2`.`f60` AS `f60`,`tb2`.`f61` AS `f61`,`tb2`.`f62` AS `f62`,`tb2`.`f63` AS `f63`,`tb2`.`f64` AS `f64`,`tb2`.`f65` AS `f65`,`tb2`.`f66` AS `f66`,`tb2`.`f67` AS `f67`,`tb2`.`f68` AS `f68`,`tb2`.`f69` AS `f69`,`tb2`.`f70` AS `f70`,`tb2`.`f71` AS `f71`,`tb2`.`f72` AS `f72`,`tb2`.`f73` AS `f73`,`tb2`.`f74` AS `f74`,`tb2`.`f75` AS `f75`,`tb2`.`f76` AS `f76`,`tb2`.`f77` AS `f77`,`tb2`.`f78` AS `f78`,`tb2`.`f79` AS `f79`,`tb2`.`f80` AS `f80`,`tb2`.`f81` AS `f81`,`tb2`.`f82` AS `f82`,`tb2`.`f83` AS `f83`,`tb2`.`f84` AS `f84`,`tb2`.`f85` AS `f85`,`tb2`.`f86` AS `f86`,`tb2`.`f87` AS `f87`,`tb2`.`f88` AS `f88`,`tb2`.`f89` AS `f89`,`tb2`.`f90` AS `f90`,`tb2`.`f91` AS `f91`,`tb2`.`f92` AS `f92`,`tb2`.`f93` AS `f93`,`tb2`.`f94` AS `f94`,`tb2`.`f95` AS `f95`,`tb2`.`f96` AS `f96`,`tb2`.`f97` AS `f97`,`tb2`.`f98` AS `f98`,`tb2`.`f99` AS `f99`,`tb2`.`f100` AS `f100`,`tb2`.`f101` AS `f101`,`tb2`.`f102` AS `f102`,`tb2`.`f103` AS `f103`,`tb2`.`f104` AS `f104`,`tb2`.`f105` AS `f105`,`tb2`.`f106` AS `f106`,`tb2`.`f107` AS `f107`,`tb2`.`f108` AS `f108`,`tb2`.`f109` AS `f109`,`tb2`.`f110` AS `f110`,`tb2`.`f111` AS `f111`,`tb2`.`f112` AS `f112`,`tb2`.`f113` AS `f113`,`tb2`.`f114` AS `f114`,`tb2`.`f115` AS `f115`,`tb2`.`f116` AS `f116`,`tb2`.`f117` AS `f117` from `tb2` order by `tb2`.`f59` limit 2 latin1 latin1_swedish_ci +SELECT * FROM test.v1 order by f59,f60,f61,f62,f63,f64,f65; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 f110 f111 f112 f113 f114 f115 f116 f117 1 1 0000000001 0000000000000000000000000000000000000000000000000000000000000001 0000000001 0000000000000000000000000000000000000000000000000000000000000001 -5 0.000000000000000000000000000000 1 0.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549435e-38 1.17549e-38 1.175494352e-38 01.17549e-38 00000001.175494352e-38 01.17549e-38 00000001.175494352e-38 1000-01-01 838:59:58 1970-01-02 00:00:01 1970-01-02 00:00:01 1902 1902 1902 2enum 2set ��@@ $@$@ ��@@ $@$@$@$@@@@@@@@@@@ $@$@$@$@@@@@@@@@@@  ��@@ $@$@$@$@@@@@@@@@@@ 2 2 0000000002 0000000000000000000000000000000000000000000000000000000000000002 0000000002 0000000000000000000000000000000000000000000000000000000000000002 -4 1.100000000000000000000000000000 2 1.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494349e-38 1.17549e-38 1.175494353e-38 01.17549e-38 00000001.175494353e-38 01.17549e-38 00000001.175494353e-38 1000-01-02 838:59:57 1970-01-03 00:00:02 1970-01-03 00:00:02 1903 1903 1903 1enum 1set,2set ��@@@@ 4@4@ ��@@@@ ��4@�4@4@�4@��@@ @@ @ @@ @@@ ��4@�4@4@�4@��@@ @@ @ @@ @@@ �� ��@@@@ ��4@�4@4@�4@��@@ @@ @ @@ @@@ @@ -910,48 +910,48 @@ CREATE OR REPLACE VIEW test.v1 AS SELECT F59 FROM tb2 limit 10,100; SHOW CREATE VIEW test.v1; View Create View character_set_client collation_connection v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `tb2`.`f59` AS `F59` from `tb2` limit 10,100 latin1 latin1_swedish_ci -SELECT * FROM test.v1; +SELECT * FROM test.v1 order by F59; F59 -76710 -2760 -569300 -660 -250 -340 -3410 -2550 -3330 -441 -24 -323 -34 4 15 -22 -394 -94 -195 -292 -987 -7876 -321 -9112 -500 -500 -500 -107 -109 -207 -209 -27 -29 17 19 +22 +24 +27 +29 +34 +94 +107 107 109 -299 +109 +195 +207 +209 242 +250 +292 +299 +321 +323 +340 +394 424 +441 +500 +500 +500 +660 +987 +2550 +2760 +3330 +3410 +7876 +9112 +76710 +569300 Drop table test.t1 ; Drop view test.v1 ; @@ -1103,7 +1103,7 @@ Testcase 3.3.1.21 -------------------------------------------------------------------------------- DROP VIEW IF EXISTS v1; CREATE VIEW test.v1( F59, F60 ) AS SELECT F59, F60 From tb2 LIMIT 2; -SELECT * FROM test.v1; +SELECT * FROM test.v1 order by F59, F60 desc; F59 F60 1 1 2 2 @@ -1212,7 +1212,7 @@ DROP VIEW IF EXISTS test.v1; Drop VIEW IF EXISTS test.v1_1 ; Create view test.v1 AS Select * from test.tb2 limit 2 ; Create view test.v1_1 AS Select F59 from test.v1 ; -Select * from test.v1_1 limit 20 ; +Select * from test.v1_1 order by F59 limit 20 ; F59 1 2 @@ -1226,58 +1226,58 @@ create database test2 ; Create view test2.v2 AS Select * from test.tb2 limit 50,50; use test2 ; Create view v1 AS Select * from test.tb2 limit 50 ; -Select * from v1 ; +Select * from v1 order by f59,f60,f61,f62,f63,f64,f65; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 f110 f111 f112 f113 f114 f115 f116 f117 1 1 0000000001 0000000000000000000000000000000000000000000000000000000000000001 0000000001 0000000000000000000000000000000000000000000000000000000000000001 -5 0.000000000000000000000000000000 1 0.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549435e-38 1.17549e-38 1.175494352e-38 01.17549e-38 00000001.175494352e-38 01.17549e-38 00000001.175494352e-38 1000-01-01 838:59:58 1970-01-02 00:00:01 1970-01-02 00:00:01 1902 1902 1902 2enum 2set ��@@ $@$@ ��@@ $@$@$@$@@@@@@@@@@@ $@$@$@$@@@@@@@@@@@  ��@@ $@$@$@$@@@@@@@@@@@ 2 2 0000000002 0000000000000000000000000000000000000000000000000000000000000002 0000000002 0000000000000000000000000000000000000000000000000000000000000002 -4 1.100000000000000000000000000000 2 1.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494349e-38 1.17549e-38 1.175494353e-38 01.17549e-38 00000001.175494353e-38 01.17549e-38 00000001.175494353e-38 1000-01-02 838:59:57 1970-01-03 00:00:02 1970-01-03 00:00:02 1903 1903 1903 1enum 1set,2set ��@@@@ 4@4@ ��@@@@ ��4@�4@4@�4@��@@ @@ @ @@ @@@ ��4@�4@4@�4@��@@ @@ @ @@ @@@ �� ��@@@@ ��4@�4@4@�4@��@@ @@ @ @@ @@@ 3 3 0000000003 0000000000000000000000000000000000000000000000000000000000000003 0000000003 0000000000000000000000000000000000000000000000000000000000000003 -3 2.200000000000000000000000000000 3 2.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494348e-38 1.17549e-38 1.175494354e-38 01.17549e-38 00000001.175494354e-38 01.17549e-38 00000001.175494354e-38 1000-01-03 838:59:56 1970-01-04 00:00:03 1970-01-04 00:00:03 1904 1904 1904 2enum 1set @@@@@@ >@>@ @@@@@@ @@4@@>@>@@>@@@@@"@@"@"@@"@@@ @@4@@>@>@@>@@@@@"@@"@"@@"@@@ @@ @@@@@@ @@4@@>@>@@>@@@@@"@@"@"@@"@@@ 4 4 0000000004 0000000000000000000000000000000000000000000000000000000000000004 0000000004 0000000000000000000000000000000000000000000000000000000000000004 -2 3.300000000000000000000000000000 4 3.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494347e-38 1.17549e-38 1.175494355e-38 01.17549e-38 00000001.175494355e-38 01.17549e-38 00000001.175494355e-38 1000-01-04 838:59:55 1970-01-05 00:00:04 1970-01-05 00:00:04 1905 1905 1905 1enum 2set @@@@@@ D@D@ @@@@@@ @@I@@I@I@@I@@@"@"@&@"@&@&@"@&@"@"@ @@I@@I@I@@I@@@"@"@&@"@&@&@"@&@"@"@ @*@ @@@@@@ NULL +4 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL 5 5 0000000005 0000000000000000000000000000000000000000000000000000000000000005 0000000005 0000000000000000000000000000000000000000000000000000000000000005 -1 4.400000000000000000000000000000 5 4.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494346e-38 1.17549e-38 1.175494356e-38 01.17549e-38 00000001.175494356e-38 01.17549e-38 00000001.175494356e-38 1000-01-05 838:59:54 1970-01-06 00:00:05 1970-01-06 00:00:05 1906 1906 1906 2enum 1set,2set @@@@@@ I@I@ @@@@@@ @@N@@N@N@@N@@@$@$@(@$@(@(@$@(@$@$@ @@N@@N@N@@N@@@$@$@(@$@(@(@$@(@$@$@ @@ @@@@@@ @@I@@I@I@@I@@@"@"@&@"@&@&@"@&@"@"@ 6 6 0000000006 0000000000000000000000000000000000000000000000000000000000000006 0000000006 0000000000000000000000000000000000000000000000000000000000000006 0 5.500000000000000000000000000000 6 5.500000000000000000000000000000 0000000006 000000000000000000000000000000005.500000000000000000000000000000 0000000006 000000000000000000000000000000005.500000000000000000000000000000 -1.175494345e-38 1.175494357e-38 00000001.175494357e-38 00000001.175494357e-38 -1.175494345e-38 1.175494357e-38 00000001.175494357e-38 00000001.175494357e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494345e-38 1.17549e-38 1.175494357e-38 01.17549e-38 00000001.175494357e-38 01.17549e-38 00000001.175494357e-38 1000-01-06 838:59:53 1970-01-07 00:00:06 1970-01-07 00:00:06 1907 1907 1907 1enum 1set @@@@ @ @ 9@.@ @@@@ @ @ @@Q@@Q@Q@@Q@@@&@&@*@&@*@*@&@*@&@&@ @@Q@@Q@Q@@Q@@@&@&@*@&@*@*@&@*@&@&@ @@ @@@@ @ @ @@N@@N@N@@N@@@$@$@(@$@(@(@$@(@$@$@ 7 7 0000000007 0000000000000000000000000000000000000000000000000000000000000007 0000000007 0000000000000000000000000000000000000000000000000000000000000007 1 6.600000000000000000000000000000 7 6.600000000000000000000000000000 0000000007 000000000000000000000000000000006.600000000000000000000000000000 0000000007 000000000000000000000000000000006.600000000000000000000000000000 -1.175494344e-38 1.175494358e-38 00000001.175494358e-38 00000001.175494358e-38 -1.175494344e-38 1.175494358e-38 00000001.175494358e-38 00000001.175494358e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494344e-38 1.17549e-38 1.175494358e-38 01.17549e-38 00000001.175494358e-38 01.17549e-38 00000001.175494358e-38 1000-01-07 838:59:52 1970-01-08 00:00:07 1970-01-08 00:00:07 1908 1908 1908 2enum 2set ��@@ $@$@ ��@@ $@$@$@$@@@@@@@@@@@ $@$@$@$@@@@@@@@@@@  ��@@ $@$@$@$@@@@@@@@@@@ 8 8 0000000008 0000000000000000000000000000000000000000000000000000000000000008 0000000008 0000000000000000000000000000000000000000000000000000000000000008 2 7.700000000000000000000000000000 8 7.700000000000000000000000000000 0000000008 000000000000000000000000000000007.700000000000000000000000000000 0000000008 000000000000000000000000000000007.700000000000000000000000000000 -1.175494343e-38 1.175494359e-38 00000001.175494359e-38 00000001.175494359e-38 -1.175494343e-38 1.175494359e-38 00000001.175494359e-38 00000001.175494359e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494343e-38 1.17549e-38 1.175494359e-38 01.17549e-38 00000001.175494359e-38 01.17549e-38 00000001.175494359e-38 1000-01-08 838:59:51 1970-01-09 00:00:08 1970-01-09 00:00:08 1909 1909 1909 1enum 1set,2set ��@@@@ 4@4@ ��@@@@ ��4@�4@4@�4@��@@ @@ @ @@ @@@ ��4@�4@4@�4@��@@ @@ @ @@ @@@ �� ��@@@@ ��4@�4@4@�4@��@@ @@ @ @@ @@@ 9 9 0000000009 0000000000000000000000000000000000000000000000000000000000000009 0000000009 0000000000000000000000000000000000000000000000000000000000000009 3 8.800000000000000000000000000000 9 8.800000000000000000000000000000 0000000009 000000000000000000000000000000008.800000000000000000000000000000 0000000009 000000000000000000000000000000008.800000000000000000000000000000 -1.175494342e-38 1.17549436e-38 000000001.17549436e-38 000000001.17549436e-38 -1.175494342e-38 1.17549436e-38 000000001.17549436e-38 000000001.17549436e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494342e-38 1.17549e-38 1.17549436e-38 01.17549e-38 000000001.17549436e-38 01.17549e-38 000000001.17549436e-38 1000-01-09 838:59:50 1970-01-10 00:00:09 1970-01-10 00:00:09 1910 1910 1910 2enum 1set @@@@@@ >@>@ @@@@@@ @@4@@>@>@@>@@@@@"@@"@"@@"@@@ @@4@@>@>@@>@@@@@"@@"@"@@"@@@ @@ @@@@@@ @@4@@>@>@@>@@@@@"@@"@"@@"@@@ 10 10 0000000010 0000000000000000000000000000000000000000000000000000000000000010 0000000010 0000000000000000000000000000000000000000000000000000000000000010 4 9.900000000000000000000000000000 10 9.900000000000000000000000000000 0000000010 000000000000000000000000000000009.900000000000000000000000000000 0000000010 000000000000000000000000000000009.900000000000000000000000000000 -1.175494341e-38 1.175494361e-38 00000001.175494361e-38 00000001.175494361e-38 -1.175494341e-38 1.175494361e-38 00000001.175494361e-38 00000001.175494361e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494341e-38 1.17549e-38 1.175494361e-38 01.17549e-38 00000001.175494361e-38 01.17549e-38 00000001.175494361e-38 1000-01-10 838:59:49 1970-01-11 00:00:10 1970-01-11 00:00:10 1911 1911 1911 1enum 2set @@@@@@ D@D@ @@@@@@ @@I@@I@I@@I@@@"@"@&@"@&@&@"@&@"@"@ @@I@@I@I@@I@@@"@"@&@"@&@&@"@&@"@"@ @*@ @@@@@@ NULL -76710 226546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -2760 985654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -569300 9114376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -660 876546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -250 87895654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -340 9984376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -3410 996546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -2550 775654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -3330 764376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -441 16546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -24 51654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -323 14376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -34 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -4 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL 15 87 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -22 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -394 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -94 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -195 87 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -292 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -987 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -7876 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -321 NULL 0000000765 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -9112 NULL 0000008771 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -107 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -109 108 0000000104 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -207 205 0000000206 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -209 208 0000000204 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -27 25 0000000026 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -29 28 0000000024 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL 17 15 0000000016 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL 19 18 0000000014 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +22 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +24 51654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +27 25 0000000026 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +29 28 0000000024 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +34 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +94 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +107 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL 107 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL 109 108 0000000104 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -299 899 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +109 108 0000000104 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +195 87 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +207 205 0000000206 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +209 208 0000000204 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL 242 79 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +250 87895654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +292 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +299 899 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +321 NULL 0000000765 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +323 14376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +340 9984376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +394 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL 424 89 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +441 16546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +660 876546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +987 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +2550 775654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +2760 985654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +3330 764376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +3410 996546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +7876 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +9112 NULL 0000008771 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +76710 226546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +569300 9114376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL Select * from test2.v2 ; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 f110 f111 f112 f113 f114 f115 f116 f117 Drop view if exists test2.v1 ; @@ -1340,18 +1340,18 @@ CREATE VIEW test.v1 AS SELECT test.v1_firstview.f59, test.v1_firstview.f60 FROM test.v1_firstview INNER JOIN test.v1_secondview ON test.v1_firstview.f59 = test.v1_secondview.f59 ; -SELECT * FROM test.v1 limit 0,10; +SELECT * FROM test.v1 order by f59,f60 limit 0,10; f59 f60 1 1 2 2 3 3 4 4 +4 4 +4 74 4 74 5 5 6 6 7 7 -8 8 -9 9 Drop view if exists test.v1_firstview ; Drop view if exists test.v1_secondview ; Drop view if exists test.v1 ; @@ -1369,18 +1369,18 @@ CREATE VIEW v1 AS SELECT test.v1_firstview.F59, test.v1_firstview.F60 FROM test.v1_firstview INNER JOIN test.v1_secondview ON test.v1_firstview.f59 = test.v1_secondview.f59 ; -SELECT * FROM v1 limit 0,10; +SELECT * FROM v1 order by f59,f60 limit 0,10; F59 F60 1 1 2 2 3 3 4 4 +4 4 +4 74 4 74 5 5 6 6 7 7 -8 8 -9 9 Drop view v1 ; Drop view test.v1_firstview ; Drop view test.v1_secondview ; @@ -1395,18 +1395,18 @@ CREATE VIEW test.v1 AS SELECT test.v1_firstview.f59, test.v1_firstview.f60 FROM test.v1_firstview INNER JOIN test.tb2 ON test.v1_firstview.f59 = test.tb2.f59; -SELECT * FROM test.v1 limit 0,10; +SELECT * FROM test.v1 order by f59,f60 limit 0,10; f59 f60 1 1 2 2 3 3 4 4 +4 4 +4 74 4 74 5 5 6 6 7 7 -8 8 -9 9 Drop view test.v1 ; Drop view test.v1_firstview; @@ -1419,18 +1419,18 @@ CREATE VIEW v1_firstview AS SELECT * FROM test.tb2 ; CREATE VIEW v1 AS SELECT v1_firstview.f59, v1_firstview.f60 FROM v1_firstview INNER JOIN test.tb2 ON v1_firstview.f59 = test.tb2.f59 ; -SELECT * FROM v1 limit 0,10; +SELECT * FROM v1 order by f59,f60 limit 0,10; f59 f60 1 1 2 2 3 3 4 4 +4 4 +4 74 4 74 5 5 6 6 7 7 -8 8 -9 9 Drop database test2 ; Testcase 3.3.1.37 @@ -1442,18 +1442,18 @@ Drop view if exists test.v1_1 ; Drop view if exists test.v1_1 ; Drop view if exists test.v1_main ; Create view test.v1 as Select f59, f60 FROM test.tb2; -Select * from test.v1 limit 0,10; +Select * from test.v1 order by f59,f60 limit 0,10; f59 f60 1 1 2 2 3 3 4 4 +4 74 5 5 6 6 7 7 8 8 9 9 -10 10 Create table t1(f59 int, f60 int); Insert into t1 values (90,507) ; Create view v1_1 as Select f59,f60 from t1 ; @@ -1463,18 +1463,18 @@ f59 f60 Create view v1_main as SELECT test.tb2.f59 FROM test.tb2 JOIN test.v1 ON test.tb2.f59 = test.v1.f59; -Select * from v1_main limit 0,10; +Select * from v1_main order by f59 limit 0,10; f59 1 2 3 4 4 +4 +4 5 6 7 -8 -9 Drop table t1; Drop view test.v1 ; Drop view test.v1_1 ; @@ -1760,7 +1760,7 @@ Drop view if exists test.v1_main; Drop view if exists test1.v1_1 ; Drop database if exists test3 ; Create view test.v1 as Select f59, f60 FROM test.tb2 limit 20 ; -Select * from test.v1 ; +Select * from test.v1 order by f59,f60; f59 f60 1 1 2 2 @@ -1772,16 +1772,16 @@ f59 f60 8 8 9 9 10 10 -76710 226546 -2760 985654 -569300 9114376 -660 876546 250 87895654 340 9984376 -3410 996546 -2550 775654 -3330 764376 441 16546 +660 876546 +2550 775654 +2760 985654 +3330 764376 +3410 996546 +76710 226546 +569300 9114376 Create table test1.t1 (f59 int,f60 int) ; Insert into test1.t1 values (199,507) ; Create view test1.v1_1 as Select f59,f60 from test1.t1 ; @@ -1814,7 +1814,7 @@ Drop view if exists test.v1 ; CREATE VIEW test.v1 AS Select f59 from (Select * FROM tb2 limit 20) tx ; ERROR HY000: View's SELECT contains a subquery in the FROM clause -SELECT * FROM test.v1 ; +SELECT * FROM test.v1 order by f59 ; ERROR 42S02: Table 'test.v1' doesn't exist Drop view if exists test.v1 ; @@ -1895,7 +1895,7 @@ CREATE VIEW test.v1 AS SELECT * FROM test.tb2 where f59 = 04; UPDATE test.v1 SET f59 = 30 where F59 = 04 ; affected rows: 2 info: Rows matched: 2 Changed: 2 Warnings: 0 -SELECT * FROM test.v1 where f59 = 30 ; +SELECT * FROM test.v1 where f59 = 30 order by f59; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 f110 f111 f112 f113 f114 f115 f116 f117 SELECT * FROM test.tb2 where f59 = 30 ; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 f110 f111 f112 f113 f114 f115 f116 f117 @@ -1908,7 +1908,7 @@ SELECT * FROM tb2 where f59 = 100 ; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 f110 f111 f112 f113 f114 f115 f116 f117 100 4 0000000004 0000000000000000000000000000000000000000000000000000000000000004 0000000004 0000000000000000000000000000000000000000000000000000000000000004 -2 3.300000000000000000000000000000 4 3.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494347e-38 1.17549e-38 1.175494355e-38 01.17549e-38 00000001.175494355e-38 01.17549e-38 00000001.175494355e-38 1000-01-04 838:59:55 1970-01-05 00:00:04 1970-01-05 00:00:04 1905 1905 1905 1enum 2set @@@@@@ D@D@ @@@@@@ @@I@@I@I@@I@@@"@"@&@"@&@&@"@&@"@"@ @@I@@I@I@@I@@@"@"@&@"@&@&@"@&@"@"@ @*@ @@@@@@ NULL 100 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -SELECT * FROM test.v1 ; +SELECT * FROM test.v1 order by f59 ; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 f110 f111 f112 f113 f114 f115 f116 f117 drop view if exists test.v1 ; Drop TABLE IF EXISTS test.t1 ; @@ -1984,7 +1984,7 @@ CREATE VIEW test.v1 AS SELECT f59,f60 FROM test.tb2 where f59 = 195 WITH CHECK OPTION ; UPDATE test.v1 SET f59 = 198 where f59=195 ; ERROR HY000: CHECK OPTION failed 'test.v1' -SELECT * FROM test.v1 ; +SELECT * FROM test.v1 order by f59 ; f59 f60 195 87 drop view if exists test.v1 ; @@ -1998,7 +1998,7 @@ FROM test.tb2 where F59 = 0987 WITH LOCAL CHECK OPTION ; CREATE VIEW test.v2 as SELECT * FROM test.v1 ; UPDATE test.v1 SET F59 = 919 where f59 = 0987 ; ERROR HY000: CHECK OPTION failed 'test.v1' -SELECT * FROM test.v1 ; +SELECT * FROM test.v1 order by f59 ; f59 f60 987 41 UPDATE test.v2 SET F59 = 9879 where f59 = 919 ; @@ -9693,115 +9693,115 @@ Testcase 3.3.1.50 - 3.3.1.53 -------------------------------------------------------------------------------- DROP VIEW IF EXISTS test.v1; CREATE VIEW test.v1 AS SELECT * FROM test.tb2 limit 5 ; -SELECT * FROM test.v1 ; +SELECT * FROM test.v1 order by f59 ; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 f110 f111 f112 f113 f114 f115 f116 f117 1 1 0000000001 0000000000000000000000000000000000000000000000000000000000000001 0000000001 0000000000000000000000000000000000000000000000000000000000000001 -5 0.000000000000000000000000000000 1 0.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549435e-38 1.17549e-38 1.175494352e-38 01.17549e-38 00000001.175494352e-38 01.17549e-38 00000001.175494352e-38 1000-01-01 838:59:58 1970-01-02 00:00:01 1970-01-02 00:00:01 1902 1902 1902 2enum 2set ��@@ $@$@ ��@@ $@$@$@$@@@@@@@@@@@ $@$@$@$@@@@@@@@@@@  ��@@ $@$@$@$@@@@@@@@@@@ 2 2 0000000002 0000000000000000000000000000000000000000000000000000000000000002 0000000002 0000000000000000000000000000000000000000000000000000000000000002 -4 1.100000000000000000000000000000 2 1.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494349e-38 1.17549e-38 1.175494353e-38 01.17549e-38 00000001.175494353e-38 01.17549e-38 00000001.175494353e-38 1000-01-02 838:59:57 1970-01-03 00:00:02 1970-01-03 00:00:02 1903 1903 1903 1enum 1set,2set ��@@@@ 4@4@ ��@@@@ ��4@�4@4@�4@��@@ @@ @ @@ @@@ ��4@�4@4@�4@��@@ @@ @ @@ @@@ �� ��@@@@ ��4@�4@4@�4@��@@ @@ @ @@ @@@ 3 3 0000000003 0000000000000000000000000000000000000000000000000000000000000003 0000000003 0000000000000000000000000000000000000000000000000000000000000003 -3 2.200000000000000000000000000000 3 2.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494348e-38 1.17549e-38 1.175494354e-38 01.17549e-38 00000001.175494354e-38 01.17549e-38 00000001.175494354e-38 1000-01-03 838:59:56 1970-01-04 00:00:03 1970-01-04 00:00:03 1904 1904 1904 2enum 1set @@@@@@ >@>@ @@@@@@ @@4@@>@>@@>@@@@@"@@"@"@@"@@@ @@4@@>@>@@>@@@@@"@@"@"@@"@@@ @@ @@@@@@ @@4@@>@>@@>@@@@@"@@"@"@@"@@@ -100 4 0000000004 0000000000000000000000000000000000000000000000000000000000000004 0000000004 0000000000000000000000000000000000000000000000000000000000000004 -2 3.300000000000000000000000000000 4 3.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494347e-38 1.17549e-38 1.175494355e-38 01.17549e-38 00000001.175494355e-38 01.17549e-38 00000001.175494355e-38 1000-01-04 838:59:55 1970-01-05 00:00:04 1970-01-05 00:00:04 1905 1905 1905 1enum 2set @@@@@@ D@D@ @@@@@@ @@I@@I@I@@I@@@"@"@&@"@&@&@"@&@"@"@ @@I@@I@I@@I@@@"@"@&@"@&@&@"@&@"@"@ @*@ @@@@@@ NULL 5 5 0000000005 0000000000000000000000000000000000000000000000000000000000000005 0000000005 0000000000000000000000000000000000000000000000000000000000000005 -1 4.400000000000000000000000000000 5 4.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494346e-38 1.17549e-38 1.175494356e-38 01.17549e-38 00000001.175494356e-38 01.17549e-38 00000001.175494356e-38 1000-01-05 838:59:54 1970-01-06 00:00:05 1970-01-06 00:00:05 1906 1906 1906 2enum 1set,2set @@@@@@ I@I@ @@@@@@ @@N@@N@N@@N@@@$@$@(@$@(@(@$@(@$@$@ @@N@@N@N@@N@@@$@$@(@$@(@(@$@(@$@$@ @@ @@@@@@ @@I@@I@I@@I@@@"@"@&@"@&@&@"@&@"@"@ +100 4 0000000004 0000000000000000000000000000000000000000000000000000000000000004 0000000004 0000000000000000000000000000000000000000000000000000000000000004 -2 3.300000000000000000000000000000 4 3.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494347e-38 1.17549e-38 1.175494355e-38 01.17549e-38 00000001.175494355e-38 01.17549e-38 00000001.175494355e-38 1000-01-04 838:59:55 1970-01-05 00:00:04 1970-01-05 00:00:04 1905 1905 1905 1enum 2set @@@@@@ D@D@ @@@@@@ @@I@@I@I@@I@@@"@"@&@"@&@&@"@&@"@"@ @@I@@I@I@@I@@@"@"@&@"@&@&@"@&@"@"@ @*@ @@@@@@ NULL drop view test.v1 ; CREATE VIEW test.v1 AS SELECT F59,F61 FROM test.tb2 limit 50 ; -SELECT * FROM test.v1 ; +SELECT * FROM test.v1 order by F59, F61 ; F59 F61 1 0000000001 2 0000000002 3 0000000003 -100 0000000004 5 0000000005 6 0000000006 7 0000000007 8 0000000008 9 0000000009 10 0000000010 -76710 NULL -2760 NULL -569300 NULL -660 NULL -250 NULL -340 NULL -3410 NULL -2550 NULL -3330 NULL -441 NULL -24 NULL -323 NULL -34 NULL -100 NULL 15 NULL -22 NULL -394 NULL -94 NULL -195 NULL -292 NULL -987 NULL -7876 NULL -321 0000000765 -9112 0000008771 -500 0000000900 -500 0000000900 -500 0000000900 -107 0000000106 -109 0000000104 -207 0000000206 -209 0000000204 -27 0000000026 -29 0000000024 17 0000000016 19 0000000014 +22 NULL +24 NULL +27 0000000026 +29 0000000024 +34 NULL +94 NULL +100 NULL +100 0000000004 +107 0000000106 107 0000000106 109 0000000104 -299 NULL +109 0000000104 +195 NULL +207 0000000206 +209 0000000204 242 NULL +250 NULL +292 NULL +299 NULL +321 0000000765 +323 NULL +340 NULL +394 NULL 424 NULL +441 NULL +500 0000000900 +500 0000000900 +500 0000000900 +660 NULL +987 NULL +2550 NULL +2760 NULL +3330 NULL +3410 NULL +7876 NULL +9112 0000008771 +76710 NULL +569300 NULL drop view test.v1 ; -CREATE VIEW test.v1 AS SELECT * FROM test.tb2 limit 20 ; -SELECT * FROM test.v1; +CREATE VIEW test.v1 AS SELECT * FROM test.tb2 order by f59, f60, f61 limit 20 ; +SELECT * FROM test.v1 order by f59,f60,f61 ; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 f110 f111 f112 f113 f114 f115 f116 f117 1 1 0000000001 0000000000000000000000000000000000000000000000000000000000000001 0000000001 0000000000000000000000000000000000000000000000000000000000000001 -5 0.000000000000000000000000000000 1 0.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549435e-38 1.17549e-38 1.175494352e-38 01.17549e-38 00000001.175494352e-38 01.17549e-38 00000001.175494352e-38 1000-01-01 838:59:58 1970-01-02 00:00:01 1970-01-02 00:00:01 1902 1902 1902 2enum 2set ��@@ $@$@ ��@@ $@$@$@$@@@@@@@@@@@ $@$@$@$@@@@@@@@@@@  ��@@ $@$@$@$@@@@@@@@@@@ 2 2 0000000002 0000000000000000000000000000000000000000000000000000000000000002 0000000002 0000000000000000000000000000000000000000000000000000000000000002 -4 1.100000000000000000000000000000 2 1.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494349e-38 1.17549e-38 1.175494353e-38 01.17549e-38 00000001.175494353e-38 01.17549e-38 00000001.175494353e-38 1000-01-02 838:59:57 1970-01-03 00:00:02 1970-01-03 00:00:02 1903 1903 1903 1enum 1set,2set ��@@@@ 4@4@ ��@@@@ ��4@�4@4@�4@��@@ @@ @ @@ @@@ ��4@�4@4@�4@��@@ @@ @ @@ @@@ �� ��@@@@ ��4@�4@4@�4@��@@ @@ @ @@ @@@ 3 3 0000000003 0000000000000000000000000000000000000000000000000000000000000003 0000000003 0000000000000000000000000000000000000000000000000000000000000003 -3 2.200000000000000000000000000000 3 2.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494348e-38 1.17549e-38 1.175494354e-38 01.17549e-38 00000001.175494354e-38 01.17549e-38 00000001.175494354e-38 1000-01-03 838:59:56 1970-01-04 00:00:03 1970-01-04 00:00:03 1904 1904 1904 2enum 1set @@@@@@ >@>@ @@@@@@ @@4@@>@>@@>@@@@@"@@"@"@@"@@@ @@4@@>@>@@>@@@@@"@@"@"@@"@@@ @@ @@@@@@ @@4@@>@>@@>@@@@@"@@"@"@@"@@@ -100 4 0000000004 0000000000000000000000000000000000000000000000000000000000000004 0000000004 0000000000000000000000000000000000000000000000000000000000000004 -2 3.300000000000000000000000000000 4 3.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494347e-38 1.17549e-38 1.175494355e-38 01.17549e-38 00000001.175494355e-38 01.17549e-38 00000001.175494355e-38 1000-01-04 838:59:55 1970-01-05 00:00:04 1970-01-05 00:00:04 1905 1905 1905 1enum 2set @@@@@@ D@D@ @@@@@@ @@I@@I@I@@I@@@"@"@&@"@&@&@"@&@"@"@ @@I@@I@I@@I@@@"@"@&@"@&@&@"@&@"@"@ @*@ @@@@@@ NULL 5 5 0000000005 0000000000000000000000000000000000000000000000000000000000000005 0000000005 0000000000000000000000000000000000000000000000000000000000000005 -1 4.400000000000000000000000000000 5 4.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494346e-38 1.17549e-38 1.175494356e-38 01.17549e-38 00000001.175494356e-38 01.17549e-38 00000001.175494356e-38 1000-01-05 838:59:54 1970-01-06 00:00:05 1970-01-06 00:00:05 1906 1906 1906 2enum 1set,2set @@@@@@ I@I@ @@@@@@ @@N@@N@N@@N@@@$@$@(@$@(@(@$@(@$@$@ @@N@@N@N@@N@@@$@$@(@$@(@(@$@(@$@$@ @@ @@@@@@ @@I@@I@I@@I@@@"@"@&@"@&@&@"@&@"@"@ 6 6 0000000006 0000000000000000000000000000000000000000000000000000000000000006 0000000006 0000000000000000000000000000000000000000000000000000000000000006 0 5.500000000000000000000000000000 6 5.500000000000000000000000000000 0000000006 000000000000000000000000000000005.500000000000000000000000000000 0000000006 000000000000000000000000000000005.500000000000000000000000000000 -1.175494345e-38 1.175494357e-38 00000001.175494357e-38 00000001.175494357e-38 -1.175494345e-38 1.175494357e-38 00000001.175494357e-38 00000001.175494357e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494345e-38 1.17549e-38 1.175494357e-38 01.17549e-38 00000001.175494357e-38 01.17549e-38 00000001.175494357e-38 1000-01-06 838:59:53 1970-01-07 00:00:06 1970-01-07 00:00:06 1907 1907 1907 1enum 1set @@@@ @ @ 9@.@ @@@@ @ @ @@Q@@Q@Q@@Q@@@&@&@*@&@*@*@&@*@&@&@ @@Q@@Q@Q@@Q@@@&@&@*@&@*@*@&@*@&@&@ @@ @@@@ @ @ @@N@@N@N@@N@@@$@$@(@$@(@(@$@(@$@$@ 7 7 0000000007 0000000000000000000000000000000000000000000000000000000000000007 0000000007 0000000000000000000000000000000000000000000000000000000000000007 1 6.600000000000000000000000000000 7 6.600000000000000000000000000000 0000000007 000000000000000000000000000000006.600000000000000000000000000000 0000000007 000000000000000000000000000000006.600000000000000000000000000000 -1.175494344e-38 1.175494358e-38 00000001.175494358e-38 00000001.175494358e-38 -1.175494344e-38 1.175494358e-38 00000001.175494358e-38 00000001.175494358e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494344e-38 1.17549e-38 1.175494358e-38 01.17549e-38 00000001.175494358e-38 01.17549e-38 00000001.175494358e-38 1000-01-07 838:59:52 1970-01-08 00:00:07 1970-01-08 00:00:07 1908 1908 1908 2enum 2set ��@@ $@$@ ��@@ $@$@$@$@@@@@@@@@@@ $@$@$@$@@@@@@@@@@@  ��@@ $@$@$@$@@@@@@@@@@@ 8 8 0000000008 0000000000000000000000000000000000000000000000000000000000000008 0000000008 0000000000000000000000000000000000000000000000000000000000000008 2 7.700000000000000000000000000000 8 7.700000000000000000000000000000 0000000008 000000000000000000000000000000007.700000000000000000000000000000 0000000008 000000000000000000000000000000007.700000000000000000000000000000 -1.175494343e-38 1.175494359e-38 00000001.175494359e-38 00000001.175494359e-38 -1.175494343e-38 1.175494359e-38 00000001.175494359e-38 00000001.175494359e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494343e-38 1.17549e-38 1.175494359e-38 01.17549e-38 00000001.175494359e-38 01.17549e-38 00000001.175494359e-38 1000-01-08 838:59:51 1970-01-09 00:00:08 1970-01-09 00:00:08 1909 1909 1909 1enum 1set,2set ��@@@@ 4@4@ ��@@@@ ��4@�4@4@�4@��@@ @@ @ @@ @@@ ��4@�4@4@�4@��@@ @@ @ @@ @@@ �� ��@@@@ ��4@�4@4@�4@��@@ @@ @ @@ @@@ 9 9 0000000009 0000000000000000000000000000000000000000000000000000000000000009 0000000009 0000000000000000000000000000000000000000000000000000000000000009 3 8.800000000000000000000000000000 9 8.800000000000000000000000000000 0000000009 000000000000000000000000000000008.800000000000000000000000000000 0000000009 000000000000000000000000000000008.800000000000000000000000000000 -1.175494342e-38 1.17549436e-38 000000001.17549436e-38 000000001.17549436e-38 -1.175494342e-38 1.17549436e-38 000000001.17549436e-38 000000001.17549436e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494342e-38 1.17549e-38 1.17549436e-38 01.17549e-38 000000001.17549436e-38 01.17549e-38 000000001.17549436e-38 1000-01-09 838:59:50 1970-01-10 00:00:09 1970-01-10 00:00:09 1910 1910 1910 2enum 1set @@@@@@ >@>@ @@@@@@ @@4@@>@>@@>@@@@@"@@"@"@@"@@@ @@4@@>@>@@>@@@@@"@@"@"@@"@@@ @@ @@@@@@ @@4@@>@>@@>@@@@@"@@"@"@@"@@@ 10 10 0000000010 0000000000000000000000000000000000000000000000000000000000000010 0000000010 0000000000000000000000000000000000000000000000000000000000000010 4 9.900000000000000000000000000000 10 9.900000000000000000000000000000 0000000010 000000000000000000000000000000009.900000000000000000000000000000 0000000010 000000000000000000000000000000009.900000000000000000000000000000 -1.175494341e-38 1.175494361e-38 00000001.175494361e-38 00000001.175494361e-38 -1.175494341e-38 1.175494361e-38 00000001.175494361e-38 00000001.175494361e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494341e-38 1.17549e-38 1.175494361e-38 01.17549e-38 00000001.175494361e-38 01.17549e-38 00000001.175494361e-38 1000-01-10 838:59:49 1970-01-11 00:00:10 1970-01-11 00:00:10 1911 1911 1911 1enum 2set @@@@@@ D@D@ @@@@@@ @@I@@I@I@@I@@@"@"@&@"@&@&@"@&@"@"@ @@I@@I@I@@I@@@"@"@&@"@&@&@"@&@"@"@ @*@ @@@@@@ NULL -76710 226546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -2760 985654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -569300 9114376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -660 876546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -250 87895654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -340 9984376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -3410 996546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -2550 775654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -3330 764376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -441 16546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +15 87 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +17 15 0000000016 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +19 18 0000000014 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +22 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +24 51654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +27 25 0000000026 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +29 28 0000000024 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +34 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +94 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL +100 4 0000000004 0000000000000000000000000000000000000000000000000000000000000004 0000000004 0000000000000000000000000000000000000000000000000000000000000004 -2 3.300000000000000000000000000000 4 3.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494347e-38 1.17549e-38 1.175494355e-38 01.17549e-38 00000001.175494355e-38 01.17549e-38 00000001.175494355e-38 1000-01-04 838:59:55 1970-01-05 00:00:04 1970-01-05 00:00:04 1905 1905 1905 1enum 2set @@@@@@ D@D@ @@@@@@ @@I@@I@I@@I@@@"@"@&@"@&@&@"@&@"@"@ @@I@@I@I@@I@@@"@"@&@"@&@&@"@&@"@"@ @*@ @@@@@@ NULL +100 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL drop view test.v1 ; CREATE VIEW test.v1 AS SELECT F59,f61 FROM test.tb2 limit 20 ; -SELECT * FROM test.v1 limit 50; +SELECT * FROM test.v1 order by f59,f61 desc limit 50; F59 f61 1 0000000001 2 0000000002 3 0000000003 -100 0000000004 5 0000000005 6 0000000006 7 0000000007 8 0000000008 9 0000000009 10 0000000010 -76710 NULL -2760 NULL -569300 NULL -660 NULL +100 0000000004 250 NULL 340 NULL -3410 NULL -2550 NULL -3330 NULL 441 NULL +660 NULL +2550 NULL +2760 NULL +3330 NULL +3410 NULL +76710 NULL +569300 NULL drop view test.v1 ; Testcase 3.3.1.54 @@ -9820,7 +9820,7 @@ Insert into t2 values (2,2000) ; Insert into t2 values (31,97) ; Create view test.v1 as select t1.f59, t1.f60 from t1,t2 where t1.f59=t2.f59 ; -Select * from test.v1 limit 50 ; +Select * from test.v1 order by f59 limit 50 ; f59 f60 1 10 2 20 @@ -9886,7 +9886,7 @@ create or replace view test.v1 as Select t1.f59 t1_f59, t2.f59 t2_f59, t1.f60 t1_f60, t2.f60 t2_f60, t1.f61 t1_f61, t2.f61 t2_f61 from t1 inner join t2 where t1.f59 = t2.f59 ; -select * from test.v1; +select * from test.v1 order by t1_f59 ; t1_f59 t2_f59 t1_f60 t2_f60 t1_f61 t2_f61 2 2 double double 6 6 3 3 single-f3 single-f3 4 6 @@ -9899,7 +9899,7 @@ t1_f59 t2_f59 t1_f60 t2_f60 t1_f61 t2_f61 Create or replace view test.v1 as Select t1.f59 AS t1_f59, t2.f59 AS t2_f59 FROM t2 cross join t1; -Select * from v1; +Select * from v1 order by t1_f59,t2_f59; t1_f59 t2_f59 1 2 1 3 @@ -9925,7 +9925,7 @@ t1_f59 t2_f59 Create or replace view test.v1 as Select straight_join t1.f59 AS t1_f59, t2.f59 AS t2_f59 FROM t2,t1; -Select * from v1; +Select * from v1 order by t1_f59,t2_f59; t1_f59 t2_f59 1 2 1 3 @@ -9951,7 +9951,7 @@ t1_f59 t2_f59 Create or replace view test.v1 as Select f59, f60, f61, a, b FROM t2 natural join t1; -Select * from v1; +Select * from v1 order by f59; f59 f60 f61 a b 2 double 6 2 2 Select f59, f60, f61, a, b @@ -9962,11 +9962,11 @@ Create or replace view test.v1 as Select t1.f59 t1_f59, t2.f59 t2_f59, t1.f60 t1_f60, t2.f60 t2_f60, t1.f61 t1_f61, t2.f61 t2_f61 FROM t2 left outer join t1 on t2.f59=t1.f59; -Select * from v1; +Select * from v1 order by t1_f59; t1_f59 t2_f59 t1_f60 t2_f60 t1_f61 t2_f61 +NULL 4 NULL single NULL 4 2 2 double double 6 6 3 3 single-f3 single-f3 4 6 -NULL 4 NULL single NULL 4 Select t1.f59 t1_f59, t2.f59 t2_f59, t1.f60 t1_f60, t2.f60 t2_f60, t1.f61 t1_f61, t2.f61 t2_f61 FROM t2 left outer join t1 on t2.f59=t1.f59; @@ -9977,7 +9977,7 @@ NULL 4 NULL single NULL 4 Create or replace view test.v1 as Select f59, f60, f61, t1.a, t2.b FROM t2 natural left outer join t1; -Select * from v1; +Select * from v1 order by f59; f59 f60 f61 a b 2 double 6 2 2 3 single-f3 6 NULL 3 @@ -9992,7 +9992,7 @@ Create or replace view test.v1 as Select t1.f59 t1_f59, t2.f59 t2_f59, t1.f60 t1_f60, t2.f60 t2_f60, t1.f61 t1_f61, t2.f61 t2_f61 FROM t2 right outer join t1 on t2.f59=t1.f59; -Select * from v1; +Select * from v1 order by t1_f59; t1_f59 t2_f59 t1_f60 t2_f60 t1_f61 t2_f61 1 NULL single NULL 3 NULL 2 2 double double 6 6 @@ -10007,11 +10007,11 @@ t1_f59 t2_f59 t1_f60 t2_f60 t1_f61 t2_f61 Create or replace view test.v1 as Select f59, f60, a, b FROM t2 natural right outer join t1; -Select * from v1; +Select * from v1 order by f59 desc; f59 f60 a b -1 single 1 NULL -2 double 2 2 3 single-f3 3 NULL +2 double 2 2 +1 single 1 NULL Select f59, f60, a, b FROM t2 natural right outer join t1; f59 f60 a b @@ -10032,18 +10032,18 @@ Insert into t1 values (107,501,601) ; Insert into t1 values (901,801,401) ; Create or replace view test.v1 as Select tb2.f59 FROM tb2 LEFT JOIN t1 on tb2.f59 = t1.f59 ; -Select * from test.v1 limit 0,10; +Select * from test.v1 order by f59 limit 0,10; f59 1 2 3 -100 5 6 7 8 9 10 +15 Drop view if exists test.v1 ; Drop table if exists t1 ; Drop view if exists v1; @@ -10053,7 +10053,7 @@ Insert into t1 values (207,201,201) ; Insert into t1 values (201,201,201) ; Create or replace view test.v1 as Select tb2.f59 FROM tb2 INNER JOIN t1 on tb2.f59 = t1.f59 ; -Select * from test.v1 limit 0,10; +Select * from test.v1 order by f59 limit 0,10; f59 207 Drop view if exists test.v1 ; @@ -10065,7 +10065,7 @@ Insert into t1 values (27,21,21) ; Insert into t1 values (21,21,21) ; Create or replace view test.v1 as Select tb2.f59 FROM tb2 CROSS JOIN t1 on tb2.f59 = t1.f59 ; -Select * from test.v1 limit 0,10; +Select * from test.v1 order by f59 limit 0,10; f59 27 Drop view test.v1 ; @@ -10080,18 +10080,18 @@ Insert into t1 values (17,51,61) ; Insert into t1 values (91,81,41) ; Create or replace view test.v1 as (Select f59 FROM tb2 where f59=17 ) Union ALL (Select f59 from t1 where f59=17 ); -Select * from test.v1 limit 0,10; +Select * from test.v1 order by f59 limit 0,10; f59 17 17 Create or replace view test.v1 as (Select f59 FROM tb2 where f59=17 ) Union (Select f59 from t1 where f59=17 ); -Select * from test.v1 limit 0,10; +Select * from test.v1 order by f59 limit 0,10; f59 17 Create or replace view test.v1 as (Select f59 FROM tb2 where f59=17 ) Union Distinct (Select f59 from t1 where f60=17 ); -Select * from test.v1 limit 0,10; +Select * from test.v1 order by f59 limit 0,10; f59 17 Drop view test.v1 ; @@ -10103,7 +10103,7 @@ insert into t1 values (107,501,601); insert into t1 values (901,801,401); create or replace view test.v1 as select tb2.f59 from tb2 join t1 on tb2.f59 = t1.f59; -select * from test.v1 limit 0,10; +select * from test.v1 order by f59 limit 0,10; f59 107 107 @@ -10111,7 +10111,7 @@ create or replace view test.v1 as (select f59 from tb2 where f59=107 ) union all (select f59 from t1 where f59=107 ); -select * from test.v1 limit 0,10; +select * from test.v1 order by f59 limit 0,10; f59 107 107 @@ -10120,14 +10120,14 @@ create or replace view test.v1 as (select f59 from tb2 where f59=107 ) union (select f59 from t1 where f59=107 ); -select * from test.v1 limit 0,10; +select * from test.v1 order by f59 limit 0,10; f59 107 create or replace view test.v1 as (select f59 from tb2 where f59=107 ) union distinct (select f59 from t1 where f59=107 ); -select * from test.v1 limit 0,10; +select * from test.v1 order by f59 limit 0,10; f59 107 drop view if exists test.v1 ; @@ -10138,13 +10138,13 @@ Testcase 3.3.1.64 Drop view if exists test.v1 ; CREATE VIEW test.v1 AS SELECT F59 FROM test.tb2 where test.tb2.F59 = 109; -SELECT * FROM test.v1 limit 0,10; +SELECT * FROM test.v1 order by f59 limit 0,10; F59 109 109 ALTER VIEW test.v1 AS SELECT * FROM test.tb2 WHERE test.tb2.f59 = 242 ; -SELECT * FROM test.v1 limit 0,10; +SELECT * FROM test.v1 order by f59 limit 0,10; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 f110 f111 f112 f113 f114 f115 f116 f117 242 79 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL Drop view test.v1 ; @@ -10291,15 +10291,13 @@ ERROR HY000: View 'test3.v32' references invalid table(s) or column(s) or functi EXPLAIN SELECT * FROM test3.v32; ERROR HY000: View 'test3.v32' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them -FIXME - Setting join_limit to 30 - hangs for higher values +FIXME - Setting join_limit to 28 - hangs for higher values ---------------------------------------------------------- -SET @join_limit = 30; +SET @join_limit = 28; SET @max_level = @join_limit - 1; DROP DATABASE IF EXISTS test3; DROP TABLE IF EXISTS test1.t1; DROP TABLE IF EXISTS test2.t1; -DROP VIEW IF EXISTS test1.v29; -DROP VIEW IF EXISTS test1.v28; DROP VIEW IF EXISTS test1.v27; DROP VIEW IF EXISTS test1.v26; DROP VIEW IF EXISTS test1.v25; @@ -10509,7 +10507,7 @@ info: Rows matched: 1 Changed: 1 Warnings: 0 SELECT * FROM tb2 where f59 = 8 and f60 = 105; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 f110 f111 f112 f113 f114 f115 f116 f117 8 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -SELECT f59,f60 FROM test.v1 where f59 = 8 and f60 = 105; +SELECT f59,f60 FROM test.v1 where f59 = 8 and f60 = 105 ; f59 f60 8 105 Drop view test.v1 ; @@ -10528,7 +10526,7 @@ f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 891 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL 891 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL 891 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set NULL NULL NULL NULL NULL NULL NULL NULL -SELECT f59,f60 FROM test.v1 where f59 = 891 and f60 = 105; +SELECT f59,f60 FROM test.v1 where f59 = 891 and f60 = 105 ; f59 f60 891 105 891 105 @@ -10545,7 +10543,7 @@ DELETE FROM test.v1 where f59 = 789 ; affected rows: 1 SELECT * FROM tb2 where f59 = 789 ; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 f110 f111 f112 f113 f114 f115 f116 f117 -SELECT f59,f60 FROM test.v1 where f59 = 789; +SELECT f59,f60 FROM test.v1 where f59 = 789 order by f60 ; f59 f60 Drop view test.v1 ; @@ -10558,7 +10556,7 @@ DELETE FROM test.v1 where f59 = 711 ; affected rows: 1 SELECT * FROM tb2 where f59 = 711 ; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 f110 f111 f112 f113 f114 f115 f116 f117 -SELECT f59,f60 FROM test.v1 where f59 = 711; +SELECT f59,f60 FROM test.v1 where f59 = 711 order by f60 ; f59 f60 Drop view test.v1 ; diff --git a/mysql-test/suite/funcs_1/r/ndb_cursors.result b/mysql-test/suite/funcs_1/r/ndb_cursors.result index dd96a8104c6..cf65b615add 100644 --- a/mysql-test/suite/funcs_1/r/ndb_cursors.result +++ b/mysql-test/suite/funcs_1/r/ndb_cursors.result @@ -75,7 +75,7 @@ Note 1265 Data truncated for column 'f45' at row 1 Note 1265 Data truncated for column 'f47' at row 1 Note 1265 Data truncated for column 'f49' at row 1 Note 1265 Data truncated for column 'f51' at row 1 -Error 1466 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK' +Error 1475 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK' load data infile 'MYSQL_TEST_DIR/suite/funcs_1/data/ndb_tb1.txt' into table tb1 ; NOT YET IMPLEMENTED: cursor tests diff --git a/mysql-test/suite/funcs_1/r/ndb_func_view.result b/mysql-test/suite/funcs_1/r/ndb_func_view.result index ab4508fb302..02ef728fad5 100644 --- a/mysql-test/suite/funcs_1/r/ndb_func_view.result +++ b/mysql-test/suite/funcs_1/r/ndb_func_view.result @@ -286,8 +286,8 @@ CREATE VIEW v1 AS SELECT my_char_30, id FROM t1_values; SELECT my_char_30, id FROM t1_values WHERE select_id = 190 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 190 OR select_id IS NULL) order by id; @@ -304,8 +304,8 @@ A<--------30 characters-------> <--------30 characters-------> 3 A ---äÖüß@µ*$-- ---äÖüß@µ*$-- 4 A-1 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select concat(_latin1'A',`t1_values`.`my_char_30`) AS `CONCAT('A',my_char_30)`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select concat(_latin1'A',`t1_values`.`my_char_30`) AS `CONCAT('A',my_char_30)`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 189 OR select_id IS NULL) order by id; @@ -324,8 +324,8 @@ SELECT LTRIM(my_varbinary_1000), my_varbinary_1000, id FROM t1_values WHERE select_id = 188 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select ltrim(`t1_values`.`my_varbinary_1000`) AS `LTRIM(my_varbinary_1000)`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select ltrim(`t1_values`.`my_varbinary_1000`) AS `LTRIM(my_varbinary_1000)`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 188 OR select_id IS NULL) order by id; @@ -338,8 +338,8 @@ SELECT LTRIM(my_binary_30), my_binary_30, id FROM t1_values WHERE select_id = 187 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select ltrim(`t1_values`.`my_binary_30`) AS `LTRIM(my_binary_30)`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select ltrim(`t1_values`.`my_binary_30`) AS `LTRIM(my_binary_30)`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 187 OR select_id IS NULL) order by id; @@ -352,8 +352,8 @@ SELECT LTRIM(my_varchar_1000), my_varchar_1000, id FROM t1_values WHERE select_id = 186 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select ltrim(`t1_values`.`my_varchar_1000`) AS `LTRIM(my_varchar_1000)`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select ltrim(`t1_values`.`my_varchar_1000`) AS `LTRIM(my_varchar_1000)`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 186 OR select_id IS NULL) order by id; @@ -366,8 +366,8 @@ SELECT LTRIM(my_char_30), my_char_30, id FROM t1_values WHERE select_id = 185 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select ltrim(`t1_values`.`my_char_30`) AS `LTRIM(my_char_30)`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select ltrim(`t1_values`.`my_char_30`) AS `LTRIM(my_char_30)`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 185 OR select_id IS NULL) order by id; @@ -380,8 +380,8 @@ SELECT LOWER(my_varbinary_1000), my_varbinary_1000, id FROM t1_values WHERE select_id = 184 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select lcase(`t1_values`.`my_varbinary_1000`) AS `LOWER(my_varbinary_1000)`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select lcase(`t1_values`.`my_varbinary_1000`) AS `LOWER(my_varbinary_1000)`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 184 OR select_id IS NULL) order by id; @@ -394,8 +394,8 @@ SELECT LOWER(my_binary_30), my_binary_30, id FROM t1_values WHERE select_id = 183 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select lcase(`t1_values`.`my_binary_30`) AS `LOWER(my_binary_30)`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select lcase(`t1_values`.`my_binary_30`) AS `LOWER(my_binary_30)`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 183 OR select_id IS NULL) order by id; @@ -408,8 +408,8 @@ SELECT LOWER(my_varchar_1000), my_varchar_1000, id FROM t1_values WHERE select_id = 182 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select lcase(`t1_values`.`my_varchar_1000`) AS `LOWER(my_varchar_1000)`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select lcase(`t1_values`.`my_varchar_1000`) AS `LOWER(my_varchar_1000)`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 182 OR select_id IS NULL) order by id; @@ -422,8 +422,8 @@ SELECT LOWER(my_char_30), my_char_30, id FROM t1_values WHERE select_id = 181 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select lcase(`t1_values`.`my_char_30`) AS `LOWER(my_char_30)`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select lcase(`t1_values`.`my_char_30`) AS `LOWER(my_char_30)`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 181 OR select_id IS NULL) order by id; @@ -436,8 +436,8 @@ SELECT LOCATE('-', ' - -ABC', my_decimal), my_decimal, id FROM t1_values WHERE select_id = 180 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(_latin1'-',_latin1' - -ABC',`t1_values`.`my_decimal`) AS `LOCATE('-', ' - -ABC', my_decimal)`,`t1_values`.`my_decimal` AS `my_decimal`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(_latin1'-',_latin1' - -ABC',`t1_values`.`my_decimal`) AS `LOCATE('-', ' - -ABC', my_decimal)`,`t1_values`.`my_decimal` AS `my_decimal`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 180 OR select_id IS NULL) order by id; @@ -450,8 +450,8 @@ SELECT LOCATE('-', ' - -ABC', my_double), my_double, id FROM t1_values WHERE select_id = 179 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(_latin1'-',_latin1' - -ABC',`t1_values`.`my_double`) AS `LOCATE('-', ' - -ABC', my_double)`,`t1_values`.`my_double` AS `my_double`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(_latin1'-',_latin1' - -ABC',`t1_values`.`my_double`) AS `LOCATE('-', ' - -ABC', my_double)`,`t1_values`.`my_double` AS `my_double`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 179 OR select_id IS NULL) order by id; @@ -464,8 +464,8 @@ SELECT LOCATE('-', ' - -ABC', my_bigint), my_bigint, id FROM t1_values WHERE select_id = 178 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(_latin1'-',_latin1' - -ABC',`t1_values`.`my_bigint`) AS `LOCATE('-', ' - -ABC', my_bigint)`,`t1_values`.`my_bigint` AS `my_bigint`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(_latin1'-',_latin1' - -ABC',`t1_values`.`my_bigint`) AS `LOCATE('-', ' - -ABC', my_bigint)`,`t1_values`.`my_bigint` AS `my_bigint`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 178 OR select_id IS NULL) order by id; @@ -478,8 +478,8 @@ SELECT LOCATE('-', my_varbinary_1000, 3), my_varbinary_1000, id FROM t1_values WHERE select_id = 177 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(_latin1'-',`t1_values`.`my_varbinary_1000`,3) AS `LOCATE('-', my_varbinary_1000, 3)`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(_latin1'-',`t1_values`.`my_varbinary_1000`,3) AS `LOCATE('-', my_varbinary_1000, 3)`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 177 OR select_id IS NULL) order by id; @@ -492,8 +492,8 @@ SELECT LOCATE('-', my_binary_30, 3), my_binary_30, id FROM t1_values WHERE select_id = 176 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(_latin1'-',`t1_values`.`my_binary_30`,3) AS `LOCATE('-', my_binary_30, 3)`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(_latin1'-',`t1_values`.`my_binary_30`,3) AS `LOCATE('-', my_binary_30, 3)`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 176 OR select_id IS NULL) order by id; @@ -506,8 +506,8 @@ SELECT LOCATE('-', my_varchar_1000, 3), my_varchar_1000, id FROM t1_values WHERE select_id = 175 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(_latin1'-',`t1_values`.`my_varchar_1000`,3) AS `LOCATE('-', my_varchar_1000, 3)`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(_latin1'-',`t1_values`.`my_varchar_1000`,3) AS `LOCATE('-', my_varchar_1000, 3)`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 175 OR select_id IS NULL) order by id; @@ -520,8 +520,8 @@ SELECT LOCATE('-', my_char_30, 3), my_char_30, id FROM t1_values WHERE select_id = 174 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(_latin1'-',`t1_values`.`my_char_30`,3) AS `LOCATE('-', my_char_30, 3)`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(_latin1'-',`t1_values`.`my_char_30`,3) AS `LOCATE('-', my_char_30, 3)`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 174 OR select_id IS NULL) order by id; @@ -534,8 +534,8 @@ SELECT LOCATE(my_varbinary_1000, my_binary_30 ), my_varbinary_1000, my_binary_30 id FROM t1_values WHERE select_id = 173 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(`t1_values`.`my_varbinary_1000`,`t1_values`.`my_binary_30`) AS `LOCATE(my_varbinary_1000, my_binary_30 )`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`my_binary_30` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(`t1_values`.`my_varbinary_1000`,`t1_values`.`my_binary_30`) AS `LOCATE(my_varbinary_1000, my_binary_30 )`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`my_binary_30` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 173 OR select_id IS NULL) order by id; @@ -548,8 +548,8 @@ SELECT LOCATE(my_varbinary_1000, my_varchar_1000 ), my_varbinary_1000, my_varchar_1000 id FROM t1_values WHERE select_id = 172 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(`t1_values`.`my_varbinary_1000`,`t1_values`.`my_varchar_1000`) AS `LOCATE(my_varbinary_1000, my_varchar_1000 )`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`my_varchar_1000` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(`t1_values`.`my_varbinary_1000`,`t1_values`.`my_varchar_1000`) AS `LOCATE(my_varbinary_1000, my_varchar_1000 )`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`my_varchar_1000` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 172 OR select_id IS NULL) order by id; @@ -562,8 +562,8 @@ SELECT LOCATE(my_varbinary_1000, my_char_30 ), my_varbinary_1000, my_char_30 id FROM t1_values WHERE select_id = 171 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(`t1_values`.`my_varbinary_1000`,`t1_values`.`my_char_30`) AS `LOCATE(my_varbinary_1000, my_char_30 )`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`my_char_30` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(`t1_values`.`my_varbinary_1000`,`t1_values`.`my_char_30`) AS `LOCATE(my_varbinary_1000, my_char_30 )`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`my_char_30` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 171 OR select_id IS NULL) order by id; @@ -576,8 +576,8 @@ SELECT LOCATE(my_varbinary_1000, my_varbinary_1000 ), my_varbinary_1000, id FROM t1_values WHERE select_id = 170 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(`t1_values`.`my_varbinary_1000`,`t1_values`.`my_varbinary_1000`) AS `LOCATE(my_varbinary_1000, my_varbinary_1000 )`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(`t1_values`.`my_varbinary_1000`,`t1_values`.`my_varbinary_1000`) AS `LOCATE(my_varbinary_1000, my_varbinary_1000 )`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 170 OR select_id IS NULL) order by id; @@ -590,8 +590,8 @@ SELECT LOCATE(my_binary_30, my_varbinary_1000 ), my_binary_30, my_varbinary_1000 id FROM t1_values WHERE select_id = 169 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(`t1_values`.`my_binary_30`,`t1_values`.`my_varbinary_1000`) AS `LOCATE(my_binary_30, my_varbinary_1000 )`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`my_varbinary_1000` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(`t1_values`.`my_binary_30`,`t1_values`.`my_varbinary_1000`) AS `LOCATE(my_binary_30, my_varbinary_1000 )`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`my_varbinary_1000` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 169 OR select_id IS NULL) order by id; @@ -604,8 +604,8 @@ SELECT LOCATE(my_binary_30, my_varchar_1000 ), my_binary_30, my_varchar_1000 id FROM t1_values WHERE select_id = 168 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(`t1_values`.`my_binary_30`,`t1_values`.`my_varchar_1000`) AS `LOCATE(my_binary_30, my_varchar_1000 )`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`my_varchar_1000` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(`t1_values`.`my_binary_30`,`t1_values`.`my_varchar_1000`) AS `LOCATE(my_binary_30, my_varchar_1000 )`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`my_varchar_1000` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 168 OR select_id IS NULL) order by id; @@ -618,8 +618,8 @@ SELECT LOCATE(my_binary_30, my_char_30 ), my_binary_30, my_char_30 id FROM t1_values WHERE select_id = 167 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(`t1_values`.`my_binary_30`,`t1_values`.`my_char_30`) AS `LOCATE(my_binary_30, my_char_30 )`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`my_char_30` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(`t1_values`.`my_binary_30`,`t1_values`.`my_char_30`) AS `LOCATE(my_binary_30, my_char_30 )`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`my_char_30` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 167 OR select_id IS NULL) order by id; @@ -632,8 +632,8 @@ SELECT LOCATE(my_binary_30, my_binary_30 ), my_binary_30, id FROM t1_values WHERE select_id = 166 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(`t1_values`.`my_binary_30`,`t1_values`.`my_binary_30`) AS `LOCATE(my_binary_30, my_binary_30 )`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(`t1_values`.`my_binary_30`,`t1_values`.`my_binary_30`) AS `LOCATE(my_binary_30, my_binary_30 )`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 166 OR select_id IS NULL) order by id; @@ -646,8 +646,8 @@ SELECT LOCATE(my_varchar_1000, my_varbinary_1000 ), my_varchar_1000, my_varbinary_1000 id FROM t1_values WHERE select_id = 165 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(`t1_values`.`my_varchar_1000`,`t1_values`.`my_varbinary_1000`) AS `LOCATE(my_varchar_1000, my_varbinary_1000 )`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`my_varbinary_1000` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(`t1_values`.`my_varchar_1000`,`t1_values`.`my_varbinary_1000`) AS `LOCATE(my_varchar_1000, my_varbinary_1000 )`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`my_varbinary_1000` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 165 OR select_id IS NULL) order by id; @@ -660,8 +660,8 @@ SELECT LOCATE(my_varchar_1000, my_binary_30 ), my_varchar_1000, my_binary_30 id FROM t1_values WHERE select_id = 164 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(`t1_values`.`my_varchar_1000`,`t1_values`.`my_binary_30`) AS `LOCATE(my_varchar_1000, my_binary_30 )`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`my_binary_30` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(`t1_values`.`my_varchar_1000`,`t1_values`.`my_binary_30`) AS `LOCATE(my_varchar_1000, my_binary_30 )`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`my_binary_30` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 164 OR select_id IS NULL) order by id; @@ -674,8 +674,8 @@ SELECT LOCATE(my_varchar_1000, my_char_30 ), my_varchar_1000, my_char_30 id FROM t1_values WHERE select_id = 163 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(`t1_values`.`my_varchar_1000`,`t1_values`.`my_char_30`) AS `LOCATE(my_varchar_1000, my_char_30 )`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`my_char_30` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(`t1_values`.`my_varchar_1000`,`t1_values`.`my_char_30`) AS `LOCATE(my_varchar_1000, my_char_30 )`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`my_char_30` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 163 OR select_id IS NULL) order by id; @@ -688,8 +688,8 @@ SELECT LOCATE(my_varchar_1000, my_varchar_1000 ), my_varchar_1000, id FROM t1_values WHERE select_id = 162 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(`t1_values`.`my_varchar_1000`,`t1_values`.`my_varchar_1000`) AS `LOCATE(my_varchar_1000, my_varchar_1000 )`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(`t1_values`.`my_varchar_1000`,`t1_values`.`my_varchar_1000`) AS `LOCATE(my_varchar_1000, my_varchar_1000 )`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 162 OR select_id IS NULL) order by id; @@ -702,8 +702,8 @@ SELECT LOCATE(my_char_30, my_varbinary_1000 ), my_char_30, my_varbinary_1000 id FROM t1_values WHERE select_id = 161 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(`t1_values`.`my_char_30`,`t1_values`.`my_varbinary_1000`) AS `LOCATE(my_char_30, my_varbinary_1000 )`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`my_varbinary_1000` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(`t1_values`.`my_char_30`,`t1_values`.`my_varbinary_1000`) AS `LOCATE(my_char_30, my_varbinary_1000 )`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`my_varbinary_1000` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 161 OR select_id IS NULL) order by id; @@ -716,8 +716,8 @@ SELECT LOCATE(my_char_30, my_binary_30 ), my_char_30, my_binary_30 id FROM t1_values WHERE select_id = 160 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(`t1_values`.`my_char_30`,`t1_values`.`my_binary_30`) AS `LOCATE(my_char_30, my_binary_30 )`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`my_binary_30` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(`t1_values`.`my_char_30`,`t1_values`.`my_binary_30`) AS `LOCATE(my_char_30, my_binary_30 )`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`my_binary_30` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 160 OR select_id IS NULL) order by id; @@ -730,8 +730,8 @@ SELECT LOCATE(my_char_30, my_varchar_1000 ), my_char_30, my_varchar_1000 id FROM t1_values WHERE select_id = 159 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(`t1_values`.`my_char_30`,`t1_values`.`my_varchar_1000`) AS `LOCATE(my_char_30, my_varchar_1000 )`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`my_varchar_1000` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(`t1_values`.`my_char_30`,`t1_values`.`my_varchar_1000`) AS `LOCATE(my_char_30, my_varchar_1000 )`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`my_varchar_1000` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 159 OR select_id IS NULL) order by id; @@ -744,8 +744,8 @@ SELECT LOCATE(my_char_30, my_char_30 ), my_char_30, id FROM t1_values WHERE select_id = 158 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(`t1_values`.`my_char_30`,`t1_values`.`my_char_30`) AS `LOCATE(my_char_30, my_char_30 )`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(`t1_values`.`my_char_30`,`t1_values`.`my_char_30`) AS `LOCATE(my_char_30, my_char_30 )`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 158 OR select_id IS NULL) order by id; @@ -758,8 +758,8 @@ SELECT LOCATE('char', my_varbinary_1000), my_varbinary_1000, id FROM t1_values WHERE select_id = 157 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(_latin1'char',`t1_values`.`my_varbinary_1000`) AS `LOCATE('char', my_varbinary_1000)`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(_latin1'char',`t1_values`.`my_varbinary_1000`) AS `LOCATE('char', my_varbinary_1000)`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 157 OR select_id IS NULL) order by id; @@ -772,8 +772,8 @@ SELECT LOCATE('char', my_binary_30), my_binary_30, id FROM t1_values WHERE select_id = 156 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(_latin1'char',`t1_values`.`my_binary_30`) AS `LOCATE('char', my_binary_30)`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(_latin1'char',`t1_values`.`my_binary_30`) AS `LOCATE('char', my_binary_30)`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 156 OR select_id IS NULL) order by id; @@ -786,8 +786,8 @@ SELECT LOCATE('char', my_varchar_1000), my_varchar_1000, id FROM t1_values WHERE select_id = 155 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(_latin1'char',`t1_values`.`my_varchar_1000`) AS `LOCATE('char', my_varchar_1000)`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(_latin1'char',`t1_values`.`my_varchar_1000`) AS `LOCATE('char', my_varchar_1000)`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 155 OR select_id IS NULL) order by id; @@ -800,8 +800,8 @@ SELECT LOCATE('char', my_char_30), my_char_30, id FROM t1_values WHERE select_id = 154 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(_latin1'char',`t1_values`.`my_char_30`) AS `LOCATE('char', my_char_30)`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(_latin1'char',`t1_values`.`my_char_30`) AS `LOCATE('char', my_char_30)`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 154 OR select_id IS NULL) order by id; @@ -823,8 +823,8 @@ LOAD_FILE('../tmp/func_view.dat') id äÄ@ 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select load_file(_latin1'../tmp/func_view.dat') AS `LOAD_FILE('../tmp/func_view.dat')`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select load_file(_latin1'../tmp/func_view.dat') AS `LOAD_FILE('../tmp/func_view.dat')`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 153 OR select_id IS NULL) order by id; @@ -848,8 +848,8 @@ SELECT LENGTH(my_varbinary_1000), my_varbinary_1000, id FROM t1_values WHERE select_id = 152 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select length(`t1_values`.`my_varbinary_1000`) AS `LENGTH(my_varbinary_1000)`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select length(`t1_values`.`my_varbinary_1000`) AS `LENGTH(my_varbinary_1000)`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 152 OR select_id IS NULL) order by id; @@ -862,8 +862,8 @@ SELECT LENGTH(my_binary_30), my_binary_30, id FROM t1_values WHERE select_id = 151 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select length(`t1_values`.`my_binary_30`) AS `LENGTH(my_binary_30)`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select length(`t1_values`.`my_binary_30`) AS `LENGTH(my_binary_30)`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 151 OR select_id IS NULL) order by id; @@ -876,8 +876,8 @@ SELECT LENGTH(my_varchar_1000), my_varchar_1000, id FROM t1_values WHERE select_id = 150 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select length(`t1_values`.`my_varchar_1000`) AS `LENGTH(my_varchar_1000)`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select length(`t1_values`.`my_varchar_1000`) AS `LENGTH(my_varchar_1000)`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 150 OR select_id IS NULL) order by id; @@ -890,8 +890,8 @@ SELECT LENGTH(my_char_30), my_char_30, id FROM t1_values WHERE select_id = 149 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select length(`t1_values`.`my_char_30`) AS `LENGTH(my_char_30)`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select length(`t1_values`.`my_char_30`) AS `LENGTH(my_char_30)`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 149 OR select_id IS NULL) order by id; @@ -911,8 +911,8 @@ Warnings: Error 1292 Truncated incorrect DECIMAL value: '' Error 1292 Truncated incorrect DECIMAL value: '' SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select left(_latin1'AaBbCcDdEeFfGgHhIiJjÄäÜüÖö',`t1_values`.`my_decimal`) AS `LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_decimal)`,`t1_values`.`my_decimal` AS `my_decimal`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select left(_latin1'AaBbCcDdEeFfGgHhIiJjÄäÜüÖö',`t1_values`.`my_decimal`) AS `LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_decimal)`,`t1_values`.`my_decimal` AS `my_decimal`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 148 OR select_id IS NULL) order by id; @@ -938,8 +938,8 @@ NULL NULL 1 - ---äÖüß@µ*$-- 4 -1 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select left(`t1_values`.`my_varbinary_1000`,2) AS `LEFT(my_varbinary_1000, 2)`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select left(`t1_values`.`my_varbinary_1000`,2) AS `LEFT(my_varbinary_1000, 2)`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 147 OR select_id IS NULL) order by id; @@ -962,8 +962,8 @@ NULL NULL 1 - ---äÖüß@µ*$-- 4 -1 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select left(`t1_values`.`my_binary_30`,2) AS `LEFT(my_binary_30, 2)`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select left(`t1_values`.`my_binary_30`,2) AS `LEFT(my_binary_30, 2)`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 146 OR select_id IS NULL) order by id; @@ -986,8 +986,8 @@ NULL NULL 1 - ---äÖüß@µ*$-- 4 -1 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select left(`t1_values`.`my_varchar_1000`,2) AS `LEFT(my_varchar_1000, 2)`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select left(`t1_values`.`my_varchar_1000`,2) AS `LEFT(my_varchar_1000, 2)`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 145 OR select_id IS NULL) order by id; @@ -1010,8 +1010,8 @@ NULL NULL 1 - ---äÖüß@µ*$-- 4 -1 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select left(`t1_values`.`my_char_30`,2) AS `LEFT(my_char_30, 2)`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select left(`t1_values`.`my_char_30`,2) AS `LEFT(my_char_30, 2)`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 144 OR select_id IS NULL) order by id; @@ -1030,8 +1030,8 @@ SELECT LCASE(my_varchar_1000), my_varchar_1000, id FROM t1_values WHERE select_id = 143 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select lcase(`t1_values`.`my_varchar_1000`) AS `LCASE(my_varchar_1000)`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select lcase(`t1_values`.`my_varchar_1000`) AS `LCASE(my_varchar_1000)`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 143 OR select_id IS NULL) order by id; @@ -1044,8 +1044,8 @@ SELECT INSTR(my_char_30, 'char'), my_char_30, id FROM t1_values WHERE select_id = 142 OR select_id IS NULL order by id; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(_latin1'char',`t1_values`.`my_char_30`) AS `INSTR(my_char_30, 'char')`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select locate(_latin1'char',`t1_values`.`my_char_30`) AS `INSTR(my_char_30, 'char')`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 142 OR select_id IS NULL) order by id; @@ -1064,8 +1064,8 @@ NULL NULL 1 160 ---äÖüß@µ*$-- 4 16 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select bit_length(`t1_values`.`my_varbinary_1000`) AS `BIT_LENGTH(my_varbinary_1000)`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select bit_length(`t1_values`.`my_varbinary_1000`) AS `BIT_LENGTH(my_varbinary_1000)`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 141 OR select_id IS NULL) order by id; @@ -1090,8 +1090,8 @@ NULL NULL 1 240 ---äÖüß@µ*$-- 4 240 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select bit_length(`t1_values`.`my_binary_30`) AS `BIT_LENGTH(my_binary_30)`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select bit_length(`t1_values`.`my_binary_30`) AS `BIT_LENGTH(my_binary_30)`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 140 OR select_id IS NULL) order by id; @@ -1116,8 +1116,8 @@ NULL NULL 1 160 ---äÖüß@µ*$-- 4 16 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select bit_length(`t1_values`.`my_varchar_1000`) AS `BIT_LENGTH(my_varchar_1000)`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select bit_length(`t1_values`.`my_varchar_1000`) AS `BIT_LENGTH(my_varchar_1000)`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 139 OR select_id IS NULL) order by id; @@ -1142,8 +1142,8 @@ NULL NULL 1 152 ---äÖüß@µ*$-- 4 16 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select bit_length(`t1_values`.`my_char_30`) AS `BIT_LENGTH(my_char_30)`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select bit_length(`t1_values`.`my_char_30`) AS `BIT_LENGTH(my_char_30)`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 138 OR select_id IS NULL) order by id; @@ -1168,8 +1168,8 @@ IS_NULL NULL 1 2000 2000 4 2005 2005 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select ifnull(`t1_values`.`my_year`,_latin1'IS_NULL') AS `IFNULL(my_year,'IS_NULL')`,`t1_values`.`my_year` AS `my_year`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select ifnull(`t1_values`.`my_year`,_latin1'IS_NULL') AS `IFNULL(my_year,'IS_NULL')`,`t1_values`.`my_year` AS `my_year`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 137 OR select_id IS NULL) order by id; @@ -1194,8 +1194,8 @@ IS_NULL NULL 1 13:00:00 13:00:00 4 10:00:00 10:00:00 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select ifnull(`t1_values`.`my_time`,_latin1'IS_NULL') AS `IFNULL(my_time,'IS_NULL')`,`t1_values`.`my_time` AS `my_time`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select ifnull(`t1_values`.`my_time`,_latin1'IS_NULL') AS `IFNULL(my_time,'IS_NULL')`,`t1_values`.`my_time` AS `my_time`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 136 OR select_id IS NULL) order by id; @@ -1220,8 +1220,8 @@ IFNULL(my_timestamp,'IS_NULL') my_timestamp id 2004-02-29 23:59:59 2004-02-29 23:59:59 4 2005-06-28 10:00:00 2005-06-28 10:00:00 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select ifnull(`t1_values`.`my_timestamp`,_latin1'IS_NULL') AS `IFNULL(my_timestamp,'IS_NULL')`,`t1_values`.`my_timestamp` AS `my_timestamp`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select ifnull(`t1_values`.`my_timestamp`,_latin1'IS_NULL') AS `IFNULL(my_timestamp,'IS_NULL')`,`t1_values`.`my_timestamp` AS `my_timestamp`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 135 OR select_id IS NULL) order by id; @@ -1246,8 +1246,8 @@ IS_NULL NULL 1 2004-02-29 2004-02-29 4 2005-06-28 2005-06-28 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select ifnull(`t1_values`.`my_date`,_latin1'IS_NULL') AS `IFNULL(my_date,'IS_NULL')`,`t1_values`.`my_date` AS `my_date`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select ifnull(`t1_values`.`my_date`,_latin1'IS_NULL') AS `IFNULL(my_date,'IS_NULL')`,`t1_values`.`my_date` AS `my_date`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 134 OR select_id IS NULL) order by id; @@ -1272,8 +1272,8 @@ IS_NULL NULL 1 2004-02-29 23:59:59 2004-02-29 23:59:59 4 2005-06-28 10:00:00 2005-06-28 10:00:00 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select ifnull(`t1_values`.`my_datetime`,_latin1'IS_NULL') AS `IFNULL(my_datetime,'IS_NULL')`,`t1_values`.`my_datetime` AS `my_datetime`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select ifnull(`t1_values`.`my_datetime`,_latin1'IS_NULL') AS `IFNULL(my_datetime,'IS_NULL')`,`t1_values`.`my_datetime` AS `my_datetime`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 133 OR select_id IS NULL) order by id; @@ -1298,8 +1298,8 @@ IS_NULL NULL 1 0 0 4 -1 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select ifnull(`t1_values`.`my_double`,_latin1'IS_NULL') AS `IFNULL(my_double,'IS_NULL')`,`t1_values`.`my_double` AS `my_double`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select ifnull(`t1_values`.`my_double`,_latin1'IS_NULL') AS `IFNULL(my_double,'IS_NULL')`,`t1_values`.`my_double` AS `my_double`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 132 OR select_id IS NULL) order by id; @@ -1324,8 +1324,8 @@ IS_NULL NULL 1 0.000000000000000000000000000000 0.000000000000000000000000000000 4 -1.000000000000000000000000000000 -1.000000000000000000000000000000 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select ifnull(`t1_values`.`my_decimal`,_latin1'IS_NULL') AS `IFNULL(my_decimal,'IS_NULL')`,`t1_values`.`my_decimal` AS `my_decimal`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select ifnull(`t1_values`.`my_decimal`,_latin1'IS_NULL') AS `IFNULL(my_decimal,'IS_NULL')`,`t1_values`.`my_decimal` AS `my_decimal`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 131 OR select_id IS NULL) order by id; @@ -1350,8 +1350,8 @@ IS_NULL NULL 1 0 0 4 -1 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select ifnull(`t1_values`.`my_bigint`,_latin1'IS_NULL') AS `IFNULL(my_bigint,'IS_NULL')`,`t1_values`.`my_bigint` AS `my_bigint`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select ifnull(`t1_values`.`my_bigint`,_latin1'IS_NULL') AS `IFNULL(my_bigint,'IS_NULL')`,`t1_values`.`my_bigint` AS `my_bigint`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 130 OR select_id IS NULL) order by id; @@ -1376,8 +1376,8 @@ IS_NULL NULL 1 ---äÖüß@µ*$-- ---äÖüß@µ*$-- 4 -1 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select ifnull(`t1_values`.`my_varbinary_1000`,_latin1'IS_NULL') AS `IFNULL(my_varbinary_1000,'IS_NULL')`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select ifnull(`t1_values`.`my_varbinary_1000`,_latin1'IS_NULL') AS `IFNULL(my_varbinary_1000,'IS_NULL')`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 129 OR select_id IS NULL) order by id; @@ -1402,8 +1402,8 @@ IS_NULL NULL 1 ---äÖüß@µ*$-- ---äÖüß@µ*$-- 4 -1 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select ifnull(`t1_values`.`my_binary_30`,_latin1'IS_NULL') AS `IFNULL(my_binary_30,'IS_NULL')`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select ifnull(`t1_values`.`my_binary_30`,_latin1'IS_NULL') AS `IFNULL(my_binary_30,'IS_NULL')`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 128 OR select_id IS NULL) order by id; @@ -1428,8 +1428,8 @@ IS_NULL NULL 1 ---äÖüß@µ*$-- ---äÖüß@µ*$-- 4 -1 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select ifnull(`t1_values`.`my_varchar_1000`,_latin1'IS_NULL') AS `IFNULL(my_varchar_1000,'IS_NULL')`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select ifnull(`t1_values`.`my_varchar_1000`,_latin1'IS_NULL') AS `IFNULL(my_varchar_1000,'IS_NULL')`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 127 OR select_id IS NULL) order by id; @@ -1454,8 +1454,8 @@ IS_NULL NULL 1 ---äÖüß@µ*$-- ---äÖüß@µ*$-- 4 -1 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select ifnull(`t1_values`.`my_char_30`,_latin1'IS_NULL') AS `IFNULL(my_char_30,'IS_NULL')`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select ifnull(`t1_values`.`my_char_30`,_latin1'IS_NULL') AS `IFNULL(my_char_30,'IS_NULL')`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 126 OR select_id IS NULL) order by id; @@ -1481,9 +1481,9 @@ IS NOT NULL 2155 3 IS NOT NULL 2000 4 IS NOT NULL 2005 5 SHOW CREATE VIEW v1; -View Create View +View Create View character_set_client collation_connection v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(isnull(`t1_values`.`my_year`),_latin1'IS NULL',_latin1'IS NOT NULL') AS `IF(my_year IS NULL, 'IS NULL', -'IS NOT NULL')`,`t1_values`.`my_year` AS `my_year`,`t1_values`.`id` AS `id` from `t1_values` +'IS NOT NULL')`,`t1_values`.`my_year` AS `my_year`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 125 OR select_id IS NULL) order by id; @@ -1510,9 +1510,9 @@ IS NOT NULL 838:59:59 3 IS NOT NULL 13:00:00 4 IS NOT NULL 10:00:00 5 SHOW CREATE VIEW v1; -View Create View +View Create View character_set_client collation_connection v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(isnull(`t1_values`.`my_time`),_latin1'IS NULL',_latin1'IS NOT NULL') AS `IF(my_time IS NULL, 'IS NULL', -'IS NOT NULL')`,`t1_values`.`my_time` AS `my_time`,`t1_values`.`id` AS `id` from `t1_values` +'IS NOT NULL')`,`t1_values`.`my_time` AS `my_time`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 124 OR select_id IS NULL) order by id; @@ -1539,9 +1539,9 @@ IS NOT NULL 2038-01-01 02:59:59 3 IS NOT NULL 2004-02-29 23:59:59 4 IS NOT NULL 2005-06-28 10:00:00 5 SHOW CREATE VIEW v1; -View Create View +View Create View character_set_client collation_connection v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(isnull(`t1_values`.`my_timestamp`),_latin1'IS NULL',_latin1'IS NOT NULL') AS `IF(my_timestamp IS NULL, 'IS NULL', -'IS NOT NULL')`,`t1_values`.`my_timestamp` AS `my_timestamp`,`t1_values`.`id` AS `id` from `t1_values` +'IS NOT NULL')`,`t1_values`.`my_timestamp` AS `my_timestamp`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 123 OR select_id IS NULL) order by id; @@ -1568,9 +1568,9 @@ IS NOT NULL 9999-12-31 3 IS NOT NULL 2004-02-29 4 IS NOT NULL 2005-06-28 5 SHOW CREATE VIEW v1; -View Create View +View Create View character_set_client collation_connection v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(isnull(`t1_values`.`my_date`),_latin1'IS NULL',_latin1'IS NOT NULL') AS `IF(my_date IS NULL, 'IS NULL', -'IS NOT NULL')`,`t1_values`.`my_date` AS `my_date`,`t1_values`.`id` AS `id` from `t1_values` +'IS NOT NULL')`,`t1_values`.`my_date` AS `my_date`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 122 OR select_id IS NULL) order by id; @@ -1597,9 +1597,9 @@ IS NOT NULL 9999-12-31 23:59:59 3 IS NOT NULL 2004-02-29 23:59:59 4 IS NOT NULL 2005-06-28 10:00:00 5 SHOW CREATE VIEW v1; -View Create View +View Create View character_set_client collation_connection v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(isnull(`t1_values`.`my_datetime`),_latin1'IS NULL',_latin1'IS NOT NULL') AS `IF(my_datetime IS NULL, 'IS NULL', -'IS NOT NULL')`,`t1_values`.`my_datetime` AS `my_datetime`,`t1_values`.`id` AS `id` from `t1_values` +'IS NOT NULL')`,`t1_values`.`my_datetime` AS `my_datetime`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 121 OR select_id IS NULL) order by id; @@ -1626,9 +1626,9 @@ IS NOT NULL 1.7976931348623e+308 3 IS NOT NULL 0 4 IS NOT NULL -1 5 SHOW CREATE VIEW v1; -View Create View +View Create View character_set_client collation_connection v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(isnull(`t1_values`.`my_double`),_latin1'IS NULL',_latin1'IS NOT NULL') AS `IF(my_double IS NULL, 'IS NULL', -'IS NOT NULL')`,`t1_values`.`my_double` AS `my_double`,`t1_values`.`id` AS `id` from `t1_values` +'IS NOT NULL')`,`t1_values`.`my_double` AS `my_double`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 120 OR select_id IS NULL) order by id; @@ -1655,9 +1655,9 @@ IS NOT NULL 9999999999999999999999999999999999.999999999999999999999999999999 3 IS NOT NULL 0.000000000000000000000000000000 4 IS NOT NULL -1.000000000000000000000000000000 5 SHOW CREATE VIEW v1; -View Create View +View Create View character_set_client collation_connection v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(isnull(`t1_values`.`my_decimal`),_latin1'IS NULL',_latin1'IS NOT NULL') AS `IF(my_decimal IS NULL, 'IS NULL', -'IS NOT NULL')`,`t1_values`.`my_decimal` AS `my_decimal`,`t1_values`.`id` AS `id` from `t1_values` +'IS NOT NULL')`,`t1_values`.`my_decimal` AS `my_decimal`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 119 OR select_id IS NULL) order by id; @@ -1684,9 +1684,9 @@ IS NOT NULL 9223372036854775807 3 IS NOT NULL 0 4 IS NOT NULL -1 5 SHOW CREATE VIEW v1; -View Create View +View Create View character_set_client collation_connection v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(isnull(`t1_values`.`my_bigint`),_latin1'IS NULL',_latin1'IS NOT NULL') AS `IF(my_bigint IS NULL, 'IS NULL', -'IS NOT NULL')`,`t1_values`.`my_bigint` AS `my_bigint`,`t1_values`.`id` AS `id` from `t1_values` +'IS NOT NULL')`,`t1_values`.`my_bigint` AS `my_bigint`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 118 OR select_id IS NULL) order by id; @@ -1713,9 +1713,9 @@ IS NOT NULL <---------1000 characters------------------------------------------- IS NOT NULL ---äÖüß@µ*$-- 4 IS NOT NULL -1 5 SHOW CREATE VIEW v1; -View Create View +View Create View character_set_client collation_connection v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(isnull(`t1_values`.`my_varbinary_1000`),_latin1'IS NULL',_latin1'IS NOT NULL') AS `IF(my_varbinary_1000 IS NULL, 'IS NULL', -'IS NOT NULL')`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` +'IS NOT NULL')`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 117 OR select_id IS NULL) order by id; @@ -1742,9 +1742,9 @@ IS NOT NULL <--------30 characters-------> 3 IS NOT NULL ---äÖüß@µ*$-- 4 IS NOT NULL -1 5 SHOW CREATE VIEW v1; -View Create View +View Create View character_set_client collation_connection v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(isnull(`t1_values`.`my_binary_30`),_latin1'IS NULL',_latin1'IS NOT NULL') AS `IF(my_binary_30 IS NULL, 'IS NULL', -'IS NOT NULL')`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` +'IS NOT NULL')`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 116 OR select_id IS NULL) order by id; @@ -1771,9 +1771,9 @@ IS NOT NULL <---------1000 characters------------------------------------------- IS NOT NULL ---äÖüß@µ*$-- 4 IS NOT NULL -1 5 SHOW CREATE VIEW v1; -View Create View +View Create View character_set_client collation_connection v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(isnull(`t1_values`.`my_varchar_1000`),_latin1'IS NULL',_latin1'IS NOT NULL') AS `IF(my_varchar_1000 IS NULL, 'IS NULL', -'IS NOT NULL')`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` +'IS NOT NULL')`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 115 OR select_id IS NULL) order by id; @@ -1800,9 +1800,9 @@ IS NOT NULL <--------30 characters-------> 3 IS NOT NULL ---äÖüß@µ*$-- 4 IS NOT NULL -1 5 SHOW CREATE VIEW v1; -View Create View +View Create View character_set_client collation_connection v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(isnull(`t1_values`.`my_char_30`),_latin1'IS NULL',_latin1'IS NOT NULL') AS `IF(my_char_30 IS NULL, 'IS NULL', -'IS NOT NULL')`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` +'IS NOT NULL')`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 114 OR select_id IS NULL) order by id; @@ -1828,8 +1828,8 @@ IS TRUE 2155 3 IS TRUE 2000 4 IS TRUE 2005 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(`t1_values`.`my_year`,_latin1'IS TRUE',_latin1'IS NOT TRUE') AS `IF(my_year, 'IS TRUE', 'IS NOT TRUE')`,`t1_values`.`my_year` AS `my_year`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(`t1_values`.`my_year`,_latin1'IS TRUE',_latin1'IS NOT TRUE') AS `IF(my_year, 'IS TRUE', 'IS NOT TRUE')`,`t1_values`.`my_year` AS `my_year`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 113 OR select_id IS NULL) order by id; @@ -1854,8 +1854,8 @@ IS TRUE 838:59:59 3 IS TRUE 13:00:00 4 IS TRUE 10:00:00 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(`t1_values`.`my_time`,_latin1'IS TRUE',_latin1'IS NOT TRUE') AS `IF(my_time, 'IS TRUE', 'IS NOT TRUE')`,`t1_values`.`my_time` AS `my_time`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(`t1_values`.`my_time`,_latin1'IS TRUE',_latin1'IS NOT TRUE') AS `IF(my_time, 'IS TRUE', 'IS NOT TRUE')`,`t1_values`.`my_time` AS `my_time`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 112 OR select_id IS NULL) order by id; @@ -1880,8 +1880,8 @@ IS TRUE 2038-01-01 02:59:59 3 IS TRUE 2004-02-29 23:59:59 4 IS TRUE 2005-06-28 10:00:00 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(`t1_values`.`my_timestamp`,_latin1'IS TRUE',_latin1'IS NOT TRUE') AS `IF(my_timestamp, 'IS TRUE', 'IS NOT TRUE')`,`t1_values`.`my_timestamp` AS `my_timestamp`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(`t1_values`.`my_timestamp`,_latin1'IS TRUE',_latin1'IS NOT TRUE') AS `IF(my_timestamp, 'IS TRUE', 'IS NOT TRUE')`,`t1_values`.`my_timestamp` AS `my_timestamp`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 111 OR select_id IS NULL) order by id; @@ -1906,8 +1906,8 @@ IS TRUE 9999-12-31 3 IS TRUE 2004-02-29 4 IS TRUE 2005-06-28 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(`t1_values`.`my_date`,_latin1'IS TRUE',_latin1'IS NOT TRUE') AS `IF(my_date, 'IS TRUE', 'IS NOT TRUE')`,`t1_values`.`my_date` AS `my_date`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(`t1_values`.`my_date`,_latin1'IS TRUE',_latin1'IS NOT TRUE') AS `IF(my_date, 'IS TRUE', 'IS NOT TRUE')`,`t1_values`.`my_date` AS `my_date`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 110 OR select_id IS NULL) order by id; @@ -1932,8 +1932,8 @@ IS TRUE 9999-12-31 23:59:59 3 IS TRUE 2004-02-29 23:59:59 4 IS TRUE 2005-06-28 10:00:00 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(`t1_values`.`my_datetime`,_latin1'IS TRUE',_latin1'IS NOT TRUE') AS `IF(my_datetime, 'IS TRUE', 'IS NOT TRUE')`,`t1_values`.`my_datetime` AS `my_datetime`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(`t1_values`.`my_datetime`,_latin1'IS TRUE',_latin1'IS NOT TRUE') AS `IF(my_datetime, 'IS TRUE', 'IS NOT TRUE')`,`t1_values`.`my_datetime` AS `my_datetime`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 109 OR select_id IS NULL) order by id; @@ -1958,8 +1958,8 @@ IS TRUE 1.7976931348623e+308 3 IS NOT TRUE 0 4 IS TRUE -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(`t1_values`.`my_double`,_latin1'IS TRUE',_latin1'IS NOT TRUE') AS `IF(my_double, 'IS TRUE', 'IS NOT TRUE')`,`t1_values`.`my_double` AS `my_double`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(`t1_values`.`my_double`,_latin1'IS TRUE',_latin1'IS NOT TRUE') AS `IF(my_double, 'IS TRUE', 'IS NOT TRUE')`,`t1_values`.`my_double` AS `my_double`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 108 OR select_id IS NULL) order by id; @@ -1984,8 +1984,8 @@ IS TRUE 9999999999999999999999999999999999.999999999999999999999999999999 3 IS NOT TRUE 0.000000000000000000000000000000 4 IS TRUE -1.000000000000000000000000000000 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(`t1_values`.`my_decimal`,_latin1'IS TRUE',_latin1'IS NOT TRUE') AS `IF(my_decimal, 'IS TRUE', 'IS NOT TRUE')`,`t1_values`.`my_decimal` AS `my_decimal`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(`t1_values`.`my_decimal`,_latin1'IS TRUE',_latin1'IS NOT TRUE') AS `IF(my_decimal, 'IS TRUE', 'IS NOT TRUE')`,`t1_values`.`my_decimal` AS `my_decimal`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 107 OR select_id IS NULL) order by id; @@ -2010,8 +2010,8 @@ IS TRUE 9223372036854775807 3 IS NOT TRUE 0 4 IS TRUE -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(`t1_values`.`my_bigint`,_latin1'IS TRUE',_latin1'IS NOT TRUE') AS `IF(my_bigint, 'IS TRUE', 'IS NOT TRUE')`,`t1_values`.`my_bigint` AS `my_bigint`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(`t1_values`.`my_bigint`,_latin1'IS TRUE',_latin1'IS NOT TRUE') AS `IF(my_bigint, 'IS TRUE', 'IS NOT TRUE')`,`t1_values`.`my_bigint` AS `my_bigint`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 106 OR select_id IS NULL) order by id; @@ -2036,8 +2036,8 @@ IS NOT TRUE <---------1000 characters------------------------------------------- IS NOT TRUE ---äÖüß@µ*$-- 4 IS TRUE -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(`t1_values`.`my_varbinary_1000`,_latin1'IS TRUE',_latin1'IS NOT TRUE') AS `IF(my_varbinary_1000, 'IS TRUE', 'IS NOT TRUE')`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(`t1_values`.`my_varbinary_1000`,_latin1'IS TRUE',_latin1'IS NOT TRUE') AS `IF(my_varbinary_1000, 'IS TRUE', 'IS NOT TRUE')`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 105 OR select_id IS NULL) order by id; @@ -2067,8 +2067,8 @@ Warning 1292 Truncated incorrect DOUBLE value: '<--------30 characters------->' Warning 1292 Truncated incorrect DOUBLE value: ' ---äÖüß@µ*$-- ' Warning 1292 Truncated incorrect DOUBLE value: '-1' SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(`t1_values`.`my_binary_30`,_latin1'IS TRUE',_latin1'IS NOT TRUE') AS `IF(my_binary_30, 'IS TRUE', 'IS NOT TRUE')`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(`t1_values`.`my_binary_30`,_latin1'IS TRUE',_latin1'IS NOT TRUE') AS `IF(my_binary_30, 'IS TRUE', 'IS NOT TRUE')`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 104 OR select_id IS NULL) order by id; @@ -2098,8 +2098,8 @@ IS NOT TRUE <---------1000 characters------------------------------------------- IS NOT TRUE ---äÖüß@µ*$-- 4 IS TRUE -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(`t1_values`.`my_varchar_1000`,_latin1'IS TRUE',_latin1'IS NOT TRUE') AS `IF(my_varchar_1000, 'IS TRUE', 'IS NOT TRUE')`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(`t1_values`.`my_varchar_1000`,_latin1'IS TRUE',_latin1'IS NOT TRUE') AS `IF(my_varchar_1000, 'IS TRUE', 'IS NOT TRUE')`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 103 OR select_id IS NULL) order by id; @@ -2127,8 +2127,8 @@ Warnings: Warning 1292 Truncated incorrect DOUBLE value: '<--------30 characters------->' Warning 1292 Truncated incorrect DOUBLE value: ' ---äÖüß@µ*$-- ' SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(`t1_values`.`my_char_30`,_latin1'IS TRUE',_latin1'IS NOT TRUE') AS `IF(my_char_30, 'IS TRUE', 'IS NOT TRUE')`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select if(`t1_values`.`my_char_30`,_latin1'IS TRUE',_latin1'IS NOT TRUE') AS `IF(my_char_30, 'IS TRUE', 'IS NOT TRUE')`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 102 OR select_id IS NULL) order by id; @@ -2156,8 +2156,8 @@ NULL NULL 1 ---???????÷@??*$-- ---äÖüß@µ*$-- 4 -1 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select convert(`t1_values`.`my_varbinary_1000` using koi8r) AS `CONVERT(my_varbinary_1000 USING koi8r)`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select convert(`t1_values`.`my_varbinary_1000` using koi8r) AS `CONVERT(my_varbinary_1000 USING koi8r)`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 101 OR select_id IS NULL) order by id; @@ -2182,8 +2182,8 @@ NULL NULL 1 ---???????÷@??*$-- ---äÖüß@µ*$-- 4 -1 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select convert(`t1_values`.`my_binary_30` using koi8r) AS `CONVERT(my_binary_30 USING koi8r)`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select convert(`t1_values`.`my_binary_30` using koi8r) AS `CONVERT(my_binary_30 USING koi8r)`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 100 OR select_id IS NULL) order by id; @@ -2208,8 +2208,8 @@ NULL NULL 1 ---????????@??*$-- ---äÖüß@µ*$-- 4 -1 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select convert(`t1_values`.`my_varchar_1000` using koi8r) AS `CONVERT(my_varchar_1000 USING koi8r)`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select convert(`t1_values`.`my_varchar_1000` using koi8r) AS `CONVERT(my_varchar_1000 USING koi8r)`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 99 OR select_id IS NULL) order by id; @@ -2234,8 +2234,8 @@ NULL NULL 1 ---????????@??*$-- ---äÖüß@µ*$-- 4 -1 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select convert(`t1_values`.`my_char_30` using koi8r) AS `CONVERT(my_char_30 USING koi8r)`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select convert(`t1_values`.`my_char_30` using koi8r) AS `CONVERT(my_char_30 USING koi8r)`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 98 OR select_id IS NULL) order by id; @@ -2260,8 +2260,8 @@ NULL NULL 1 ---äÖüß@µ*$-- ---äÖüß@µ*$-- 4 -1 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select convert(`t1_values`.`my_varbinary_1000` using utf8) AS `CONVERT(my_varbinary_1000 USING utf8)`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select convert(`t1_values`.`my_varbinary_1000` using utf8) AS `CONVERT(my_varbinary_1000 USING utf8)`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 97 OR select_id IS NULL) order by id; @@ -2286,8 +2286,8 @@ NULL NULL 1 ---äÖüß@µ*$-- ---äÖüß@µ*$-- 4 -1 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select convert(`t1_values`.`my_binary_30` using utf8) AS `CONVERT(my_binary_30 USING utf8)`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select convert(`t1_values`.`my_binary_30` using utf8) AS `CONVERT(my_binary_30 USING utf8)`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 96 OR select_id IS NULL) order by id; @@ -2312,8 +2312,8 @@ NULL NULL 1 ---äÖüß@µ*$-- ---äÖüß@µ*$-- 4 -1 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select convert(`t1_values`.`my_varchar_1000` using utf8) AS `CONVERT(my_varchar_1000 USING utf8)`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select convert(`t1_values`.`my_varchar_1000` using utf8) AS `CONVERT(my_varchar_1000 USING utf8)`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 95 OR select_id IS NULL) order by id; @@ -2338,8 +2338,8 @@ NULL NULL 1 ---äÖüß@µ*$-- ---äÖüß@µ*$-- 4 -1 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select convert(`t1_values`.`my_char_30` using utf8) AS `CONVERT(my_char_30 USING utf8)`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select convert(`t1_values`.`my_char_30` using utf8) AS `CONVERT(my_char_30 USING utf8)`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 94 OR select_id IS NULL) order by id; @@ -2364,8 +2364,8 @@ NULL NULL 1 2000 2000 4 2005 2005 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_year` as unsigned) AS `CAST(my_year AS UNSIGNED INTEGER)`,`t1_values`.`my_year` AS `my_year`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_year` as unsigned) AS `CAST(my_year AS UNSIGNED INTEGER)`,`t1_values`.`my_year` AS `my_year`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 93 OR select_id IS NULL) order by id; @@ -2385,34 +2385,22 @@ my_time, id FROM t1_values WHERE select_id = 92 OR select_id IS NULL order by id; CAST(my_time AS UNSIGNED INTEGER) my_time id NULL NULL 1 -18446744073709550778 -838:59:59 2 -838 838:59:59 3 -13 13:00:00 4 -10 10:00:00 5 -Warnings: -Warning 1292 Truncated incorrect INTEGER value: '-838:59:59' -Warning 1105 Cast to unsigned converted negative integer to it's positive complement -Warning 1292 Truncated incorrect INTEGER value: '838:59:59' -Warning 1292 Truncated incorrect INTEGER value: '13:00:00' -Warning 1292 Truncated incorrect INTEGER value: '10:00:00' +18446744073701165657 -838:59:59 2 +8385959 838:59:59 3 +130000 13:00:00 4 +100000 10:00:00 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_time` as unsigned) AS `CAST(my_time AS UNSIGNED INTEGER)`,`t1_values`.`my_time` AS `my_time`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_time` as unsigned) AS `CAST(my_time AS UNSIGNED INTEGER)`,`t1_values`.`my_time` AS `my_time`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 92 OR select_id IS NULL) order by id; CAST(my_time AS UNSIGNED INTEGER) my_time id NULL NULL 1 -18446744073709550778 -838:59:59 2 -838 838:59:59 3 -13 13:00:00 4 -10 10:00:00 5 -Warnings: -Warning 1292 Truncated incorrect INTEGER value: '-838:59:59' -Warning 1105 Cast to unsigned converted negative integer to it's positive complement -Warning 1292 Truncated incorrect INTEGER value: '838:59:59' -Warning 1292 Truncated incorrect INTEGER value: '13:00:00' -Warning 1292 Truncated incorrect INTEGER value: '10:00:00' +18446744073701165657 -838:59:59 2 +8385959 838:59:59 3 +130000 13:00:00 4 +100000 10:00:00 5 DROP VIEW v1; @@ -2423,34 +2411,22 @@ my_timestamp, id FROM t1_values WHERE select_id = 91 OR select_id IS NULL order by id; CAST(my_timestamp AS UNSIGNED INTEGER) my_timestamp id 0 0000-00-00 00:00:00 1 -1970 1970-01-01 03:00:01 2 -2038 2038-01-01 02:59:59 3 -2004 2004-02-29 23:59:59 4 -2005 2005-06-28 10:00:00 5 -Warnings: -Warning 1292 Truncated incorrect INTEGER value: '0000-00-00 00:00:00' -Warning 1292 Truncated incorrect INTEGER value: '1970-01-01 03:00:01' -Warning 1292 Truncated incorrect INTEGER value: '2038-01-01 02:59:59' -Warning 1292 Truncated incorrect INTEGER value: '2004-02-29 23:59:59' -Warning 1292 Truncated incorrect INTEGER value: '2005-06-28 10:00:00' +19700101030001 1970-01-01 03:00:01 2 +20380101025959 2038-01-01 02:59:59 3 +20040229235959 2004-02-29 23:59:59 4 +20050628100000 2005-06-28 10:00:00 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_timestamp` as unsigned) AS `CAST(my_timestamp AS UNSIGNED INTEGER)`,`t1_values`.`my_timestamp` AS `my_timestamp`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_timestamp` as unsigned) AS `CAST(my_timestamp AS UNSIGNED INTEGER)`,`t1_values`.`my_timestamp` AS `my_timestamp`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 91 OR select_id IS NULL) order by id; CAST(my_timestamp AS UNSIGNED INTEGER) my_timestamp id 0 0000-00-00 00:00:00 1 -1970 1970-01-01 03:00:01 2 -2038 2038-01-01 02:59:59 3 -2004 2004-02-29 23:59:59 4 -2005 2005-06-28 10:00:00 5 -Warnings: -Warning 1292 Truncated incorrect INTEGER value: '0000-00-00 00:00:00' -Warning 1292 Truncated incorrect INTEGER value: '1970-01-01 03:00:01' -Warning 1292 Truncated incorrect INTEGER value: '2038-01-01 02:59:59' -Warning 1292 Truncated incorrect INTEGER value: '2004-02-29 23:59:59' -Warning 1292 Truncated incorrect INTEGER value: '2005-06-28 10:00:00' +19700101030001 1970-01-01 03:00:01 2 +20380101025959 2038-01-01 02:59:59 3 +20040229235959 2004-02-29 23:59:59 4 +20050628100000 2005-06-28 10:00:00 5 DROP VIEW v1; @@ -2461,32 +2437,22 @@ my_date, id FROM t1_values WHERE select_id = 90 OR select_id IS NULL order by id; CAST(my_date AS UNSIGNED INTEGER) my_date id NULL NULL 1 -1 0001-01-01 2 -9999 9999-12-31 3 -2004 2004-02-29 4 -2005 2005-06-28 5 -Warnings: -Warning 1292 Truncated incorrect INTEGER value: '0001-01-01' -Warning 1292 Truncated incorrect INTEGER value: '9999-12-31' -Warning 1292 Truncated incorrect INTEGER value: '2004-02-29' -Warning 1292 Truncated incorrect INTEGER value: '2005-06-28' +10101 0001-01-01 2 +99991231 9999-12-31 3 +20040229 2004-02-29 4 +20050628 2005-06-28 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_date` as unsigned) AS `CAST(my_date AS UNSIGNED INTEGER)`,`t1_values`.`my_date` AS `my_date`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_date` as unsigned) AS `CAST(my_date AS UNSIGNED INTEGER)`,`t1_values`.`my_date` AS `my_date`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 90 OR select_id IS NULL) order by id; CAST(my_date AS UNSIGNED INTEGER) my_date id NULL NULL 1 -1 0001-01-01 2 -9999 9999-12-31 3 -2004 2004-02-29 4 -2005 2005-06-28 5 -Warnings: -Warning 1292 Truncated incorrect INTEGER value: '0001-01-01' -Warning 1292 Truncated incorrect INTEGER value: '9999-12-31' -Warning 1292 Truncated incorrect INTEGER value: '2004-02-29' -Warning 1292 Truncated incorrect INTEGER value: '2005-06-28' +10101 0001-01-01 2 +99991231 9999-12-31 3 +20040229 2004-02-29 4 +20050628 2005-06-28 5 DROP VIEW v1; @@ -2497,32 +2463,22 @@ my_datetime, id FROM t1_values WHERE select_id = 89 OR select_id IS NULL order by id; CAST(my_datetime AS UNSIGNED INTEGER) my_datetime id NULL NULL 1 -1 0001-01-01 00:00:00 2 -9999 9999-12-31 23:59:59 3 -2004 2004-02-29 23:59:59 4 -2005 2005-06-28 10:00:00 5 -Warnings: -Warning 1292 Truncated incorrect INTEGER value: '0001-01-01 00:00:00' -Warning 1292 Truncated incorrect INTEGER value: '9999-12-31 23:59:59' -Warning 1292 Truncated incorrect INTEGER value: '2004-02-29 23:59:59' -Warning 1292 Truncated incorrect INTEGER value: '2005-06-28 10:00:00' +10101000000 0001-01-01 00:00:00 2 +99991231235959 9999-12-31 23:59:59 3 +20040229235959 2004-02-29 23:59:59 4 +20050628100000 2005-06-28 10:00:00 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_datetime` as unsigned) AS `CAST(my_datetime AS UNSIGNED INTEGER)`,`t1_values`.`my_datetime` AS `my_datetime`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_datetime` as unsigned) AS `CAST(my_datetime AS UNSIGNED INTEGER)`,`t1_values`.`my_datetime` AS `my_datetime`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 89 OR select_id IS NULL) order by id; CAST(my_datetime AS UNSIGNED INTEGER) my_datetime id NULL NULL 1 -1 0001-01-01 00:00:00 2 -9999 9999-12-31 23:59:59 3 -2004 2004-02-29 23:59:59 4 -2005 2005-06-28 10:00:00 5 -Warnings: -Warning 1292 Truncated incorrect INTEGER value: '0001-01-01 00:00:00' -Warning 1292 Truncated incorrect INTEGER value: '9999-12-31 23:59:59' -Warning 1292 Truncated incorrect INTEGER value: '2004-02-29 23:59:59' -Warning 1292 Truncated incorrect INTEGER value: '2005-06-28 10:00:00' +10101000000 0001-01-01 00:00:00 2 +99991231235959 9999-12-31 23:59:59 3 +20040229235959 2004-02-29 23:59:59 4 +20050628100000 2005-06-28 10:00:00 5 DROP VIEW v1; @@ -2542,8 +2498,8 @@ Error 1292 Truncated incorrect DECIMAL value: '' Error 1292 Truncated incorrect DECIMAL value: '' Error 1292 Truncated incorrect DECIMAL value: '' SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_decimal` as unsigned) AS `CAST(my_decimal AS UNSIGNED INTEGER)`,`t1_values`.`my_decimal` AS `my_decimal`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_decimal` as unsigned) AS `CAST(my_decimal AS UNSIGNED INTEGER)`,`t1_values`.`my_decimal` AS `my_decimal`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 88 OR select_id IS NULL) order by id; @@ -2572,8 +2528,8 @@ NULL NULL 1 0 0 4 18446744073709551615 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_bigint` as unsigned) AS `CAST(my_bigint AS UNSIGNED INTEGER)`,`t1_values`.`my_bigint` AS `my_bigint`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_bigint` as unsigned) AS `CAST(my_bigint AS UNSIGNED INTEGER)`,`t1_values`.`my_bigint` AS `my_bigint`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 87 OR select_id IS NULL) order by id; @@ -2603,8 +2559,8 @@ Warning 1292 Truncated incorrect INTEGER value: '<---------1000 characters------ Warning 1292 Truncated incorrect INTEGER value: ' ---äÖüß@µ*$-- ' Warning 1105 Cast to unsigned converted negative integer to it's positive complement SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varbinary_1000` as unsigned) AS `CAST(my_varbinary_1000 AS UNSIGNED INTEGER)`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varbinary_1000` as unsigned) AS `CAST(my_varbinary_1000 AS UNSIGNED INTEGER)`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 86 OR select_id IS NULL) order by id; @@ -2640,8 +2596,8 @@ Warning 1292 Truncated incorrect INTEGER value: ' --- Warning 1292 Truncated incorrect INTEGER value: '-1' Warning 1105 Cast to unsigned converted negative integer to it's positive complement SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_binary_30` as unsigned) AS `CAST(my_binary_30 AS UNSIGNED INTEGER)`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_binary_30` as unsigned) AS `CAST(my_binary_30 AS UNSIGNED INTEGER)`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 85 OR select_id IS NULL) order by id; @@ -2677,8 +2633,8 @@ Warning 1292 Truncated incorrect INTEGER value: '<---------1000 characters------ Warning 1292 Truncated incorrect INTEGER value: ' ---äÖüß@µ*$-- ' Warning 1105 Cast to unsigned converted negative integer to it's positive complement SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varchar_1000` as unsigned) AS `CAST(my_varchar_1000 AS UNSIGNED INTEGER)`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varchar_1000` as unsigned) AS `CAST(my_varchar_1000 AS UNSIGNED INTEGER)`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 84 OR select_id IS NULL) order by id; @@ -2713,8 +2669,8 @@ Warning 1292 Truncated incorrect INTEGER value: '<--------30 characters------->' Warning 1292 Truncated incorrect INTEGER value: ' ---äÖüß@µ*$--' Warning 1105 Cast to unsigned converted negative integer to it's positive complement SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_char_30` as unsigned) AS `CAST(my_char_30 AS UNSIGNED INTEGER)`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_char_30` as unsigned) AS `CAST(my_char_30 AS UNSIGNED INTEGER)`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 83 OR select_id IS NULL) order by id; @@ -2744,8 +2700,8 @@ NULL NULL 1 2000 2000 4 2005 2005 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_year` as signed) AS `CAST(my_year AS SIGNED INTEGER)`,`t1_values`.`my_year` AS `my_year`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_year` as signed) AS `CAST(my_year AS SIGNED INTEGER)`,`t1_values`.`my_year` AS `my_year`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 82 OR select_id IS NULL) order by id; @@ -2765,32 +2721,22 @@ my_time, id FROM t1_values WHERE select_id = 81 OR select_id IS NULL order by id; CAST(my_time AS SIGNED INTEGER) my_time id NULL NULL 1 --838 -838:59:59 2 -838 838:59:59 3 -13 13:00:00 4 -10 10:00:00 5 -Warnings: -Warning 1292 Truncated incorrect INTEGER value: '-838:59:59' -Warning 1292 Truncated incorrect INTEGER value: '838:59:59' -Warning 1292 Truncated incorrect INTEGER value: '13:00:00' -Warning 1292 Truncated incorrect INTEGER value: '10:00:00' +-8385959 -838:59:59 2 +8385959 838:59:59 3 +130000 13:00:00 4 +100000 10:00:00 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_time` as signed) AS `CAST(my_time AS SIGNED INTEGER)`,`t1_values`.`my_time` AS `my_time`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_time` as signed) AS `CAST(my_time AS SIGNED INTEGER)`,`t1_values`.`my_time` AS `my_time`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 81 OR select_id IS NULL) order by id; CAST(my_time AS SIGNED INTEGER) my_time id NULL NULL 1 --838 -838:59:59 2 -838 838:59:59 3 -13 13:00:00 4 -10 10:00:00 5 -Warnings: -Warning 1292 Truncated incorrect INTEGER value: '-838:59:59' -Warning 1292 Truncated incorrect INTEGER value: '838:59:59' -Warning 1292 Truncated incorrect INTEGER value: '13:00:00' -Warning 1292 Truncated incorrect INTEGER value: '10:00:00' +-8385959 -838:59:59 2 +8385959 838:59:59 3 +130000 13:00:00 4 +100000 10:00:00 5 DROP VIEW v1; @@ -2801,34 +2747,22 @@ my_timestamp, id FROM t1_values WHERE select_id = 80 OR select_id IS NULL order by id; CAST(my_timestamp AS SIGNED INTEGER) my_timestamp id 0 0000-00-00 00:00:00 1 -1970 1970-01-01 03:00:01 2 -2038 2038-01-01 02:59:59 3 -2004 2004-02-29 23:59:59 4 -2005 2005-06-28 10:00:00 5 -Warnings: -Warning 1292 Truncated incorrect INTEGER value: '0000-00-00 00:00:00' -Warning 1292 Truncated incorrect INTEGER value: '1970-01-01 03:00:01' -Warning 1292 Truncated incorrect INTEGER value: '2038-01-01 02:59:59' -Warning 1292 Truncated incorrect INTEGER value: '2004-02-29 23:59:59' -Warning 1292 Truncated incorrect INTEGER value: '2005-06-28 10:00:00' +19700101030001 1970-01-01 03:00:01 2 +20380101025959 2038-01-01 02:59:59 3 +20040229235959 2004-02-29 23:59:59 4 +20050628100000 2005-06-28 10:00:00 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_timestamp` as signed) AS `CAST(my_timestamp AS SIGNED INTEGER)`,`t1_values`.`my_timestamp` AS `my_timestamp`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_timestamp` as signed) AS `CAST(my_timestamp AS SIGNED INTEGER)`,`t1_values`.`my_timestamp` AS `my_timestamp`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 80 OR select_id IS NULL) order by id; CAST(my_timestamp AS SIGNED INTEGER) my_timestamp id 0 0000-00-00 00:00:00 1 -1970 1970-01-01 03:00:01 2 -2038 2038-01-01 02:59:59 3 -2004 2004-02-29 23:59:59 4 -2005 2005-06-28 10:00:00 5 -Warnings: -Warning 1292 Truncated incorrect INTEGER value: '0000-00-00 00:00:00' -Warning 1292 Truncated incorrect INTEGER value: '1970-01-01 03:00:01' -Warning 1292 Truncated incorrect INTEGER value: '2038-01-01 02:59:59' -Warning 1292 Truncated incorrect INTEGER value: '2004-02-29 23:59:59' -Warning 1292 Truncated incorrect INTEGER value: '2005-06-28 10:00:00' +19700101030001 1970-01-01 03:00:01 2 +20380101025959 2038-01-01 02:59:59 3 +20040229235959 2004-02-29 23:59:59 4 +20050628100000 2005-06-28 10:00:00 5 DROP VIEW v1; @@ -2839,32 +2773,22 @@ my_date, id FROM t1_values WHERE select_id = 79 OR select_id IS NULL order by id; CAST(my_date AS SIGNED INTEGER) my_date id NULL NULL 1 -1 0001-01-01 2 -9999 9999-12-31 3 -2004 2004-02-29 4 -2005 2005-06-28 5 -Warnings: -Warning 1292 Truncated incorrect INTEGER value: '0001-01-01' -Warning 1292 Truncated incorrect INTEGER value: '9999-12-31' -Warning 1292 Truncated incorrect INTEGER value: '2004-02-29' -Warning 1292 Truncated incorrect INTEGER value: '2005-06-28' +10101 0001-01-01 2 +99991231 9999-12-31 3 +20040229 2004-02-29 4 +20050628 2005-06-28 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_date` as signed) AS `CAST(my_date AS SIGNED INTEGER)`,`t1_values`.`my_date` AS `my_date`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_date` as signed) AS `CAST(my_date AS SIGNED INTEGER)`,`t1_values`.`my_date` AS `my_date`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 79 OR select_id IS NULL) order by id; CAST(my_date AS SIGNED INTEGER) my_date id NULL NULL 1 -1 0001-01-01 2 -9999 9999-12-31 3 -2004 2004-02-29 4 -2005 2005-06-28 5 -Warnings: -Warning 1292 Truncated incorrect INTEGER value: '0001-01-01' -Warning 1292 Truncated incorrect INTEGER value: '9999-12-31' -Warning 1292 Truncated incorrect INTEGER value: '2004-02-29' -Warning 1292 Truncated incorrect INTEGER value: '2005-06-28' +10101 0001-01-01 2 +99991231 9999-12-31 3 +20040229 2004-02-29 4 +20050628 2005-06-28 5 DROP VIEW v1; @@ -2875,32 +2799,22 @@ my_datetime, id FROM t1_values WHERE select_id = 78 OR select_id IS NULL order by id; CAST(my_datetime AS SIGNED INTEGER) my_datetime id NULL NULL 1 -1 0001-01-01 00:00:00 2 -9999 9999-12-31 23:59:59 3 -2004 2004-02-29 23:59:59 4 -2005 2005-06-28 10:00:00 5 -Warnings: -Warning 1292 Truncated incorrect INTEGER value: '0001-01-01 00:00:00' -Warning 1292 Truncated incorrect INTEGER value: '9999-12-31 23:59:59' -Warning 1292 Truncated incorrect INTEGER value: '2004-02-29 23:59:59' -Warning 1292 Truncated incorrect INTEGER value: '2005-06-28 10:00:00' +10101000000 0001-01-01 00:00:00 2 +99991231235959 9999-12-31 23:59:59 3 +20040229235959 2004-02-29 23:59:59 4 +20050628100000 2005-06-28 10:00:00 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_datetime` as signed) AS `CAST(my_datetime AS SIGNED INTEGER)`,`t1_values`.`my_datetime` AS `my_datetime`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_datetime` as signed) AS `CAST(my_datetime AS SIGNED INTEGER)`,`t1_values`.`my_datetime` AS `my_datetime`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 78 OR select_id IS NULL) order by id; CAST(my_datetime AS SIGNED INTEGER) my_datetime id NULL NULL 1 -1 0001-01-01 00:00:00 2 -9999 9999-12-31 23:59:59 3 -2004 2004-02-29 23:59:59 4 -2005 2005-06-28 10:00:00 5 -Warnings: -Warning 1292 Truncated incorrect INTEGER value: '0001-01-01 00:00:00' -Warning 1292 Truncated incorrect INTEGER value: '9999-12-31 23:59:59' -Warning 1292 Truncated incorrect INTEGER value: '2004-02-29 23:59:59' -Warning 1292 Truncated incorrect INTEGER value: '2005-06-28 10:00:00' +10101000000 0001-01-01 00:00:00 2 +99991231235959 9999-12-31 23:59:59 3 +20040229235959 2004-02-29 23:59:59 4 +20050628100000 2005-06-28 10:00:00 5 DROP VIEW v1; @@ -2919,8 +2833,8 @@ Warnings: Warning 1292 Truncated incorrect INTEGER value: '-1.7976931348623e+308' Warning 1292 Truncated incorrect INTEGER value: '1.7976931348623e+308' SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_double` as signed) AS `CAST(my_double AS SIGNED INTEGER)`,`t1_values`.`my_double` AS `my_double`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_double` as signed) AS `CAST(my_double AS SIGNED INTEGER)`,`t1_values`.`my_double` AS `my_double`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 77 OR select_id IS NULL) order by id; @@ -2943,23 +2857,23 @@ my_decimal, id FROM t1_values WHERE select_id = 76 OR select_id IS NULL order by id; CAST(my_decimal AS SIGNED INTEGER) my_decimal id NULL NULL 1 --10000000000000000 -9999999999999999999999999999999999.999999999999999999999999999999 2 -10000000000000000 9999999999999999999999999999999999.999999999999999999999999999999 3 +-9223372036854775808 -9999999999999999999999999999999999.999999999999999999999999999999 2 +9223372036854775807 9999999999999999999999999999999999.999999999999999999999999999999 3 0 0.000000000000000000000000000000 4 -1 -1.000000000000000000000000000000 5 Warnings: Error 1292 Truncated incorrect DECIMAL value: '' Error 1292 Truncated incorrect DECIMAL value: '' SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_decimal` as signed) AS `CAST(my_decimal AS SIGNED INTEGER)`,`t1_values`.`my_decimal` AS `my_decimal`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_decimal` as signed) AS `CAST(my_decimal AS SIGNED INTEGER)`,`t1_values`.`my_decimal` AS `my_decimal`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 76 OR select_id IS NULL) order by id; CAST(my_decimal AS SIGNED INTEGER) my_decimal id NULL NULL 1 --10000000000000000 -9999999999999999999999999999999999.999999999999999999999999999999 2 -10000000000000000 9999999999999999999999999999999999.999999999999999999999999999999 3 +-9223372036854775808 -9999999999999999999999999999999999.999999999999999999999999999999 2 +9223372036854775807 9999999999999999999999999999999999.999999999999999999999999999999 3 0 0.000000000000000000000000000000 4 -1 -1.000000000000000000000000000000 5 Warnings: @@ -2980,8 +2894,8 @@ NULL NULL 1 0 0 4 -1 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_bigint` as signed) AS `CAST(my_bigint AS SIGNED INTEGER)`,`t1_values`.`my_bigint` AS `my_bigint`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_bigint` as signed) AS `CAST(my_bigint AS SIGNED INTEGER)`,`t1_values`.`my_bigint` AS `my_bigint`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 75 OR select_id IS NULL) order by id; @@ -3010,8 +2924,8 @@ Warning 1292 Truncated incorrect INTEGER value: '' Warning 1292 Truncated incorrect INTEGER value: '<---------1000 characters-------------------------------------------------------------------------------------------------------' Warning 1292 Truncated incorrect INTEGER value: ' ---äÖüß@µ*$-- ' SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varbinary_1000` as signed) AS `CAST(my_varbinary_1000 AS SIGNED INTEGER)`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varbinary_1000` as signed) AS `CAST(my_varbinary_1000 AS SIGNED INTEGER)`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 74 OR select_id IS NULL) order by id; @@ -3045,8 +2959,8 @@ Warning 1292 Truncated incorrect INTEGER value: '<--------30 characters------->' Warning 1292 Truncated incorrect INTEGER value: ' ---äÖüß@µ*$-- ' Warning 1292 Truncated incorrect INTEGER value: '-1' SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_binary_30` as signed) AS `CAST(my_binary_30 AS SIGNED INTEGER)`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_binary_30` as signed) AS `CAST(my_binary_30 AS SIGNED INTEGER)`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 73 OR select_id IS NULL) order by id; @@ -3080,8 +2994,8 @@ Warning 1292 Truncated incorrect INTEGER value: '' Warning 1292 Truncated incorrect INTEGER value: '<---------1000 characters-------------------------------------------------------------------------------------------------------' Warning 1292 Truncated incorrect INTEGER value: ' ---äÖüß@µ*$-- ' SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varchar_1000` as signed) AS `CAST(my_varchar_1000 AS SIGNED INTEGER)`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varchar_1000` as signed) AS `CAST(my_varchar_1000 AS SIGNED INTEGER)`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 72 OR select_id IS NULL) order by id; @@ -3114,8 +3028,8 @@ Warning 1292 Truncated incorrect INTEGER value: '' Warning 1292 Truncated incorrect INTEGER value: '<--------30 characters------->' Warning 1292 Truncated incorrect INTEGER value: ' ---äÖüß@µ*$--' SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_char_30` as signed) AS `CAST(my_char_30 AS SIGNED INTEGER)`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_char_30` as signed) AS `CAST(my_char_30 AS SIGNED INTEGER)`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 71 OR select_id IS NULL) order by id; @@ -3132,287 +3046,255 @@ Warning 1292 Truncated incorrect INTEGER value: ' --- DROP VIEW v1; -CREATE VIEW v1 AS SELECT CAST(my_year AS DECIMAL), +CREATE VIEW v1 AS SELECT CAST(my_year AS DECIMAL(37,2)), my_year, id FROM t1_values; -SELECT CAST(my_year AS DECIMAL), +SELECT CAST(my_year AS DECIMAL(37,2)), my_year, id FROM t1_values WHERE select_id = 70 OR select_id IS NULL order by id; -CAST(my_year AS DECIMAL) my_year id +CAST(my_year AS DECIMAL(37,2)) my_year id NULL NULL 1 -1901 1901 2 -2155 2155 3 -2000 2000 4 -2005 2005 5 +1901.00 1901 2 +2155.00 2155 3 +2000.00 2000 4 +2005.00 2005 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_year` as decimal) AS `CAST(my_year AS DECIMAL)`,`t1_values`.`my_year` AS `my_year`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_year` as decimal(37,2)) AS `CAST(my_year AS DECIMAL(37,2))`,`t1_values`.`my_year` AS `my_year`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 70 OR select_id IS NULL) order by id; -CAST(my_year AS DECIMAL) my_year id +CAST(my_year AS DECIMAL(37,2)) my_year id NULL NULL 1 -1901 1901 2 -2155 2155 3 -2000 2000 4 -2005 2005 5 +1901.00 1901 2 +2155.00 2155 3 +2000.00 2000 4 +2005.00 2005 5 DROP VIEW v1; -CREATE VIEW v1 AS SELECT CAST(my_time AS DECIMAL), +CREATE VIEW v1 AS SELECT CAST(my_time AS DECIMAL(37,2)), my_time, id FROM t1_values; -SELECT CAST(my_time AS DECIMAL), +SELECT CAST(my_time AS DECIMAL(37,2)), my_time, id FROM t1_values WHERE select_id = 69 OR select_id IS NULL order by id; -CAST(my_time AS DECIMAL) my_time id +CAST(my_time AS DECIMAL(37,2)) my_time id NULL NULL 1 --8385959 -838:59:59 2 -8385959 838:59:59 3 -130000 13:00:00 4 -100000 10:00:00 5 +-8385959.00 -838:59:59 2 +8385959.00 838:59:59 3 +130000.00 13:00:00 4 +100000.00 10:00:00 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_time` as decimal) AS `CAST(my_time AS DECIMAL)`,`t1_values`.`my_time` AS `my_time`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_time` as decimal(37,2)) AS `CAST(my_time AS DECIMAL(37,2))`,`t1_values`.`my_time` AS `my_time`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 69 OR select_id IS NULL) order by id; -CAST(my_time AS DECIMAL) my_time id +CAST(my_time AS DECIMAL(37,2)) my_time id NULL NULL 1 --8385959 -838:59:59 2 -8385959 838:59:59 3 -130000 13:00:00 4 -100000 10:00:00 5 +-8385959.00 -838:59:59 2 +8385959.00 838:59:59 3 +130000.00 13:00:00 4 +100000.00 10:00:00 5 DROP VIEW v1; -CREATE VIEW v1 AS SELECT CAST(my_timestamp AS DECIMAL), +CREATE VIEW v1 AS SELECT CAST(my_timestamp AS DECIMAL(37,2)), my_timestamp, id FROM t1_values; -SELECT CAST(my_timestamp AS DECIMAL), +SELECT CAST(my_timestamp AS DECIMAL(37,2)), my_timestamp, id FROM t1_values WHERE select_id = 68 OR select_id IS NULL order by id; -CAST(my_timestamp AS DECIMAL) my_timestamp id -0 0000-00-00 00:00:00 1 -9999999999 1970-01-01 03:00:01 2 -9999999999 2038-01-01 02:59:59 3 -9999999999 2004-02-29 23:59:59 4 -9999999999 2005-06-28 10:00:00 5 -Warnings: -Error 1264 Out of range value for column 'CAST(my_timestamp AS DECIMAL)' at row 1 -Error 1264 Out of range value for column 'CAST(my_timestamp AS DECIMAL)' at row 1 -Error 1264 Out of range value for column 'CAST(my_timestamp AS DECIMAL)' at row 1 -Error 1264 Out of range value for column 'CAST(my_timestamp AS DECIMAL)' at row 1 +CAST(my_timestamp AS DECIMAL(37,2)) my_timestamp id +0.00 0000-00-00 00:00:00 1 +19700101030001.00 1970-01-01 03:00:01 2 +20380101025959.00 2038-01-01 02:59:59 3 +20040229235959.00 2004-02-29 23:59:59 4 +20050628100000.00 2005-06-28 10:00:00 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_timestamp` as decimal) AS `CAST(my_timestamp AS DECIMAL)`,`t1_values`.`my_timestamp` AS `my_timestamp`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_timestamp` as decimal(37,2)) AS `CAST(my_timestamp AS DECIMAL(37,2))`,`t1_values`.`my_timestamp` AS `my_timestamp`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 68 OR select_id IS NULL) order by id; -CAST(my_timestamp AS DECIMAL) my_timestamp id -0 0000-00-00 00:00:00 1 -9999999999 1970-01-01 03:00:01 2 -9999999999 2038-01-01 02:59:59 3 -9999999999 2004-02-29 23:59:59 4 -9999999999 2005-06-28 10:00:00 5 -Warnings: -Error 1264 Out of range value for column 'CAST(my_timestamp AS DECIMAL)' at row 1 -Error 1264 Out of range value for column 'CAST(my_timestamp AS DECIMAL)' at row 1 -Error 1264 Out of range value for column 'CAST(my_timestamp AS DECIMAL)' at row 1 -Error 1264 Out of range value for column 'CAST(my_timestamp AS DECIMAL)' at row 1 +CAST(my_timestamp AS DECIMAL(37,2)) my_timestamp id +0.00 0000-00-00 00:00:00 1 +19700101030001.00 1970-01-01 03:00:01 2 +20380101025959.00 2038-01-01 02:59:59 3 +20040229235959.00 2004-02-29 23:59:59 4 +20050628100000.00 2005-06-28 10:00:00 5 DROP VIEW v1; -CREATE VIEW v1 AS SELECT CAST(my_date AS DECIMAL), +CREATE VIEW v1 AS SELECT CAST(my_date AS DECIMAL(37,2)), my_date, id FROM t1_values; -SELECT CAST(my_date AS DECIMAL), +SELECT CAST(my_date AS DECIMAL(37,2)), my_date, id FROM t1_values WHERE select_id = 67 OR select_id IS NULL order by id; -CAST(my_date AS DECIMAL) my_date id +CAST(my_date AS DECIMAL(37,2)) my_date id NULL NULL 1 -10101 0001-01-01 2 -99991231 9999-12-31 3 -20040229 2004-02-29 4 -20050628 2005-06-28 5 +10101.00 0001-01-01 2 +99991231.00 9999-12-31 3 +20040229.00 2004-02-29 4 +20050628.00 2005-06-28 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_date` as decimal) AS `CAST(my_date AS DECIMAL)`,`t1_values`.`my_date` AS `my_date`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_date` as decimal(37,2)) AS `CAST(my_date AS DECIMAL(37,2))`,`t1_values`.`my_date` AS `my_date`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 67 OR select_id IS NULL) order by id; -CAST(my_date AS DECIMAL) my_date id +CAST(my_date AS DECIMAL(37,2)) my_date id NULL NULL 1 -10101 0001-01-01 2 -99991231 9999-12-31 3 -20040229 2004-02-29 4 -20050628 2005-06-28 5 +10101.00 0001-01-01 2 +99991231.00 9999-12-31 3 +20040229.00 2004-02-29 4 +20050628.00 2005-06-28 5 DROP VIEW v1; -CREATE VIEW v1 AS SELECT CAST(my_datetime AS DECIMAL), +CREATE VIEW v1 AS SELECT CAST(my_datetime AS DECIMAL(37,2)), my_datetime, id FROM t1_values; -SELECT CAST(my_datetime AS DECIMAL), +SELECT CAST(my_datetime AS DECIMAL(37,2)), my_datetime, id FROM t1_values WHERE select_id = 66 OR select_id IS NULL order by id; -CAST(my_datetime AS DECIMAL) my_datetime id +CAST(my_datetime AS DECIMAL(37,2)) my_datetime id NULL NULL 1 -9999999999 0001-01-01 00:00:00 2 -9999999999 9999-12-31 23:59:59 3 -9999999999 2004-02-29 23:59:59 4 -9999999999 2005-06-28 10:00:00 5 -Warnings: -Error 1264 Out of range value for column 'CAST(my_datetime AS DECIMAL)' at row 1 -Error 1264 Out of range value for column 'CAST(my_datetime AS DECIMAL)' at row 1 -Error 1264 Out of range value for column 'CAST(my_datetime AS DECIMAL)' at row 1 -Error 1264 Out of range value for column 'CAST(my_datetime AS DECIMAL)' at row 1 +10101000000.00 0001-01-01 00:00:00 2 +99991231235959.00 9999-12-31 23:59:59 3 +20040229235959.00 2004-02-29 23:59:59 4 +20050628100000.00 2005-06-28 10:00:00 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_datetime` as decimal) AS `CAST(my_datetime AS DECIMAL)`,`t1_values`.`my_datetime` AS `my_datetime`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_datetime` as decimal(37,2)) AS `CAST(my_datetime AS DECIMAL(37,2))`,`t1_values`.`my_datetime` AS `my_datetime`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 66 OR select_id IS NULL) order by id; -CAST(my_datetime AS DECIMAL) my_datetime id +CAST(my_datetime AS DECIMAL(37,2)) my_datetime id NULL NULL 1 -9999999999 0001-01-01 00:00:00 2 -9999999999 9999-12-31 23:59:59 3 -9999999999 2004-02-29 23:59:59 4 -9999999999 2005-06-28 10:00:00 5 -Warnings: -Error 1264 Out of range value for column 'CAST(my_datetime AS DECIMAL)' at row 1 -Error 1264 Out of range value for column 'CAST(my_datetime AS DECIMAL)' at row 1 -Error 1264 Out of range value for column 'CAST(my_datetime AS DECIMAL)' at row 1 -Error 1264 Out of range value for column 'CAST(my_datetime AS DECIMAL)' at row 1 +10101000000.00 0001-01-01 00:00:00 2 +99991231235959.00 9999-12-31 23:59:59 3 +20040229235959.00 2004-02-29 23:59:59 4 +20050628100000.00 2005-06-28 10:00:00 5 DROP VIEW v1; -CREATE VIEW v1 AS SELECT CAST(my_double AS DECIMAL), +CREATE VIEW v1 AS SELECT CAST(my_double AS DECIMAL(37,2)), my_double, id FROM t1_values; -SELECT CAST(my_double AS DECIMAL), +SELECT CAST(my_double AS DECIMAL(37,2)), my_double, id FROM t1_values WHERE select_id = 65 OR select_id IS NULL order by id; -CAST(my_double AS DECIMAL) my_double id +CAST(my_double AS DECIMAL(37,2)) my_double id NULL NULL 1 --9999999999 -1.7976931348623e+308 2 -9999999999 1.7976931348623e+308 3 -0 0 4 --1 -1 5 --3333 -3333.3333 30 +-99999999999999999999999999999999999.99 -1.7976931348623e+308 2 +99999999999999999999999999999999999.99 1.7976931348623e+308 3 +0.00 0 4 +-1.00 -1 5 +-3333.33 -3333.3333 30 Warnings: Error 1292 Truncated incorrect DECIMAL value: '' -Error 1264 Out of range value for column 'CAST(my_double AS DECIMAL)' at row 1 +Error 1264 Out of range value for column 'CAST(my_double AS DECIMAL(37,2))' at row 1 Error 1292 Truncated incorrect DECIMAL value: '' -Error 1264 Out of range value for column 'CAST(my_double AS DECIMAL)' at row 1 +Error 1264 Out of range value for column 'CAST(my_double AS DECIMAL(37,2))' at row 1 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_double` as decimal) AS `CAST(my_double AS DECIMAL)`,`t1_values`.`my_double` AS `my_double`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_double` as decimal(37,2)) AS `CAST(my_double AS DECIMAL(37,2))`,`t1_values`.`my_double` AS `my_double`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 65 OR select_id IS NULL) order by id; -CAST(my_double AS DECIMAL) my_double id +CAST(my_double AS DECIMAL(37,2)) my_double id NULL NULL 1 --9999999999 -1.7976931348623e+308 2 -9999999999 1.7976931348623e+308 3 -0 0 4 --1 -1 5 --3333 -3333.3333 30 +-99999999999999999999999999999999999.99 -1.7976931348623e+308 2 +99999999999999999999999999999999999.99 1.7976931348623e+308 3 +0.00 0 4 +-1.00 -1 5 +-3333.33 -3333.3333 30 Warnings: Error 1292 Truncated incorrect DECIMAL value: '' -Error 1264 Out of range value for column 'CAST(my_double AS DECIMAL)' at row 1 +Error 1264 Out of range value for column 'CAST(my_double AS DECIMAL(37,2))' at row 1 Error 1292 Truncated incorrect DECIMAL value: '' -Error 1264 Out of range value for column 'CAST(my_double AS DECIMAL)' at row 1 +Error 1264 Out of range value for column 'CAST(my_double AS DECIMAL(37,2))' at row 1 DROP VIEW v1; -CREATE VIEW v1 AS SELECT CAST(my_decimal AS DECIMAL), +CREATE VIEW v1 AS SELECT CAST(my_decimal AS DECIMAL(37,2)), my_decimal, id FROM t1_values; -SELECT CAST(my_decimal AS DECIMAL), +SELECT CAST(my_decimal AS DECIMAL(37,2)), my_decimal, id FROM t1_values WHERE select_id = 64 OR select_id IS NULL order by id; -CAST(my_decimal AS DECIMAL) my_decimal id +CAST(my_decimal AS DECIMAL(37,2)) my_decimal id NULL NULL 1 --9999999999 -9999999999999999999999999999999999.999999999999999999999999999999 2 -9999999999 9999999999999999999999999999999999.999999999999999999999999999999 3 -0 0.000000000000000000000000000000 4 --1 -1.000000000000000000000000000000 5 -Warnings: -Error 1264 Out of range value for column 'CAST(my_decimal AS DECIMAL)' at row 1 -Error 1264 Out of range value for column 'CAST(my_decimal AS DECIMAL)' at row 1 +-10000000000000000000000000000000000.00 -9999999999999999999999999999999999.999999999999999999999999999999 2 +10000000000000000000000000000000000.00 9999999999999999999999999999999999.999999999999999999999999999999 3 +0.00 0.000000000000000000000000000000 4 +-1.00 -1.000000000000000000000000000000 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_decimal` as decimal) AS `CAST(my_decimal AS DECIMAL)`,`t1_values`.`my_decimal` AS `my_decimal`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_decimal` as decimal(37,2)) AS `CAST(my_decimal AS DECIMAL(37,2))`,`t1_values`.`my_decimal` AS `my_decimal`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 64 OR select_id IS NULL) order by id; -CAST(my_decimal AS DECIMAL) my_decimal id +CAST(my_decimal AS DECIMAL(37,2)) my_decimal id NULL NULL 1 --9999999999 -9999999999999999999999999999999999.999999999999999999999999999999 2 -9999999999 9999999999999999999999999999999999.999999999999999999999999999999 3 -0 0.000000000000000000000000000000 4 --1 -1.000000000000000000000000000000 5 -Warnings: -Error 1264 Out of range value for column 'CAST(my_decimal AS DECIMAL)' at row 1 -Error 1264 Out of range value for column 'CAST(my_decimal AS DECIMAL)' at row 1 +-10000000000000000000000000000000000.00 -9999999999999999999999999999999999.999999999999999999999999999999 2 +10000000000000000000000000000000000.00 9999999999999999999999999999999999.999999999999999999999999999999 3 +0.00 0.000000000000000000000000000000 4 +-1.00 -1.000000000000000000000000000000 5 DROP VIEW v1; -CREATE VIEW v1 AS SELECT CAST(my_bigint AS DECIMAL), +CREATE VIEW v1 AS SELECT CAST(my_bigint AS DECIMAL(37,2)), my_bigint, id FROM t1_values; -SELECT CAST(my_bigint AS DECIMAL), +SELECT CAST(my_bigint AS DECIMAL(37,2)), my_bigint, id FROM t1_values WHERE select_id = 63 OR select_id IS NULL order by id; -CAST(my_bigint AS DECIMAL) my_bigint id +CAST(my_bigint AS DECIMAL(37,2)) my_bigint id NULL NULL 1 --9999999999 -9223372036854775808 2 -9999999999 9223372036854775807 3 -0 0 4 --1 -1 5 -Warnings: -Error 1264 Out of range value for column 'CAST(my_bigint AS DECIMAL)' at row 1 -Error 1264 Out of range value for column 'CAST(my_bigint AS DECIMAL)' at row 1 +-9223372036854775808.00 -9223372036854775808 2 +9223372036854775807.00 9223372036854775807 3 +0.00 0 4 +-1.00 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_bigint` as decimal) AS `CAST(my_bigint AS DECIMAL)`,`t1_values`.`my_bigint` AS `my_bigint`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_bigint` as decimal(37,2)) AS `CAST(my_bigint AS DECIMAL(37,2))`,`t1_values`.`my_bigint` AS `my_bigint`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 63 OR select_id IS NULL) order by id; -CAST(my_bigint AS DECIMAL) my_bigint id +CAST(my_bigint AS DECIMAL(37,2)) my_bigint id NULL NULL 1 --9999999999 -9223372036854775808 2 -9999999999 9223372036854775807 3 -0 0 4 --1 -1 5 -Warnings: -Error 1264 Out of range value for column 'CAST(my_bigint AS DECIMAL)' at row 1 -Error 1264 Out of range value for column 'CAST(my_bigint AS DECIMAL)' at row 1 +-9223372036854775808.00 -9223372036854775808 2 +9223372036854775807.00 9223372036854775807 3 +0.00 0 4 +-1.00 -1 5 DROP VIEW v1; -CREATE VIEW v1 AS SELECT CAST(my_varbinary_1000 AS DECIMAL), +CREATE VIEW v1 AS SELECT CAST(my_varbinary_1000 AS DECIMAL(37,2)), my_varbinary_1000, id FROM t1_values; -SELECT CAST(my_varbinary_1000 AS DECIMAL), +SELECT CAST(my_varbinary_1000 AS DECIMAL(37,2)), my_varbinary_1000, id FROM t1_values WHERE select_id = 62 OR select_id IS NULL order by id; -CAST(my_varbinary_1000 AS DECIMAL) my_varbinary_1000 id +CAST(my_varbinary_1000 AS DECIMAL(37,2)) my_varbinary_1000 id NULL NULL 1 -0 2 -0 <---------1000 characters--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> 3 -0 ---äÖüß@µ*$-- 4 --1 -1 5 --3333 -3333.3333 29 +0.00 2 +0.00 <---------1000 characters--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> 3 +0.00 ---äÖüß@µ*$-- 4 +-1.00 -1 5 +-3333.33 -3333.3333 29 Warnings: Error 1366 Incorrect decimal value: '' for column '' at row -1 Error 1366 Incorrect decimal value: '' for column '' at row -1 Error 1366 Incorrect decimal value: '' for column '' at row -1 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varbinary_1000` as decimal) AS `CAST(my_varbinary_1000 AS DECIMAL)`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varbinary_1000` as decimal(37,2)) AS `CAST(my_varbinary_1000 AS DECIMAL(37,2))`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 62 OR select_id IS NULL) order by id; -CAST(my_varbinary_1000 AS DECIMAL) my_varbinary_1000 id +CAST(my_varbinary_1000 AS DECIMAL(37,2)) my_varbinary_1000 id NULL NULL 1 -0 2 -0 <---------1000 characters--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> 3 -0 ---äÖüß@µ*$-- 4 --1 -1 5 --3333 -3333.3333 29 +0.00 2 +0.00 <---------1000 characters--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> 3 +0.00 ---äÖüß@µ*$-- 4 +-1.00 -1 5 +-3333.33 -3333.3333 29 Warnings: Error 1366 Incorrect decimal value: '' for column '' at row -1 Error 1366 Incorrect decimal value: '' for column '' at row -1 @@ -3420,18 +3302,18 @@ Error 1366 Incorrect decimal value: '' for column '' at row -1 DROP VIEW v1; -CREATE VIEW v1 AS SELECT CAST(my_binary_30 AS DECIMAL), +CREATE VIEW v1 AS SELECT CAST(my_binary_30 AS DECIMAL(37,2)), my_binary_30, id FROM t1_values; -SELECT CAST(my_binary_30 AS DECIMAL), +SELECT CAST(my_binary_30 AS DECIMAL(37,2)), my_binary_30, id FROM t1_values WHERE select_id = 61 OR select_id IS NULL order by id; -CAST(my_binary_30 AS DECIMAL) my_binary_30 id +CAST(my_binary_30 AS DECIMAL(37,2)) my_binary_30 id NULL NULL 1 -0 2 -0 <--------30 characters-------> 3 -0 ---äÖüß@µ*$-- 4 --1 -1 5 --3333 -3333.3333 28 +0.00 2 +0.00 <--------30 characters-------> 3 +0.00 ---äÖüß@µ*$-- 4 +-1.00 -1 5 +-3333.33 -3333.3333 28 Warnings: Error 1366 Incorrect decimal value: '' for column '' at row -1 Warning 1292 Truncated incorrect DECIMAL value: '' @@ -3442,18 +3324,18 @@ Warning 1292 Truncated incorrect DECIMAL value: ' --- Warning 1292 Truncated incorrect DECIMAL value: '-1' Warning 1292 Truncated incorrect DECIMAL value: '-3333.3333' SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_binary_30` as decimal) AS `CAST(my_binary_30 AS DECIMAL)`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_binary_30` as decimal(37,2)) AS `CAST(my_binary_30 AS DECIMAL(37,2))`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 61 OR select_id IS NULL) order by id; -CAST(my_binary_30 AS DECIMAL) my_binary_30 id +CAST(my_binary_30 AS DECIMAL(37,2)) my_binary_30 id NULL NULL 1 -0 2 -0 <--------30 characters-------> 3 -0 ---äÖüß@µ*$-- 4 --1 -1 5 --3333 -3333.3333 28 +0.00 2 +0.00 <--------30 characters-------> 3 +0.00 ---äÖüß@µ*$-- 4 +-1.00 -1 5 +-3333.33 -3333.3333 28 Warnings: Error 1366 Incorrect decimal value: '' for column '' at row -1 Warning 1292 Truncated incorrect DECIMAL value: '' @@ -3466,35 +3348,35 @@ Warning 1292 Truncated incorrect DECIMAL value: '-3333.3333' DROP VIEW v1; -CREATE VIEW v1 AS SELECT CAST(my_varchar_1000 AS DECIMAL), +CREATE VIEW v1 AS SELECT CAST(my_varchar_1000 AS DECIMAL(37,2)), my_varchar_1000, id FROM t1_values; -SELECT CAST(my_varchar_1000 AS DECIMAL), +SELECT CAST(my_varchar_1000 AS DECIMAL(37,2)), my_varchar_1000, id FROM t1_values WHERE select_id = 60 OR select_id IS NULL order by id; -CAST(my_varchar_1000 AS DECIMAL) my_varchar_1000 id +CAST(my_varchar_1000 AS DECIMAL(37,2)) my_varchar_1000 id NULL NULL 1 -0 2 -0 <---------1000 characters--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> 3 -0 ---äÖüß@µ*$-- 4 --1 -1 5 --3333 -3333.3333 27 +0.00 2 +0.00 <---------1000 characters--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> 3 +0.00 ---äÖüß@µ*$-- 4 +-1.00 -1 5 +-3333.33 -3333.3333 27 Warnings: Error 1366 Incorrect decimal value: '' for column '' at row -1 Error 1366 Incorrect decimal value: '' for column '' at row -1 Error 1366 Incorrect decimal value: '' for column '' at row -1 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varchar_1000` as decimal) AS `CAST(my_varchar_1000 AS DECIMAL)`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varchar_1000` as decimal(37,2)) AS `CAST(my_varchar_1000 AS DECIMAL(37,2))`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 60 OR select_id IS NULL) order by id; -CAST(my_varchar_1000 AS DECIMAL) my_varchar_1000 id +CAST(my_varchar_1000 AS DECIMAL(37,2)) my_varchar_1000 id NULL NULL 1 -0 2 -0 <---------1000 characters--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> 3 -0 ---äÖüß@µ*$-- 4 --1 -1 5 --3333 -3333.3333 27 +0.00 2 +0.00 <---------1000 characters--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> 3 +0.00 ---äÖüß@µ*$-- 4 +-1.00 -1 5 +-3333.33 -3333.3333 27 Warnings: Error 1366 Incorrect decimal value: '' for column '' at row -1 Error 1366 Incorrect decimal value: '' for column '' at row -1 @@ -3502,18 +3384,18 @@ Error 1366 Incorrect decimal value: '' for column '' at row -1 DROP VIEW v1; -CREATE VIEW v1 AS SELECT CAST(my_char_30 AS DECIMAL), +CREATE VIEW v1 AS SELECT CAST(my_char_30 AS DECIMAL(37,2)), my_char_30, id FROM t1_values; -SELECT CAST(my_char_30 AS DECIMAL), +SELECT CAST(my_char_30 AS DECIMAL(37,2)), my_char_30, id FROM t1_values WHERE select_id = 59 OR select_id IS NULL order by id; -CAST(my_char_30 AS DECIMAL) my_char_30 id +CAST(my_char_30 AS DECIMAL(37,2)) my_char_30 id NULL NULL 1 -0 2 -0 <--------30 characters-------> 3 -0 ---äÖüß@µ*$-- 4 --1 -1 5 --3333 -3333.3333 26 +0.00 2 +0.00 <--------30 characters-------> 3 +0.00 ---äÖüß@µ*$-- 4 +-1.00 -1 5 +-3333.33 -3333.3333 26 Warnings: Error 1366 Incorrect decimal value: '' for column '' at row -1 Warning 1292 Truncated incorrect DECIMAL value: ' ' @@ -3522,18 +3404,18 @@ Warning 1292 Truncated incorrect DECIMAL value: '<--------30 characters------->' Error 1366 Incorrect decimal value: '' for column '' at row -1 Warning 1292 Truncated incorrect DECIMAL value: ' ---äÖüß@µ*$-- ' SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_char_30` as decimal) AS `CAST(my_char_30 AS DECIMAL)`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_char_30` as decimal(37,2)) AS `CAST(my_char_30 AS DECIMAL(37,2))`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 59 OR select_id IS NULL) order by id; -CAST(my_char_30 AS DECIMAL) my_char_30 id +CAST(my_char_30 AS DECIMAL(37,2)) my_char_30 id NULL NULL 1 -0 2 -0 <--------30 characters-------> 3 -0 ---äÖüß@µ*$-- 4 --1 -1 5 --3333 -3333.3333 26 +0.00 2 +0.00 <--------30 characters-------> 3 +0.00 ---äÖüß@µ*$-- 4 +-1.00 -1 5 +-3333.33 -3333.3333 26 Warnings: Error 1366 Incorrect decimal value: '' for column '' at row -1 Warning 1292 Truncated incorrect DECIMAL value: ' ' @@ -3556,8 +3438,8 @@ NULL NULL 1 00:20:00 2000 4 00:20:05 2005 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_year` as time) AS `CAST(my_year AS TIME)`,`t1_values`.`my_year` AS `my_year`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_year` as time) AS `CAST(my_year AS TIME)`,`t1_values`.`my_year` AS `my_year`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 58 OR select_id IS NULL) order by id; @@ -3582,8 +3464,8 @@ NULL NULL 1 13:00:00 13:00:00 4 10:00:00 10:00:00 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_time` as time) AS `CAST(my_time AS TIME)`,`t1_values`.`my_time` AS `my_time`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_time` as time) AS `CAST(my_time AS TIME)`,`t1_values`.`my_time` AS `my_time`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 57 OR select_id IS NULL) order by id; @@ -3608,8 +3490,8 @@ CAST(my_timestamp AS TIME) my_timestamp id 23:59:59 2004-02-29 23:59:59 4 10:00:00 2005-06-28 10:00:00 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_timestamp` as time) AS `CAST(my_timestamp AS TIME)`,`t1_values`.`my_timestamp` AS `my_timestamp`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_timestamp` as time) AS `CAST(my_timestamp AS TIME)`,`t1_values`.`my_timestamp` AS `my_timestamp`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 56 OR select_id IS NULL) order by id; @@ -3634,8 +3516,8 @@ NULL NULL 1 00:00:00 2004-02-29 4 00:00:00 2005-06-28 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_date` as time) AS `CAST(my_date AS TIME)`,`t1_values`.`my_date` AS `my_date`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_date` as time) AS `CAST(my_date AS TIME)`,`t1_values`.`my_date` AS `my_date`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 55 OR select_id IS NULL) order by id; @@ -3660,8 +3542,8 @@ NULL NULL 1 23:59:59 2004-02-29 23:59:59 4 10:00:00 2005-06-28 10:00:00 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_datetime` as time) AS `CAST(my_datetime AS TIME)`,`t1_values`.`my_datetime` AS `my_datetime`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_datetime` as time) AS `CAST(my_datetime AS TIME)`,`t1_values`.`my_datetime` AS `my_datetime`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 54 OR select_id IS NULL) order by id; @@ -3690,8 +3572,8 @@ Warnings: Warning 1292 Truncated incorrect time value: '-1.7976931348623e+308' Warning 1292 Truncated incorrect time value: '1.7976931348623e+308' SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_double` as time) AS `CAST(my_double AS TIME)`,`t1_values`.`my_double` AS `my_double`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_double` as time) AS `CAST(my_double AS TIME)`,`t1_values`.`my_double` AS `my_double`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 53 OR select_id IS NULL) order by id; @@ -3724,8 +3606,8 @@ Warnings: Warning 1292 Truncated incorrect time value: '-9223372036854775808' Warning 1292 Truncated incorrect time value: '9223372036854775807' SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_bigint` as time) AS `CAST(my_bigint AS TIME)`,`t1_values`.`my_bigint` AS `my_bigint`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_bigint` as time) AS `CAST(my_bigint AS TIME)`,`t1_values`.`my_bigint` AS `my_bigint`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 52 OR select_id IS NULL) order by id; @@ -3759,8 +3641,8 @@ Warning 1292 Truncated incorrect time value: '' Warning 1292 Truncated incorrect time value: '<---------1000 characters-------------------------------------------------------------------------------------------------------' Warning 1292 Truncated incorrect time value: ' ---äÖüß@µ*$-- ' SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varbinary_1000` as time) AS `CAST(my_varbinary_1000 AS TIME)`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varbinary_1000` as time) AS `CAST(my_varbinary_1000 AS TIME)`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 51 OR select_id IS NULL) order by id; @@ -3797,8 +3679,8 @@ Warning 1292 Truncated incorrect time value: ' --- Warning 1292 Truncated incorrect time value: '-1' Warning 1292 Truncated incorrect time value: '1 17:58' SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_binary_30` as time) AS `CAST(my_binary_30 AS TIME)`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_binary_30` as time) AS `CAST(my_binary_30 AS TIME)`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 50 OR select_id IS NULL) order by id; @@ -3835,8 +3717,8 @@ Warning 1292 Truncated incorrect time value: '' Warning 1292 Truncated incorrect time value: '<---------1000 characters-------------------------------------------------------------------------------------------------------' Warning 1292 Truncated incorrect time value: ' ---äÖüß@µ*$-- ' SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varchar_1000` as time) AS `CAST(my_varchar_1000 AS TIME)`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varchar_1000` as time) AS `CAST(my_varchar_1000 AS TIME)`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 49 OR select_id IS NULL) order by id; @@ -3871,8 +3753,8 @@ Warning 1292 Truncated incorrect time value: '' Warning 1292 Truncated incorrect time value: '<--------30 characters------->' Warning 1292 Truncated incorrect time value: ' ---äÖüß@µ*$--' SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_char_30` as time) AS `CAST(my_char_30 AS TIME)`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_char_30` as time) AS `CAST(my_char_30 AS TIME)`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 48 OR select_id IS NULL) order by id; @@ -3907,8 +3789,8 @@ Warning 1292 Incorrect datetime value: '2155' Warning 1292 Incorrect datetime value: '2000' Warning 1292 Incorrect datetime value: '2005' SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_year` as datetime) AS `CAST(my_year AS DATETIME)`,`t1_values`.`my_year` AS `my_year`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_year` as datetime) AS `CAST(my_year AS DATETIME)`,`t1_values`.`my_year` AS `my_year`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 47 OR select_id IS NULL) order by id; @@ -3941,8 +3823,8 @@ Warnings: Warning 1292 Incorrect datetime value: '0000-00-00 838:59:59' Warning 1292 Incorrect datetime value: '0000-00-00 838:59:59' SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_time` as datetime) AS `CAST(my_time AS DATETIME)`,`t1_values`.`my_time` AS `my_time`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_time` as datetime) AS `CAST(my_time AS DATETIME)`,`t1_values`.`my_time` AS `my_time`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 46 OR select_id IS NULL) order by id; @@ -3970,8 +3852,8 @@ CAST(my_timestamp AS DATETIME) my_timestamp id 2004-02-29 23:59:59 2004-02-29 23:59:59 4 2005-06-28 10:00:00 2005-06-28 10:00:00 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_timestamp` as datetime) AS `CAST(my_timestamp AS DATETIME)`,`t1_values`.`my_timestamp` AS `my_timestamp`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_timestamp` as datetime) AS `CAST(my_timestamp AS DATETIME)`,`t1_values`.`my_timestamp` AS `my_timestamp`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 45 OR select_id IS NULL) order by id; @@ -3996,8 +3878,8 @@ NULL NULL 1 2004-02-29 00:00:00 2004-02-29 4 2005-06-28 00:00:00 2005-06-28 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_date` as datetime) AS `CAST(my_date AS DATETIME)`,`t1_values`.`my_date` AS `my_date`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_date` as datetime) AS `CAST(my_date AS DATETIME)`,`t1_values`.`my_date` AS `my_date`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 44 OR select_id IS NULL) order by id; @@ -4022,8 +3904,8 @@ NULL NULL 1 2004-02-29 23:59:59 2004-02-29 23:59:59 4 2005-06-28 10:00:00 2005-06-28 10:00:00 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_datetime` as datetime) AS `CAST(my_datetime AS DATETIME)`,`t1_values`.`my_datetime` AS `my_datetime`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_datetime` as datetime) AS `CAST(my_datetime AS DATETIME)`,`t1_values`.`my_datetime` AS `my_datetime`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 43 OR select_id IS NULL) order by id; @@ -4055,8 +3937,8 @@ Warning 1292 Incorrect datetime value: '0' Warning 1292 Incorrect datetime value: '-1' Warning 1292 Incorrect datetime value: '200506271758' SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_double` as datetime) AS `CAST(my_double AS DATETIME)`,`t1_values`.`my_double` AS `my_double`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_double` as datetime) AS `CAST(my_double AS DATETIME)`,`t1_values`.`my_double` AS `my_double`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 42 OR select_id IS NULL) order by id; @@ -4095,8 +3977,8 @@ Warning 1292 Incorrect datetime value: '0' Warning 1292 Incorrect datetime value: '-1' Warning 1292 Incorrect datetime value: '200506271758' SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_bigint` as datetime) AS `CAST(my_bigint AS DATETIME)`,`t1_values`.`my_bigint` AS `my_bigint`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_bigint` as datetime) AS `CAST(my_bigint AS DATETIME)`,`t1_values`.`my_bigint` AS `my_bigint`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 41 OR select_id IS NULL) order by id; @@ -4134,8 +4016,8 @@ Warning 1292 Incorrect datetime value: '<---------1000 characters--------------- Warning 1292 Incorrect datetime value: ' ---äÖüß@µ*$-- ' Warning 1292 Incorrect datetime value: '-1' SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varbinary_1000` as datetime) AS `CAST(my_varbinary_1000 AS DATETIME)`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varbinary_1000` as datetime) AS `CAST(my_varbinary_1000 AS DATETIME)`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 40 OR select_id IS NULL) order by id; @@ -4173,8 +4055,8 @@ Warning 1292 Incorrect datetime value: ' --- Warning 1292 Incorrect datetime value: '-1' Warning 1292 Truncated incorrect datetime value: '2005-06-27 17:58' SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_binary_30` as datetime) AS `CAST(my_binary_30 AS DATETIME)`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_binary_30` as datetime) AS `CAST(my_binary_30 AS DATETIME)`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 39 OR select_id IS NULL) order by id; @@ -4212,8 +4094,8 @@ Warning 1292 Incorrect datetime value: '<---------1000 characters--------------- Warning 1292 Incorrect datetime value: ' ---äÖüß@µ*$-- ' Warning 1292 Incorrect datetime value: '-1' SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varchar_1000` as datetime) AS `CAST(my_varchar_1000 AS DATETIME)`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varchar_1000` as datetime) AS `CAST(my_varchar_1000 AS DATETIME)`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 38 OR select_id IS NULL) order by id; @@ -4250,8 +4132,8 @@ Warning 1292 Incorrect datetime value: '<--------30 characters------->' Warning 1292 Incorrect datetime value: ' ---äÖüß@µ*$--' Warning 1292 Incorrect datetime value: '-1' SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_char_30` as datetime) AS `CAST(my_char_30 AS DATETIME)`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_char_30` as datetime) AS `CAST(my_char_30 AS DATETIME)`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 37 OR select_id IS NULL) order by id; @@ -4287,8 +4169,8 @@ Warning 1292 Incorrect datetime value: '2155' Warning 1292 Incorrect datetime value: '2000' Warning 1292 Incorrect datetime value: '2005' SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_year` as date) AS `CAST(my_year AS DATE)`,`t1_values`.`my_year` AS `my_year`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_year` as date) AS `CAST(my_year AS DATE)`,`t1_values`.`my_year` AS `my_year`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 36 OR select_id IS NULL) order by id; @@ -4318,8 +4200,8 @@ NULL NULL 1 0000-00-00 13:00:00 4 0000-00-00 10:00:00 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_time` as date) AS `CAST(my_time AS DATE)`,`t1_values`.`my_time` AS `my_time`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_time` as date) AS `CAST(my_time AS DATE)`,`t1_values`.`my_time` AS `my_time`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 35 OR select_id IS NULL) order by id; @@ -4344,8 +4226,8 @@ CAST(my_timestamp AS DATE) my_timestamp id 2004-02-29 2004-02-29 23:59:59 4 2005-06-28 2005-06-28 10:00:00 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_timestamp` as date) AS `CAST(my_timestamp AS DATE)`,`t1_values`.`my_timestamp` AS `my_timestamp`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_timestamp` as date) AS `CAST(my_timestamp AS DATE)`,`t1_values`.`my_timestamp` AS `my_timestamp`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 34 OR select_id IS NULL) order by id; @@ -4370,8 +4252,8 @@ NULL NULL 1 2004-02-29 2004-02-29 4 2005-06-28 2005-06-28 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_date` as date) AS `CAST(my_date AS DATE)`,`t1_values`.`my_date` AS `my_date`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_date` as date) AS `CAST(my_date AS DATE)`,`t1_values`.`my_date` AS `my_date`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 33 OR select_id IS NULL) order by id; @@ -4396,8 +4278,8 @@ NULL NULL 1 2004-02-29 2004-02-29 23:59:59 4 2005-06-28 2005-06-28 10:00:00 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_datetime` as date) AS `CAST(my_datetime AS DATE)`,`t1_values`.`my_datetime` AS `my_datetime`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_datetime` as date) AS `CAST(my_datetime AS DATE)`,`t1_values`.`my_datetime` AS `my_datetime`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 32 OR select_id IS NULL) order by id; @@ -4428,8 +4310,8 @@ Warning 1292 Incorrect datetime value: '1.7976931348623e+308' Warning 1292 Incorrect datetime value: '0' Warning 1292 Incorrect datetime value: '-1' SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_double` as date) AS `CAST(my_double AS DATE)`,`t1_values`.`my_double` AS `my_double`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_double` as date) AS `CAST(my_double AS DATE)`,`t1_values`.`my_double` AS `my_double`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 31 OR select_id IS NULL) order by id; @@ -4466,8 +4348,8 @@ Warning 1292 Incorrect datetime value: '9223372036854775807' Warning 1292 Incorrect datetime value: '0' Warning 1292 Incorrect datetime value: '-1' SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_bigint` as date) AS `CAST(my_bigint AS DATE)`,`t1_values`.`my_bigint` AS `my_bigint`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_bigint` as date) AS `CAST(my_bigint AS DATE)`,`t1_values`.`my_bigint` AS `my_bigint`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 30 OR select_id IS NULL) order by id; @@ -4504,8 +4386,8 @@ Warning 1292 Incorrect datetime value: '<---------1000 characters--------------- Warning 1292 Incorrect datetime value: ' ---äÖüß@µ*$-- ' Warning 1292 Incorrect datetime value: '-1' SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varbinary_1000` as date) AS `CAST(my_varbinary_1000 AS DATE)`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varbinary_1000` as date) AS `CAST(my_varbinary_1000 AS DATE)`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 29 OR select_id IS NULL) order by id; @@ -4543,8 +4425,8 @@ Warning 1292 Incorrect datetime value: ' --- Warning 1292 Incorrect datetime value: '-1' Warning 1292 Truncated incorrect date value: '2005-06-27' SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_binary_30` as date) AS `CAST(my_binary_30 AS DATE)`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_binary_30` as date) AS `CAST(my_binary_30 AS DATE)`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 28 OR select_id IS NULL) order by id; @@ -4582,8 +4464,8 @@ Warning 1292 Incorrect datetime value: '<---------1000 characters--------------- Warning 1292 Incorrect datetime value: ' ---äÖüß@µ*$-- ' Warning 1292 Incorrect datetime value: '-1' SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varchar_1000` as date) AS `CAST(my_varchar_1000 AS DATE)`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varchar_1000` as date) AS `CAST(my_varchar_1000 AS DATE)`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 27 OR select_id IS NULL) order by id; @@ -4620,8 +4502,8 @@ Warning 1292 Incorrect datetime value: '<--------30 characters------->' Warning 1292 Incorrect datetime value: ' ---äÖüß@µ*$--' Warning 1292 Incorrect datetime value: '-1' SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_char_30` as date) AS `CAST(my_char_30 AS DATE)`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_char_30` as date) AS `CAST(my_char_30 AS DATE)`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 26 OR select_id IS NULL) order by id; @@ -4652,8 +4534,8 @@ NULL NULL 1 2000 2000 4 2005 2005 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_year` as char charset latin1) AS `CAST(my_year AS CHAR)`,`t1_values`.`my_year` AS `my_year`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_year` as char charset latin1) AS `CAST(my_year AS CHAR)`,`t1_values`.`my_year` AS `my_year`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 25 OR select_id IS NULL) order by id; @@ -4678,8 +4560,8 @@ NULL NULL 1 13:00:00 13:00:00 4 10:00:00 10:00:00 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_time` as char charset latin1) AS `CAST(my_time AS CHAR)`,`t1_values`.`my_time` AS `my_time`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_time` as char charset latin1) AS `CAST(my_time AS CHAR)`,`t1_values`.`my_time` AS `my_time`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 24 OR select_id IS NULL) order by id; @@ -4704,8 +4586,8 @@ CAST(my_timestamp AS CHAR) my_timestamp id 2004-02-29 23:59:59 2004-02-29 23:59:59 4 2005-06-28 10:00:00 2005-06-28 10:00:00 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_timestamp` as char charset latin1) AS `CAST(my_timestamp AS CHAR)`,`t1_values`.`my_timestamp` AS `my_timestamp`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_timestamp` as char charset latin1) AS `CAST(my_timestamp AS CHAR)`,`t1_values`.`my_timestamp` AS `my_timestamp`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 23 OR select_id IS NULL) order by id; @@ -4730,8 +4612,8 @@ NULL NULL 1 2004-02-29 2004-02-29 4 2005-06-28 2005-06-28 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_date` as char charset latin1) AS `CAST(my_date AS CHAR)`,`t1_values`.`my_date` AS `my_date`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_date` as char charset latin1) AS `CAST(my_date AS CHAR)`,`t1_values`.`my_date` AS `my_date`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 22 OR select_id IS NULL) order by id; @@ -4756,8 +4638,8 @@ NULL NULL 1 2004-02-29 23:59:59 2004-02-29 23:59:59 4 2005-06-28 10:00:00 2005-06-28 10:00:00 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_datetime` as char charset latin1) AS `CAST(my_datetime AS CHAR)`,`t1_values`.`my_datetime` AS `my_datetime`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_datetime` as char charset latin1) AS `CAST(my_datetime AS CHAR)`,`t1_values`.`my_datetime` AS `my_datetime`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 21 OR select_id IS NULL) order by id; @@ -4782,8 +4664,8 @@ NULL NULL 1 0 0 4 -1 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_double` as char charset latin1) AS `CAST(my_double AS CHAR)`,`t1_values`.`my_double` AS `my_double`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_double` as char charset latin1) AS `CAST(my_double AS CHAR)`,`t1_values`.`my_double` AS `my_double`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 20 OR select_id IS NULL) order by id; @@ -4808,8 +4690,8 @@ NULL NULL 1 0.000000000000000000000000000000 0.000000000000000000000000000000 4 -1.000000000000000000000000000000 -1.000000000000000000000000000000 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_decimal` as char charset latin1) AS `CAST(my_decimal AS CHAR)`,`t1_values`.`my_decimal` AS `my_decimal`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_decimal` as char charset latin1) AS `CAST(my_decimal AS CHAR)`,`t1_values`.`my_decimal` AS `my_decimal`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 19 OR select_id IS NULL) order by id; @@ -4834,8 +4716,8 @@ NULL NULL 1 0 0 4 -1 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_bigint` as char charset latin1) AS `CAST(my_bigint AS CHAR)`,`t1_values`.`my_bigint` AS `my_bigint`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_bigint` as char charset latin1) AS `CAST(my_bigint AS CHAR)`,`t1_values`.`my_bigint` AS `my_bigint`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 18 OR select_id IS NULL) order by id; @@ -4860,8 +4742,8 @@ NULL NULL 1 ---äÖüß@µ*$-- ---äÖüß@µ*$-- 4 -1 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varbinary_1000` as char charset latin1) AS `CAST(my_varbinary_1000 AS CHAR)`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varbinary_1000` as char charset latin1) AS `CAST(my_varbinary_1000 AS CHAR)`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 17 OR select_id IS NULL) order by id; @@ -4886,8 +4768,8 @@ NULL NULL 1 ---äÖüß@µ*$-- ---äÖüß@µ*$-- 4 -1 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_binary_30` as char charset latin1) AS `CAST(my_binary_30 AS CHAR)`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_binary_30` as char charset latin1) AS `CAST(my_binary_30 AS CHAR)`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 16 OR select_id IS NULL) order by id; @@ -4912,8 +4794,8 @@ NULL NULL 1 ---äÖüß@µ*$-- ---äÖüß@µ*$-- 4 -1 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varchar_1000` as char charset latin1) AS `CAST(my_varchar_1000 AS CHAR)`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varchar_1000` as char charset latin1) AS `CAST(my_varchar_1000 AS CHAR)`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 15 OR select_id IS NULL) order by id; @@ -4938,8 +4820,8 @@ NULL NULL 1 ---äÖüß@µ*$-- ---äÖüß@µ*$-- 4 -1 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_char_30` as char charset latin1) AS `CAST(my_char_30 AS CHAR)`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_char_30` as char charset latin1) AS `CAST(my_char_30 AS CHAR)`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 14 OR select_id IS NULL) order by id; @@ -4964,8 +4846,8 @@ NULL NULL 1 2000 2000 4 2005 2005 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_year` as char charset binary) AS `CAST(my_year AS BINARY)`,`t1_values`.`my_year` AS `my_year`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_year` as char charset binary) AS `CAST(my_year AS BINARY)`,`t1_values`.`my_year` AS `my_year`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 13 OR select_id IS NULL) order by id; @@ -4990,8 +4872,8 @@ NULL NULL 1 13:00:00 13:00:00 4 10:00:00 10:00:00 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_time` as char charset binary) AS `CAST(my_time AS BINARY)`,`t1_values`.`my_time` AS `my_time`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_time` as char charset binary) AS `CAST(my_time AS BINARY)`,`t1_values`.`my_time` AS `my_time`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 12 OR select_id IS NULL) order by id; @@ -5016,8 +4898,8 @@ CAST(my_timestamp AS BINARY) my_timestamp id 2004-02-29 23:59:59 2004-02-29 23:59:59 4 2005-06-28 10:00:00 2005-06-28 10:00:00 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_timestamp` as char charset binary) AS `CAST(my_timestamp AS BINARY)`,`t1_values`.`my_timestamp` AS `my_timestamp`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_timestamp` as char charset binary) AS `CAST(my_timestamp AS BINARY)`,`t1_values`.`my_timestamp` AS `my_timestamp`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 11 OR select_id IS NULL) order by id; @@ -5042,8 +4924,8 @@ NULL NULL 1 2004-02-29 2004-02-29 4 2005-06-28 2005-06-28 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_date` as char charset binary) AS `CAST(my_date AS BINARY)`,`t1_values`.`my_date` AS `my_date`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_date` as char charset binary) AS `CAST(my_date AS BINARY)`,`t1_values`.`my_date` AS `my_date`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 10 OR select_id IS NULL) order by id; @@ -5068,8 +4950,8 @@ NULL NULL 1 2004-02-29 23:59:59 2004-02-29 23:59:59 4 2005-06-28 10:00:00 2005-06-28 10:00:00 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_datetime` as char charset binary) AS `CAST(my_datetime AS BINARY)`,`t1_values`.`my_datetime` AS `my_datetime`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_datetime` as char charset binary) AS `CAST(my_datetime AS BINARY)`,`t1_values`.`my_datetime` AS `my_datetime`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 9 OR select_id IS NULL) order by id; @@ -5094,8 +4976,8 @@ NULL NULL 1 0 0 4 -1 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_double` as char charset binary) AS `CAST(my_double AS BINARY)`,`t1_values`.`my_double` AS `my_double`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_double` as char charset binary) AS `CAST(my_double AS BINARY)`,`t1_values`.`my_double` AS `my_double`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 8 OR select_id IS NULL) order by id; @@ -5120,8 +5002,8 @@ NULL NULL 1 0.000000000000000000000000000000 0.000000000000000000000000000000 4 -1.000000000000000000000000000000 -1.000000000000000000000000000000 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_decimal` as char charset binary) AS `CAST(my_decimal AS BINARY)`,`t1_values`.`my_decimal` AS `my_decimal`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_decimal` as char charset binary) AS `CAST(my_decimal AS BINARY)`,`t1_values`.`my_decimal` AS `my_decimal`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 7 OR select_id IS NULL) order by id; @@ -5146,8 +5028,8 @@ NULL NULL 1 0 0 4 -1 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_bigint` as char charset binary) AS `CAST(my_bigint AS BINARY)`,`t1_values`.`my_bigint` AS `my_bigint`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_bigint` as char charset binary) AS `CAST(my_bigint AS BINARY)`,`t1_values`.`my_bigint` AS `my_bigint`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 6 OR select_id IS NULL) order by id; @@ -5172,8 +5054,8 @@ NULL NULL 1 ---äÖüß@µ*$-- ---äÖüß@µ*$-- 4 -1 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varbinary_1000` as char charset binary) AS `CAST(my_varbinary_1000 AS BINARY)`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varbinary_1000` as char charset binary) AS `CAST(my_varbinary_1000 AS BINARY)`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 5 OR select_id IS NULL) order by id; @@ -5198,8 +5080,8 @@ NULL NULL 1 ---äÖüß@µ*$-- ---äÖüß@µ*$-- 4 -1 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_binary_30` as char charset binary) AS `CAST(my_binary_30 AS BINARY)`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_binary_30` as char charset binary) AS `CAST(my_binary_30 AS BINARY)`,`t1_values`.`my_binary_30` AS `my_binary_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 4 OR select_id IS NULL) order by id; @@ -5224,8 +5106,8 @@ NULL NULL 1 ---äÖüß@µ*$-- ---äÖüß@µ*$-- 4 -1 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varchar_1000` as char charset binary) AS `CAST(my_varchar_1000 AS BINARY)`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varchar_1000` as char charset binary) AS `CAST(my_varchar_1000 AS BINARY)`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 3 OR select_id IS NULL) order by id; @@ -5250,8 +5132,8 @@ NULL NULL 1 ---äÖüß@µ*$-- ---äÖüß@µ*$-- 4 -1 -1 5 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_char_30` as char charset binary) AS `CAST(my_char_30 AS BINARY)`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_char_30` as char charset binary) AS `CAST(my_char_30 AS BINARY)`,`t1_values`.`my_char_30` AS `my_char_30`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 2 OR select_id IS NULL) order by id; @@ -5276,8 +5158,8 @@ NULL -1 5 2 4 6 NULL -25 7 SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select sqrt(`t1_values`.`my_bigint`) AS `sqrt(my_bigint)`,`t1_values`.`my_bigint` AS `my_bigint`,`t1_values`.`id` AS `id` from `t1_values` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select sqrt(`t1_values`.`my_bigint`) AS `sqrt(my_bigint)`,`t1_values`.`my_bigint` AS `my_bigint`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci SELECT v1.* FROM v1 WHERE v1.id IN (SELECT id FROM t1_values WHERE select_id = 1 OR select_id IS NULL) order by id; diff --git a/mysql-test/suite/funcs_1/r/ndb_storedproc_07.result b/mysql-test/suite/funcs_1/r/ndb_storedproc_07.result index 653baa95ab4..bf2299c2f30 100644 --- a/mysql-test/suite/funcs_1/r/ndb_storedproc_07.result +++ b/mysql-test/suite/funcs_1/r/ndb_storedproc_07.result @@ -90,7 +90,7 @@ INSERT INTO result VALUES (@cur_val_sql_mode, 'value not restored'); END if; END// SHOW CREATE PROCEDURE sp1; -Procedure sql_mode Create Procedure +Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation sp1 STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER CREATE DEFINER=`root`@`localhost` PROCEDURE `sp1`() BEGIN declare a tinyint; @@ -104,7 +104,7 @@ INSERT INTO result VALUES (@cur_val_sql_mode, 'value restored'); ELSE INSERT INTO result VALUES (@cur_val_sql_mode, 'value not restored'); END if; -END +END latin1 latin1_swedish_ci latin1_swedish_ci set @@sql_mode=''; SHOW VARIABLES LIKE 'sql_mode'; Variable_name Value @@ -143,12 +143,12 @@ SET @@sql_mode='MAXDB'; SHOW VARIABLES LIKE 'sql_mode'; END// SHOW CREATE PROCEDURE sp2; -Procedure sql_mode Create Procedure +Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation sp2 STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER CREATE DEFINER=`root`@`localhost` PROCEDURE `sp2`() BEGIN SET @@sql_mode='MAXDB'; SHOW VARIABLES LIKE 'sql_mode'; -END +END latin1 latin1_swedish_ci latin1_swedish_ci ... show value prior calling procedure SHOW VARIABLES LIKE 'sql_mode'; Variable_name Value diff --git a/mysql-test/suite/funcs_1/r/ndb_storedproc_08.result b/mysql-test/suite/funcs_1/r/ndb_storedproc_08.result index 69830831843..2c7dcee6a09 100644 --- a/mysql-test/suite/funcs_1/r/ndb_storedproc_08.result +++ b/mysql-test/suite/funcs_1/r/ndb_storedproc_08.result @@ -122,6 +122,9 @@ LAST_ALTERED SQL_MODE ROUTINE_COMMENT DEFINER root@localhost +CHARACTER_SET_CLIENT latin1 +COLLATION_CONNECTION latin1_swedish_ci +DATABASE_COLLATION latin1_swedish_ci SPECIFIC_NAME fn_2 ROUTINE_CATALOG NULL ROUTINE_SCHEMA db_storedproc @@ -146,6 +149,9 @@ LAST_ALTERED SQL_MODE ROUTINE_COMMENT created with INVOKER DEFINER root@localhost +CHARACTER_SET_CLIENT latin1 +COLLATION_CONNECTION latin1_swedish_ci +DATABASE_COLLATION latin1_swedish_ci SPECIFIC_NAME sp_1 ROUTINE_CATALOG NULL ROUTINE_SCHEMA db_storedproc @@ -168,6 +174,9 @@ LAST_ALTERED SQL_MODE ROUTINE_COMMENT DEFINER root@localhost +CHARACTER_SET_CLIENT latin1 +COLLATION_CONNECTION latin1_swedish_ci +DATABASE_COLLATION latin1_swedish_ci SPECIFIC_NAME sp_2 ROUTINE_CATALOG NULL ROUTINE_SCHEMA db_storedproc @@ -190,6 +199,9 @@ LAST_ALTERED SQL_MODE ROUTINE_COMMENT created with INVOKER DEFINER root@localhost +CHARACTER_SET_CLIENT latin1 +COLLATION_CONNECTION latin1_swedish_ci +DATABASE_COLLATION latin1_swedish_ci SHOW CREATE FUNCTION fn_1; Function fn_1 sql_mode @@ -199,6 +211,9 @@ set @x=i1; set @y=@x; return i4; END +character_set_client latin1 +collation_connection latin1_swedish_ci +Database Collation latin1_swedish_ci SHOW CREATE FUNCTION fn_2; Function fn_2 sql_mode @@ -210,6 +225,9 @@ set @x=i1; set @y=@x; return i4; END +character_set_client latin1 +collation_connection latin1_swedish_ci +Database Collation latin1_swedish_ci SHOW CREATE PROCEDURE sp_1; Procedure sp_1 sql_mode @@ -217,6 +235,9 @@ Create Procedure CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_1`(i1 int) BEGIN set @x=i1; END +character_set_client latin1 +collation_connection latin1_swedish_ci +Database Collation latin1_swedish_ci SHOW CREATE PROCEDURE sp_2; Procedure sp_2 sql_mode @@ -226,6 +247,9 @@ Create Procedure CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_2`(i1 int) BEGIN set @x=i1; END +character_set_client latin1 +collation_connection latin1_swedish_ci +Database Collation latin1_swedish_ci SHOW FUNCTION STATUS LIKE 'fn_%'; Db db_storedproc Name fn_1 @@ -235,6 +259,9 @@ Modified Created Security_type DEFINER Comment +character_set_client latin1 +collation_connection latin1_swedish_ci +Database Collation latin1_swedish_ci Db db_storedproc Name fn_2 Type FUNCTION @@ -243,6 +270,9 @@ Modified Created Security_type INVOKER Comment created with INVOKER +character_set_client latin1 +collation_connection latin1_swedish_ci +Database Collation latin1_swedish_ci SHOW PROCEDURE STATUS LIKE 'sp_%'; Db db_storedproc Name sp_1 @@ -252,6 +282,9 @@ Modified Created Security_type DEFINER Comment +character_set_client latin1 +collation_connection latin1_swedish_ci +Database Collation latin1_swedish_ci Db db_storedproc Name sp_2 Type PROCEDURE @@ -260,6 +293,9 @@ Modified Created Security_type INVOKER Comment created with INVOKER +character_set_client latin1 +collation_connection latin1_swedish_ci +Database Collation latin1_swedish_ci ... now change some stuff: -------------------------- @@ -304,6 +340,9 @@ LAST_ALTERED SQL_MODE ROUTINE_COMMENT new comment, FN changed to INVOKER DEFINER root@localhost +CHARACTER_SET_CLIENT latin1 +COLLATION_CONNECTION latin1_swedish_ci +DATABASE_COLLATION latin1_swedish_ci SPECIFIC_NAME fn_2 ROUTINE_CATALOG NULL ROUTINE_SCHEMA db_storedproc @@ -328,6 +367,9 @@ LAST_ALTERED SQL_MODE ROUTINE_COMMENT FN changed to DEFINER DEFINER root@localhost +CHARACTER_SET_CLIENT latin1 +COLLATION_CONNECTION latin1_swedish_ci +DATABASE_COLLATION latin1_swedish_ci SPECIFIC_NAME sp_1 ROUTINE_CATALOG NULL ROUTINE_SCHEMA db_storedproc @@ -350,6 +392,9 @@ LAST_ALTERED SQL_MODE ROUTINE_COMMENT new comment, SP changed to INVOKER DEFINER root@localhost +CHARACTER_SET_CLIENT latin1 +COLLATION_CONNECTION latin1_swedish_ci +DATABASE_COLLATION latin1_swedish_ci SPECIFIC_NAME sp_2 ROUTINE_CATALOG NULL ROUTINE_SCHEMA db_storedproc @@ -372,6 +417,9 @@ LAST_ALTERED SQL_MODE ROUTINE_COMMENT SP changed to DEFINER DEFINER root@localhost +CHARACTER_SET_CLIENT latin1 +COLLATION_CONNECTION latin1_swedish_ci +DATABASE_COLLATION latin1_swedish_ci SHOW CREATE FUNCTION fn_1; Function fn_1 sql_mode @@ -384,6 +432,9 @@ set @x=i1; set @y=@x; return i4; END +character_set_client latin1 +collation_connection latin1_swedish_ci +Database Collation latin1_swedish_ci SHOW CREATE FUNCTION fn_2; Function fn_2 sql_mode @@ -395,6 +446,9 @@ set @x=i1; set @y=@x; return i4; END +character_set_client latin1 +collation_connection latin1_swedish_ci +Database Collation latin1_swedish_ci SHOW CREATE PROCEDURE sp_1; Procedure sp_1 sql_mode @@ -404,6 +458,9 @@ Create Procedure CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_1`(i1 int) BEGIN set @x=i1; END +character_set_client latin1 +collation_connection latin1_swedish_ci +Database Collation latin1_swedish_ci SHOW CREATE PROCEDURE sp_2; Procedure sp_2 sql_mode @@ -413,6 +470,9 @@ Create Procedure CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_2`(i1 int) BEGIN set @x=i1; END +character_set_client latin1 +collation_connection latin1_swedish_ci +Database Collation latin1_swedish_ci SHOW FUNCTION STATUS LIKE 'fn_%'; Db db_storedproc Name fn_1 @@ -422,6 +482,9 @@ Modified Created Security_type INVOKER Comment new comment, FN changed to INVOKER +character_set_client latin1 +collation_connection latin1_swedish_ci +Database Collation latin1_swedish_ci Db db_storedproc Name fn_2 Type FUNCTION @@ -430,6 +493,9 @@ Modified Created Security_type DEFINER Comment FN changed to DEFINER +character_set_client latin1 +collation_connection latin1_swedish_ci +Database Collation latin1_swedish_ci SHOW PROCEDURE STATUS LIKE 'sp_%'; Db db_storedproc Name sp_1 @@ -439,6 +505,9 @@ Modified Created Security_type INVOKER Comment new comment, SP changed to INVOKER +character_set_client latin1 +collation_connection latin1_swedish_ci +Database Collation latin1_swedish_ci Db db_storedproc Name sp_2 Type PROCEDURE @@ -447,6 +516,9 @@ Modified Created Security_type DEFINER Comment SP changed to DEFINER +character_set_client latin1 +collation_connection latin1_swedish_ci +Database Collation latin1_swedish_ci ... change back to default and check result: -------------------------------------------- @@ -479,6 +551,9 @@ LAST_ALTERED SQL_MODE ROUTINE_COMMENT new comment, FN changed to INVOKER DEFINER root@localhost +CHARACTER_SET_CLIENT latin1 +COLLATION_CONNECTION latin1_swedish_ci +DATABASE_COLLATION latin1_swedish_ci SPECIFIC_NAME fn_2 ROUTINE_CATALOG NULL ROUTINE_SCHEMA db_storedproc @@ -503,6 +578,9 @@ LAST_ALTERED SQL_MODE ROUTINE_COMMENT FN changed to DEFINER DEFINER root@localhost +CHARACTER_SET_CLIENT latin1 +COLLATION_CONNECTION latin1_swedish_ci +DATABASE_COLLATION latin1_swedish_ci SPECIFIC_NAME sp_1 ROUTINE_CATALOG NULL ROUTINE_SCHEMA db_storedproc @@ -525,6 +603,9 @@ LAST_ALTERED SQL_MODE ROUTINE_COMMENT new comment, SP changed to INVOKER DEFINER root@localhost +CHARACTER_SET_CLIENT latin1 +COLLATION_CONNECTION latin1_swedish_ci +DATABASE_COLLATION latin1_swedish_ci SPECIFIC_NAME sp_2 ROUTINE_CATALOG NULL ROUTINE_SCHEMA db_storedproc @@ -547,6 +628,9 @@ LAST_ALTERED SQL_MODE ROUTINE_COMMENT SP changed to DEFINER DEFINER root@localhost +CHARACTER_SET_CLIENT latin1 +COLLATION_CONNECTION latin1_swedish_ci +DATABASE_COLLATION latin1_swedish_ci SHOW CREATE FUNCTION fn_1; Function fn_1 sql_mode @@ -559,6 +643,9 @@ set @x=i1; set @y=@x; return i4; END +character_set_client latin1 +collation_connection latin1_swedish_ci +Database Collation latin1_swedish_ci SHOW CREATE FUNCTION fn_2; Function fn_2 sql_mode @@ -569,6 +656,9 @@ set @x=i1; set @y=@x; return i4; END +character_set_client latin1 +collation_connection latin1_swedish_ci +Database Collation latin1_swedish_ci SHOW CREATE PROCEDURE sp_1; Procedure sp_1 sql_mode @@ -578,6 +668,9 @@ Create Procedure CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_1`(i1 int) BEGIN set @x=i1; END +character_set_client latin1 +collation_connection latin1_swedish_ci +Database Collation latin1_swedish_ci SHOW CREATE PROCEDURE sp_2; Procedure sp_2 sql_mode @@ -587,6 +680,9 @@ Create Procedure CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_2`(i1 int) BEGIN set @x=i1; END +character_set_client latin1 +collation_connection latin1_swedish_ci +Database Collation latin1_swedish_ci SHOW FUNCTION STATUS LIKE 'fn_%'; Db db_storedproc Name fn_1 @@ -596,6 +692,9 @@ Modified Created Security_type INVOKER Comment new comment, FN changed to INVOKER +character_set_client latin1 +collation_connection latin1_swedish_ci +Database Collation latin1_swedish_ci Db db_storedproc Name fn_2 Type FUNCTION @@ -604,6 +703,9 @@ Modified Created Security_type DEFINER Comment FN changed to DEFINER +character_set_client latin1 +collation_connection latin1_swedish_ci +Database Collation latin1_swedish_ci SHOW PROCEDURE STATUS LIKE 'sp_%'; Db db_storedproc Name sp_1 @@ -613,6 +715,9 @@ Modified Created Security_type INVOKER Comment new comment, SP changed to INVOKER +character_set_client latin1 +collation_connection latin1_swedish_ci +Database Collation latin1_swedish_ci Db db_storedproc Name sp_2 Type PROCEDURE @@ -621,6 +726,9 @@ Modified Created Security_type DEFINER Comment SP changed to DEFINER +character_set_client latin1 +collation_connection latin1_swedish_ci +Database Collation latin1_swedish_ci ... cleanup ----------- diff --git a/mysql-test/suite/funcs_1/r/ndb_trig_0102.result b/mysql-test/suite/funcs_1/r/ndb_trig_0102.result index 0157151e8be..33deedd4b37 100644 --- a/mysql-test/suite/funcs_1/r/ndb_trig_0102.result +++ b/mysql-test/suite/funcs_1/r/ndb_trig_0102.result @@ -65,7 +65,7 @@ Warnings: Note 1265 Data truncated for column 'f150' at row 1 Note 1265 Data truncated for column 'f151' at row 1 Note 1265 Data truncated for column 'f152' at row 1 -Error 1466 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK' +Error 1475 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK' load data infile 'MYSQL_TEST_DIR/suite/funcs_1/data/ndb_tb3.txt' into table tb3 ; Testcase: 3.5.1.1: @@ -243,7 +243,7 @@ create table t1 (f1 integer) engine = ndb; use test; CREATE TRIGGER trig_db.trg6_2 AFTER INSERT on tb3 for each row set @ret_trg6_2 = 5; -ERROR HY000: Trigger in wrong schema +ERROR 42S02: Table 'trig_db.tb3' doesn't exist use trig_db; CREATE TRIGGER trg6_3 AFTER INSERT on test.tb3 for each row set @ret_trg6_3 = 18; diff --git a/mysql-test/suite/funcs_1/r/ndb_trig_03.result b/mysql-test/suite/funcs_1/r/ndb_trig_03.result index f046b5a0bc4..35d1e341e8d 100644 --- a/mysql-test/suite/funcs_1/r/ndb_trig_03.result +++ b/mysql-test/suite/funcs_1/r/ndb_trig_03.result @@ -65,7 +65,7 @@ Warnings: Note 1265 Data truncated for column 'f150' at row 1 Note 1265 Data truncated for column 'f151' at row 1 Note 1265 Data truncated for column 'f152' at row 1 -Error 1466 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK' +Error 1475 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK' load data infile 'MYSQL_TEST_DIR/suite/funcs_1/data/ndb_tb3.txt' into table tb3 ; Testcase 3.5.3: diff --git a/mysql-test/suite/funcs_1/r/ndb_trig_03e.result b/mysql-test/suite/funcs_1/r/ndb_trig_03e.result index ef24e298dad..505d2ed9f07 100644 --- a/mysql-test/suite/funcs_1/r/ndb_trig_03e.result +++ b/mysql-test/suite/funcs_1/r/ndb_trig_03e.result @@ -263,7 +263,7 @@ select current_user; current_user root@localhost show triggers; -Trigger Event Table Statement Timing Created sql_mode Definer +Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation grant select, insert, update on priv_db.t1 to test_yesprivs@localhost; show grants for test_yesprivs@localhost; Grants for test_yesprivs@localhost @@ -296,7 +296,7 @@ select current_user; current_user root@localhost show triggers; -Trigger Event Table Statement Timing Created sql_mode Definer +Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation show tables; Tables_in_priv_db t1 @@ -317,7 +317,7 @@ select current_user; current_user test_yesprivs@localhost show triggers; -Trigger Event Table Statement Timing Created sql_mode Definer +Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation create trigger trg1_2 before INSERT on t1 for each row set new.f1 = 'trig 1_2-yes'; select current_user; @@ -453,9 +453,9 @@ ERROR 42000: TRIGGER command denied to user 'test_yesprivs'@'localhost' for tabl create trigger trg1_4 before UPDATE on t1 for each row set new.f1 = 'trig 1_4-yes'; show triggers; -Trigger Event Table Statement Timing Created sql_mode Definer -trg1_3 INSERT t1 set new.f1 = 'trig 1_3-yes' BEFORE NULL test_yesprivs@localhost -trg1_4 UPDATE t1 set new.f1 = 'trig 1_4-yes' BEFORE NULL test_yesprivs@localhost +Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation +trg1_3 INSERT t1 set new.f1 = 'trig 1_3-yes' BEFORE NULL test_yesprivs@localhost latin1 latin1_swedish_ci latin1_swedish_ci +trg1_4 UPDATE t1 set new.f1 = 'trig 1_4-yes' BEFORE NULL test_yesprivs@localhost latin1 latin1_swedish_ci latin1_swedish_ci select current_user; current_user test_noprivs@localhost @@ -570,11 +570,11 @@ current_user test_yesprivs@localhost use priv_db; show triggers; -Trigger Event Table Statement Timing Created sql_mode Definer -trg1_1 INSERT t1 set new.f1 = 'trig 1_1-yes' BEFORE NULL test_yesprivs@localhost +Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation +trg1_1 INSERT t1 set new.f1 = 'trig 1_1-yes' BEFORE NULL test_yesprivs@localhost latin1 latin1_swedish_ci latin1_swedish_ci select * from information_schema.triggers; -TRIGGER_CATALOG TRIGGER_SCHEMA TRIGGER_NAME EVENT_MANIPULATION EVENT_OBJECT_CATALOG EVENT_OBJECT_SCHEMA EVENT_OBJECT_TABLE ACTION_ORDER ACTION_CONDITION ACTION_STATEMENT ACTION_ORIENTATION ACTION_TIMING ACTION_REFERENCE_OLD_TABLE ACTION_REFERENCE_NEW_TABLE ACTION_REFERENCE_OLD_ROW ACTION_REFERENCE_NEW_ROW CREATED SQL_MODE DEFINER -NULL priv_db trg1_1 INSERT NULL priv_db t1 0 NULL set new.f1 = 'trig 1_1-yes' ROW BEFORE NULL NULL OLD NEW NULL test_yesprivs@localhost +TRIGGER_CATALOG TRIGGER_SCHEMA TRIGGER_NAME EVENT_MANIPULATION EVENT_OBJECT_CATALOG EVENT_OBJECT_SCHEMA EVENT_OBJECT_TABLE ACTION_ORDER ACTION_CONDITION ACTION_STATEMENT ACTION_ORIENTATION ACTION_TIMING ACTION_REFERENCE_OLD_TABLE ACTION_REFERENCE_NEW_TABLE ACTION_REFERENCE_OLD_ROW ACTION_REFERENCE_NEW_ROW CREATED SQL_MODE DEFINER CHARACTER_SET_CLIENT COLLATION_CONNECTION DATABASE_COLLATION +NULL priv_db trg1_1 INSERT NULL priv_db t1 0 NULL set new.f1 = 'trig 1_1-yes' ROW BEFORE NULL NULL OLD NEW NULL test_yesprivs@localhost latin1 latin1_swedish_ci latin1_swedish_ci drop trigger trg1_1; ERROR 42000: TRIGGER command denied to user 'test_yesprivs'@'localhost' for table 't1' select current_user; @@ -863,7 +863,7 @@ select current_user; current_user root@localhost show triggers; -Trigger Event Table Statement Timing Created sql_mode Definer +Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation grant TRIGGER on priv1_db.t1 to test_yesprivs@localhost; show grants for test_yesprivs@localhost; Grants for test_yesprivs@localhost @@ -878,7 +878,7 @@ select current_user; current_user test_yesprivs@localhost show triggers; -Trigger Event Table Statement Timing Created sql_mode Definer +Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation create trigger trg1_2 before INSERT on t1 for each row set new.f1 = 'trig 1_2-yes'; create trigger trg2_1 before INSERT on t2 for each row @@ -990,7 +990,7 @@ select current_user; current_user root@localhost show triggers; -Trigger Event Table Statement Timing Created sql_mode Definer +Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation grant select, insert, update ,trigger on priv_db.t1 to test_yesprivs@localhost with grant option; diff --git a/mysql-test/suite/funcs_1/r/ndb_trig_0407.result b/mysql-test/suite/funcs_1/r/ndb_trig_0407.result index de9170048b3..e0c64f7598b 100644 --- a/mysql-test/suite/funcs_1/r/ndb_trig_0407.result +++ b/mysql-test/suite/funcs_1/r/ndb_trig_0407.result @@ -65,7 +65,7 @@ Warnings: Note 1265 Data truncated for column 'f150' at row 1 Note 1265 Data truncated for column 'f151' at row 1 Note 1265 Data truncated for column 'f152' at row 1 -Error 1466 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK' +Error 1475 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK' load data infile 'MYSQL_TEST_DIR/suite/funcs_1/data/ndb_tb3.txt' into table tb3 ; Testcase: 3.5: diff --git a/mysql-test/suite/funcs_1/r/ndb_trig_08.result b/mysql-test/suite/funcs_1/r/ndb_trig_08.result index a60caec0144..5b542a1a4c8 100644 --- a/mysql-test/suite/funcs_1/r/ndb_trig_08.result +++ b/mysql-test/suite/funcs_1/r/ndb_trig_08.result @@ -65,7 +65,7 @@ Warnings: Note 1265 Data truncated for column 'f150' at row 1 Note 1265 Data truncated for column 'f151' at row 1 Note 1265 Data truncated for column 'f152' at row 1 -Error 1466 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK' +Error 1475 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK' load data infile 'MYSQL_TEST_DIR/suite/funcs_1/data/ndb_tb3.txt' into table tb3 ; Testcase: 3.5: @@ -493,9 +493,8 @@ BEGIN WHILE @counter1 < new.f136 SET @counter1 = @counter1 + 1; END// -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 'WHILE @counter1 < new.f136 -SET @counter1 = @counter1 + 1; -END' at line 3 +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 'SET @counter1 = @counter1 + 1; +END' at line 4 delete from tb3 where f122='Test 3.5.8.5-while'; drop trigger trg7; diff --git a/mysql-test/suite/funcs_1/r/ndb_trig_09.result b/mysql-test/suite/funcs_1/r/ndb_trig_09.result index 3c5a9526752..6cb05a1d3ff 100644 --- a/mysql-test/suite/funcs_1/r/ndb_trig_09.result +++ b/mysql-test/suite/funcs_1/r/ndb_trig_09.result @@ -65,7 +65,7 @@ Warnings: Note 1265 Data truncated for column 'f150' at row 1 Note 1265 Data truncated for column 'f151' at row 1 Note 1265 Data truncated for column 'f152' at row 1 -Error 1466 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK' +Error 1475 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK' load data infile 'MYSQL_TEST_DIR/suite/funcs_1/data/ndb_tb3.txt' into table tb3 ; Testcase 3.5.9.1/2: diff --git a/mysql-test/suite/funcs_1/r/ndb_trig_1011ext.result b/mysql-test/suite/funcs_1/r/ndb_trig_1011ext.result index b6853469d4f..3d9db02a375 100644 --- a/mysql-test/suite/funcs_1/r/ndb_trig_1011ext.result +++ b/mysql-test/suite/funcs_1/r/ndb_trig_1011ext.result @@ -65,7 +65,7 @@ Warnings: Note 1265 Data truncated for column 'f150' at row 1 Note 1265 Data truncated for column 'f151' at row 1 Note 1265 Data truncated for column 'f152' at row 1 -Error 1466 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK' +Error 1475 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK' load data infile 'MYSQL_TEST_DIR/suite/funcs_1/data/ndb_tb3.txt' into table tb3 ; Testcase 3.5.10.1/2/3: diff --git a/mysql-test/suite/funcs_1/r/ndb_views.result b/mysql-test/suite/funcs_1/r/ndb_views.result index a8dba47ac6e..73efd3309f9 100644 --- a/mysql-test/suite/funcs_1/r/ndb_views.result +++ b/mysql-test/suite/funcs_1/r/ndb_views.result @@ -53,7 +53,7 @@ f106 year(3) not null default 2000, f107 year(4) not null default 2000, f108 enum("1enum","2enum") not null default "1enum", f109 set("1set","2set") not null default "1set" -) engine = innodb; +) engine = ndb; load data infile 'MYSQL_TEST_DIR/suite/funcs_1/data/ndb_tb2.txt' into table tb2 ; DROP DATABASE IF EXISTS test1; CREATE DATABASE test1; @@ -111,7 +111,7 @@ f106 year(3) not null default 2000, f107 year(4) not null default 2000, f108 enum("1enum","2enum") not null default "1enum", f109 set("1set","2set") not null default "1set" -) engine = innodb; +) engine = ndb; load data infile 'MYSQL_TEST_DIR/suite/funcs_1/data/ndb_tb2.txt' into table tb2 ; USE test; @@ -184,47 +184,47 @@ Insert into t1 values (500,9866); Drop view if exists v1 ; CREATE VIEW v1 AS select f59,f60,f61 FROM test.tb2 where f59=250; -select * FROM v1 limit 0,10; +select * FROM v1 order by f60,f61 limit 0,10; f59 f60 f61 250 87895654 NULL Drop view if exists v1 ; CREATE VIEW v1 AS select f59,f60,f61 FROM test.tb2 limit 100; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59,f60,f61 limit 0,10; f59 f60 f61 1 1 0000000001 2 2 0000000002 3 3 0000000003 4 4 0000000004 +4 74 NULL 5 5 0000000005 6 6 0000000006 7 7 0000000007 8 8 0000000008 9 9 0000000009 -10 10 0000000010 CREATE or REPLACE VIEW v1 AS select f59,f60,f61 FROM test.tb2 limit 4,3; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59,f60,f61 limit 0,10; f59 f60 f61 -5 5 0000000005 -6 6 0000000006 -7 7 0000000007 +10 10 0000000010 +19 18 0000000014 +24 51654 NULL CREATE or REPLACE VIEW v1 AS select distinct f59 FROM test.tb2 limit 4,3; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 -5 -6 -7 +15 +107 +209 ALTER VIEW v1 AS select f59 FROM test.tb2 limit 6,2; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 -7 -8 +10 +34 CREATE or REPLACE VIEW v1 AS select f59 from tb2 order by f59 limit 100; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 1 2 @@ -266,7 +266,7 @@ f59 660 CREATE or REPLACE VIEW v1 AS select f59 from tb2 group by f59 limit 100; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 1 2 @@ -280,7 +280,7 @@ f59 10 CREATE or REPLACE VIEW v1 AS select f59 from tb2 group by f59 asc limit 100; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 1 2 @@ -294,21 +294,21 @@ f59 10 CREATE or REPLACE VIEW v1 AS select f59 from tb2 group by f59 desc limit 100; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 -569300 -76710 -9112 -7876 -3410 -3330 -2760 -2550 -987 -660 +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 CREATE or REPLACE VIEW v1 AS (select f59 from tb2) union (select f59 from t1) limit 100; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 1 2 @@ -322,7 +322,7 @@ f59 10 CREATE or REPLACE VIEW v1 AS (select f59 FROM tb2) UNION DISTINCT(select f59 FROM t1) ; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 1 2 @@ -336,103 +336,103 @@ f59 10 CREATE or REPLACE VIEW v1 AS (select f59 FROM tb2) UNION ALL(select f59 FROM t1) ; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59 limit 0,10; f59 1 2 3 4 +4 5 6 7 8 9 -10 CREATE or REPLACE VIEW v1 AS select * FROM test.tb2 WITH LOCAL CHECK OPTION ; -select * FROM v1 limit 0,50; +select * FROM v1 order by f59,f60,f61,f62,f63,f64 limit 0,50; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 1 1 0000000001 0000000000000000000000000000000000000000000000000000000000000001 0000000001 0000000000000000000000000000000000000000000000000000000000000001 -5 0.000000000000000000000000000000 1 0.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549435e-38 1.17549e-38 1.175494352e-38 01.17549e-38 00000001.175494352e-38 01.17549e-38 00000001.175494352e-38 1000-01-01 838:59:58 1970-01-02 00:00:01 1970-01-02 00:00:01 1902 1902 1902 2enum 2set 2 2 0000000002 0000000000000000000000000000000000000000000000000000000000000002 0000000002 0000000000000000000000000000000000000000000000000000000000000002 -4 1.100000000000000000000000000000 2 1.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494349e-38 1.17549e-38 1.175494353e-38 01.17549e-38 00000001.175494353e-38 01.17549e-38 00000001.175494353e-38 1000-01-02 838:59:57 1970-01-03 00:00:02 1970-01-03 00:00:02 1903 1903 1903 1enum 1set,2set 3 3 0000000003 0000000000000000000000000000000000000000000000000000000000000003 0000000003 0000000000000000000000000000000000000000000000000000000000000003 -3 2.200000000000000000000000000000 3 2.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494348e-38 1.17549e-38 1.175494354e-38 01.17549e-38 00000001.175494354e-38 01.17549e-38 00000001.175494354e-38 1000-01-03 838:59:56 1970-01-04 00:00:03 1970-01-04 00:00:03 1904 1904 1904 2enum 1set 4 4 0000000004 0000000000000000000000000000000000000000000000000000000000000004 0000000004 0000000000000000000000000000000000000000000000000000000000000004 -2 3.300000000000000000000000000000 4 3.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494347e-38 1.17549e-38 1.175494355e-38 01.17549e-38 00000001.175494355e-38 01.17549e-38 00000001.175494355e-38 1000-01-04 838:59:55 1970-01-05 00:00:04 1970-01-05 00:00:04 1905 1905 1905 1enum 2set +4 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 5 5 0000000005 0000000000000000000000000000000000000000000000000000000000000005 0000000005 0000000000000000000000000000000000000000000000000000000000000005 -1 4.400000000000000000000000000000 5 4.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494346e-38 1.17549e-38 1.175494356e-38 01.17549e-38 00000001.175494356e-38 01.17549e-38 00000001.175494356e-38 1000-01-05 838:59:54 1970-01-06 00:00:05 1970-01-06 00:00:05 1906 1906 1906 2enum 1set,2set 6 6 0000000006 0000000000000000000000000000000000000000000000000000000000000006 0000000006 0000000000000000000000000000000000000000000000000000000000000006 0 5.500000000000000000000000000000 6 5.500000000000000000000000000000 0000000006 000000000000000000000000000000005.500000000000000000000000000000 0000000006 000000000000000000000000000000005.500000000000000000000000000000 -1.175494345e-38 1.175494357e-38 00000001.175494357e-38 00000001.175494357e-38 -1.175494345e-38 1.175494357e-38 00000001.175494357e-38 00000001.175494357e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494345e-38 1.17549e-38 1.175494357e-38 01.17549e-38 00000001.175494357e-38 01.17549e-38 00000001.175494357e-38 1000-01-06 838:59:53 1970-01-07 00:00:06 1970-01-07 00:00:06 1907 1907 1907 1enum 1set 7 7 0000000007 0000000000000000000000000000000000000000000000000000000000000007 0000000007 0000000000000000000000000000000000000000000000000000000000000007 1 6.600000000000000000000000000000 7 6.600000000000000000000000000000 0000000007 000000000000000000000000000000006.600000000000000000000000000000 0000000007 000000000000000000000000000000006.600000000000000000000000000000 -1.175494344e-38 1.175494358e-38 00000001.175494358e-38 00000001.175494358e-38 -1.175494344e-38 1.175494358e-38 00000001.175494358e-38 00000001.175494358e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494344e-38 1.17549e-38 1.175494358e-38 01.17549e-38 00000001.175494358e-38 01.17549e-38 00000001.175494358e-38 1000-01-07 838:59:52 1970-01-08 00:00:07 1970-01-08 00:00:07 1908 1908 1908 2enum 2set 8 8 0000000008 0000000000000000000000000000000000000000000000000000000000000008 0000000008 0000000000000000000000000000000000000000000000000000000000000008 2 7.700000000000000000000000000000 8 7.700000000000000000000000000000 0000000008 000000000000000000000000000000007.700000000000000000000000000000 0000000008 000000000000000000000000000000007.700000000000000000000000000000 -1.175494343e-38 1.175494359e-38 00000001.175494359e-38 00000001.175494359e-38 -1.175494343e-38 1.175494359e-38 00000001.175494359e-38 00000001.175494359e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494343e-38 1.17549e-38 1.175494359e-38 01.17549e-38 00000001.175494359e-38 01.17549e-38 00000001.175494359e-38 1000-01-08 838:59:51 1970-01-09 00:00:08 1970-01-09 00:00:08 1909 1909 1909 1enum 1set,2set 9 9 0000000009 0000000000000000000000000000000000000000000000000000000000000009 0000000009 0000000000000000000000000000000000000000000000000000000000000009 3 8.800000000000000000000000000000 9 8.800000000000000000000000000000 0000000009 000000000000000000000000000000008.800000000000000000000000000000 0000000009 000000000000000000000000000000008.800000000000000000000000000000 -1.175494342e-38 1.17549436e-38 000000001.17549436e-38 000000001.17549436e-38 -1.175494342e-38 1.17549436e-38 000000001.17549436e-38 000000001.17549436e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494342e-38 1.17549e-38 1.17549436e-38 01.17549e-38 000000001.17549436e-38 01.17549e-38 000000001.17549436e-38 1000-01-09 838:59:50 1970-01-10 00:00:09 1970-01-10 00:00:09 1910 1910 1910 2enum 1set 10 10 0000000010 0000000000000000000000000000000000000000000000000000000000000010 0000000010 0000000000000000000000000000000000000000000000000000000000000010 4 9.900000000000000000000000000000 10 9.900000000000000000000000000000 0000000010 000000000000000000000000000000009.900000000000000000000000000000 0000000010 000000000000000000000000000000009.900000000000000000000000000000 -1.175494341e-38 1.175494361e-38 00000001.175494361e-38 00000001.175494361e-38 -1.175494341e-38 1.175494361e-38 00000001.175494361e-38 00000001.175494361e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494341e-38 1.17549e-38 1.175494361e-38 01.17549e-38 00000001.175494361e-38 01.17549e-38 00000001.175494361e-38 1000-01-10 838:59:49 1970-01-11 00:00:10 1970-01-11 00:00:10 1911 1911 1911 1enum 2set -76710 226546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -2760 985654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -569300 9114376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -660 876546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -250 87895654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -340 9984376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -3410 996546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -2550 775654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -3330 764376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -441 16546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -24 51654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -323 14376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -34 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -4 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 15 87 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -22 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -394 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -94 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -195 87 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -292 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -987 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -7876 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -321 NULL 0000000765 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -9112 NULL 0000008771 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -107 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -109 108 0000000104 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -207 205 0000000206 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -209 208 0000000204 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -27 25 0000000026 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -29 28 0000000024 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 17 15 0000000016 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 19 18 0000000014 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +22 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +24 51654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +27 25 0000000026 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +29 28 0000000024 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +34 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +94 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +107 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 107 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 109 108 0000000104 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -299 899 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +109 108 0000000104 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +195 87 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +207 205 0000000206 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +209 208 0000000204 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 242 79 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +250 87895654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +292 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +299 899 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +321 NULL 0000000765 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +323 14376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +340 9984376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +394 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 424 89 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +441 16546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +660 876546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +987 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +2550 775654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +2760 985654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +3330 764376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +3410 996546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +7876 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +9112 NULL 0000008771 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +76710 226546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +569300 9114376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set CREATE or REPLACE VIEW v1 AS select * FROM test.tb2 WITH CASCADED CHECK OPTION ; -select * FROM v1 limit 0,10; +select * FROM v1 order by f59,f60,f61,f62,f63,f64 limit 0,10; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 1 1 0000000001 0000000000000000000000000000000000000000000000000000000000000001 0000000001 0000000000000000000000000000000000000000000000000000000000000001 -5 0.000000000000000000000000000000 1 0.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549435e-38 1.17549e-38 1.175494352e-38 01.17549e-38 00000001.175494352e-38 01.17549e-38 00000001.175494352e-38 1000-01-01 838:59:58 1970-01-02 00:00:01 1970-01-02 00:00:01 1902 1902 1902 2enum 2set 2 2 0000000002 0000000000000000000000000000000000000000000000000000000000000002 0000000002 0000000000000000000000000000000000000000000000000000000000000002 -4 1.100000000000000000000000000000 2 1.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494349e-38 1.17549e-38 1.175494353e-38 01.17549e-38 00000001.175494353e-38 01.17549e-38 00000001.175494353e-38 1000-01-02 838:59:57 1970-01-03 00:00:02 1970-01-03 00:00:02 1903 1903 1903 1enum 1set,2set 3 3 0000000003 0000000000000000000000000000000000000000000000000000000000000003 0000000003 0000000000000000000000000000000000000000000000000000000000000003 -3 2.200000000000000000000000000000 3 2.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494348e-38 1.17549e-38 1.175494354e-38 01.17549e-38 00000001.175494354e-38 01.17549e-38 00000001.175494354e-38 1000-01-03 838:59:56 1970-01-04 00:00:03 1970-01-04 00:00:03 1904 1904 1904 2enum 1set 4 4 0000000004 0000000000000000000000000000000000000000000000000000000000000004 0000000004 0000000000000000000000000000000000000000000000000000000000000004 -2 3.300000000000000000000000000000 4 3.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494347e-38 1.17549e-38 1.175494355e-38 01.17549e-38 00000001.175494355e-38 01.17549e-38 00000001.175494355e-38 1000-01-04 838:59:55 1970-01-05 00:00:04 1970-01-05 00:00:04 1905 1905 1905 1enum 2set +4 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 5 5 0000000005 0000000000000000000000000000000000000000000000000000000000000005 0000000005 0000000000000000000000000000000000000000000000000000000000000005 -1 4.400000000000000000000000000000 5 4.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494346e-38 1.17549e-38 1.175494356e-38 01.17549e-38 00000001.175494356e-38 01.17549e-38 00000001.175494356e-38 1000-01-05 838:59:54 1970-01-06 00:00:05 1970-01-06 00:00:05 1906 1906 1906 2enum 1set,2set 6 6 0000000006 0000000000000000000000000000000000000000000000000000000000000006 0000000006 0000000000000000000000000000000000000000000000000000000000000006 0 5.500000000000000000000000000000 6 5.500000000000000000000000000000 0000000006 000000000000000000000000000000005.500000000000000000000000000000 0000000006 000000000000000000000000000000005.500000000000000000000000000000 -1.175494345e-38 1.175494357e-38 00000001.175494357e-38 00000001.175494357e-38 -1.175494345e-38 1.175494357e-38 00000001.175494357e-38 00000001.175494357e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494345e-38 1.17549e-38 1.175494357e-38 01.17549e-38 00000001.175494357e-38 01.17549e-38 00000001.175494357e-38 1000-01-06 838:59:53 1970-01-07 00:00:06 1970-01-07 00:00:06 1907 1907 1907 1enum 1set 7 7 0000000007 0000000000000000000000000000000000000000000000000000000000000007 0000000007 0000000000000000000000000000000000000000000000000000000000000007 1 6.600000000000000000000000000000 7 6.600000000000000000000000000000 0000000007 000000000000000000000000000000006.600000000000000000000000000000 0000000007 000000000000000000000000000000006.600000000000000000000000000000 -1.175494344e-38 1.175494358e-38 00000001.175494358e-38 00000001.175494358e-38 -1.175494344e-38 1.175494358e-38 00000001.175494358e-38 00000001.175494358e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494344e-38 1.17549e-38 1.175494358e-38 01.17549e-38 00000001.175494358e-38 01.17549e-38 00000001.175494358e-38 1000-01-07 838:59:52 1970-01-08 00:00:07 1970-01-08 00:00:07 1908 1908 1908 2enum 2set 8 8 0000000008 0000000000000000000000000000000000000000000000000000000000000008 0000000008 0000000000000000000000000000000000000000000000000000000000000008 2 7.700000000000000000000000000000 8 7.700000000000000000000000000000 0000000008 000000000000000000000000000000007.700000000000000000000000000000 0000000008 000000000000000000000000000000007.700000000000000000000000000000 -1.175494343e-38 1.175494359e-38 00000001.175494359e-38 00000001.175494359e-38 -1.175494343e-38 1.175494359e-38 00000001.175494359e-38 00000001.175494359e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494343e-38 1.17549e-38 1.175494359e-38 01.17549e-38 00000001.175494359e-38 01.17549e-38 00000001.175494359e-38 1000-01-08 838:59:51 1970-01-09 00:00:08 1970-01-09 00:00:08 1909 1909 1909 1enum 1set,2set 9 9 0000000009 0000000000000000000000000000000000000000000000000000000000000009 0000000009 0000000000000000000000000000000000000000000000000000000000000009 3 8.800000000000000000000000000000 9 8.800000000000000000000000000000 0000000009 000000000000000000000000000000008.800000000000000000000000000000 0000000009 000000000000000000000000000000008.800000000000000000000000000000 -1.175494342e-38 1.17549436e-38 000000001.17549436e-38 000000001.17549436e-38 -1.175494342e-38 1.17549436e-38 000000001.17549436e-38 000000001.17549436e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494342e-38 1.17549e-38 1.17549436e-38 01.17549e-38 000000001.17549436e-38 01.17549e-38 000000001.17549436e-38 1000-01-09 838:59:50 1970-01-10 00:00:09 1970-01-10 00:00:09 1910 1910 1910 2enum 1set -10 10 0000000010 0000000000000000000000000000000000000000000000000000000000000010 0000000010 0000000000000000000000000000000000000000000000000000000000000010 4 9.900000000000000000000000000000 10 9.900000000000000000000000000000 0000000010 000000000000000000000000000000009.900000000000000000000000000000 0000000010 000000000000000000000000000000009.900000000000000000000000000000 -1.175494341e-38 1.175494361e-38 00000001.175494361e-38 00000001.175494361e-38 -1.175494341e-38 1.175494361e-38 00000001.175494361e-38 00000001.175494361e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494341e-38 1.17549e-38 1.175494361e-38 01.17549e-38 00000001.175494361e-38 01.17549e-38 00000001.175494361e-38 1000-01-10 838:59:49 1970-01-11 00:00:10 1970-01-11 00:00:10 1911 1911 1911 1enum 2set CREATE OR REPLACE VIEW v1 AS SELECT F59, F60 FROM test.tb2 WITH CASCADED CHECK OPTION; -SELECT * FROM v1 limit 0,10; +SELECT * FROM v1 order by f59,f60 limit 0,10; F59 F60 1 1 2 2 3 3 4 4 +4 74 5 5 6 6 7 7 8 8 9 9 -10 10 CREATE or REPLACE VIEW v1 AS select f59, f60 from test.tb2 where f59=3330 ; -select * FROM v1 limit 0,10; +select * FROM v1 order by f60 limit 0,10; f59 f60 3330 764376 DROP VIEW v1 ; @@ -863,73 +863,73 @@ CREATE TABLE t1 (f1 BIGINT); INSERT INTO t1 VALUES(1); CREATE VIEW test.v1 AS SELECT * FROM t1 limit 2; SHOW CREATE VIEW test.v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`f1` AS `f1` from `t1` limit 2 +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`f1` AS `f1` from `t1` limit 2 latin1 latin1_swedish_ci SELECT * FROM test.v1; f1 1 CREATE OR REPLACE ALGORITHM = TEMPTABLE VIEW test.v1 AS SELECT * FROM t1 limit 2; SHOW CREATE VIEW test.v1; -View Create View -v1 CREATE ALGORITHM=TEMPTABLE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`f1` AS `f1` from `t1` limit 2 +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=TEMPTABLE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`f1` AS `f1` from `t1` limit 2 latin1 latin1_swedish_ci SELECT * FROM test.v1; f1 1 -CREATE OR REPLACE VIEW test.v1 AS SELECT * FROM tb2 limit 2; +CREATE OR REPLACE VIEW test.v1 AS SELECT * FROM tb2 order by f59 limit 2; SHOW CREATE VIEW test.v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `tb2`.`f59` AS `f59`,`tb2`.`f60` AS `f60`,`tb2`.`f61` AS `f61`,`tb2`.`f62` AS `f62`,`tb2`.`f63` AS `f63`,`tb2`.`f64` AS `f64`,`tb2`.`f65` AS `f65`,`tb2`.`f66` AS `f66`,`tb2`.`f67` AS `f67`,`tb2`.`f68` AS `f68`,`tb2`.`f69` AS `f69`,`tb2`.`f70` AS `f70`,`tb2`.`f71` AS `f71`,`tb2`.`f72` AS `f72`,`tb2`.`f73` AS `f73`,`tb2`.`f74` AS `f74`,`tb2`.`f75` AS `f75`,`tb2`.`f76` AS `f76`,`tb2`.`f77` AS `f77`,`tb2`.`f78` AS `f78`,`tb2`.`f79` AS `f79`,`tb2`.`f80` AS `f80`,`tb2`.`f81` AS `f81`,`tb2`.`f82` AS `f82`,`tb2`.`f83` AS `f83`,`tb2`.`f84` AS `f84`,`tb2`.`f85` AS `f85`,`tb2`.`f86` AS `f86`,`tb2`.`f87` AS `f87`,`tb2`.`f88` AS `f88`,`tb2`.`f89` AS `f89`,`tb2`.`f90` AS `f90`,`tb2`.`f91` AS `f91`,`tb2`.`f92` AS `f92`,`tb2`.`f93` AS `f93`,`tb2`.`f94` AS `f94`,`tb2`.`f95` AS `f95`,`tb2`.`f96` AS `f96`,`tb2`.`f97` AS `f97`,`tb2`.`f98` AS `f98`,`tb2`.`f99` AS `f99`,`tb2`.`f100` AS `f100`,`tb2`.`f101` AS `f101`,`tb2`.`f102` AS `f102`,`tb2`.`f103` AS `f103`,`tb2`.`f104` AS `f104`,`tb2`.`f105` AS `f105`,`tb2`.`f106` AS `f106`,`tb2`.`f107` AS `f107`,`tb2`.`f108` AS `f108`,`tb2`.`f109` AS `f109` from `tb2` limit 2 -SELECT * FROM test.v1 ; +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `tb2`.`f59` AS `f59`,`tb2`.`f60` AS `f60`,`tb2`.`f61` AS `f61`,`tb2`.`f62` AS `f62`,`tb2`.`f63` AS `f63`,`tb2`.`f64` AS `f64`,`tb2`.`f65` AS `f65`,`tb2`.`f66` AS `f66`,`tb2`.`f67` AS `f67`,`tb2`.`f68` AS `f68`,`tb2`.`f69` AS `f69`,`tb2`.`f70` AS `f70`,`tb2`.`f71` AS `f71`,`tb2`.`f72` AS `f72`,`tb2`.`f73` AS `f73`,`tb2`.`f74` AS `f74`,`tb2`.`f75` AS `f75`,`tb2`.`f76` AS `f76`,`tb2`.`f77` AS `f77`,`tb2`.`f78` AS `f78`,`tb2`.`f79` AS `f79`,`tb2`.`f80` AS `f80`,`tb2`.`f81` AS `f81`,`tb2`.`f82` AS `f82`,`tb2`.`f83` AS `f83`,`tb2`.`f84` AS `f84`,`tb2`.`f85` AS `f85`,`tb2`.`f86` AS `f86`,`tb2`.`f87` AS `f87`,`tb2`.`f88` AS `f88`,`tb2`.`f89` AS `f89`,`tb2`.`f90` AS `f90`,`tb2`.`f91` AS `f91`,`tb2`.`f92` AS `f92`,`tb2`.`f93` AS `f93`,`tb2`.`f94` AS `f94`,`tb2`.`f95` AS `f95`,`tb2`.`f96` AS `f96`,`tb2`.`f97` AS `f97`,`tb2`.`f98` AS `f98`,`tb2`.`f99` AS `f99`,`tb2`.`f100` AS `f100`,`tb2`.`f101` AS `f101`,`tb2`.`f102` AS `f102`,`tb2`.`f103` AS `f103`,`tb2`.`f104` AS `f104`,`tb2`.`f105` AS `f105`,`tb2`.`f106` AS `f106`,`tb2`.`f107` AS `f107`,`tb2`.`f108` AS `f108`,`tb2`.`f109` AS `f109` from `tb2` order by `tb2`.`f59` limit 2 latin1 latin1_swedish_ci +SELECT * FROM test.v1 order by f59,f60,f61,f62,f63,f64,f65; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 1 1 0000000001 0000000000000000000000000000000000000000000000000000000000000001 0000000001 0000000000000000000000000000000000000000000000000000000000000001 -5 0.000000000000000000000000000000 1 0.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549435e-38 1.17549e-38 1.175494352e-38 01.17549e-38 00000001.175494352e-38 01.17549e-38 00000001.175494352e-38 1000-01-01 838:59:58 1970-01-02 00:00:01 1970-01-02 00:00:01 1902 1902 1902 2enum 2set 2 2 0000000002 0000000000000000000000000000000000000000000000000000000000000002 0000000002 0000000000000000000000000000000000000000000000000000000000000002 -4 1.100000000000000000000000000000 2 1.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494349e-38 1.17549e-38 1.175494353e-38 01.17549e-38 00000001.175494353e-38 01.17549e-38 00000001.175494353e-38 1000-01-02 838:59:57 1970-01-03 00:00:02 1970-01-03 00:00:02 1903 1903 1903 1enum 1set,2set CREATE OR REPLACE VIEW test.v1 AS SELECT F59 FROM tb2 limit 10,100; SHOW CREATE VIEW test.v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `tb2`.`f59` AS `F59` from `tb2` limit 10,100 -SELECT * FROM test.v1; +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `tb2`.`f59` AS `F59` from `tb2` limit 10,100 latin1 latin1_swedish_ci +SELECT * FROM test.v1 order by F59; F59 -76710 -2760 -569300 -660 -250 -340 -3410 -2550 -3330 -441 -24 -323 -34 +1 +2 4 +4 +6 +7 +8 +9 15 22 -394 -94 -195 -292 -987 -7876 -321 -9112 -500 -500 -500 -107 -109 -207 -209 27 29 -17 -19 +94 +107 107 109 -299 +109 +195 +207 +209 242 +250 +292 +299 +321 +323 +340 +394 424 +441 +500 +500 +987 +2550 +2760 +3330 +3410 +9112 +76710 +569300 Drop table test.t1 ; Drop view test.v1 ; @@ -946,8 +946,8 @@ Drop table if exists test.v1 ; CREATE OR REPLACE view test.v1 as select * from tb2 LIMIT 2; SELECT * FROM test.v1; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 +340 9984376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 1 1 0000000001 0000000000000000000000000000000000000000000000000000000000000001 0000000001 0000000000000000000000000000000000000000000000000000000000000001 -5 0.000000000000000000000000000000 1 0.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549435e-38 1.17549e-38 1.175494352e-38 01.17549e-38 00000001.175494352e-38 01.17549e-38 00000001.175494352e-38 1000-01-01 838:59:58 1970-01-02 00:00:01 1970-01-02 00:00:01 1902 1902 1902 2enum 2set -2 2 0000000002 0000000000000000000000000000000000000000000000000000000000000002 0000000002 0000000000000000000000000000000000000000000000000000000000000002 -4 1.100000000000000000000000000000 2 1.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494349e-38 1.17549e-38 1.175494353e-38 01.17549e-38 00000001.175494353e-38 01.17549e-38 00000001.175494353e-38 1000-01-02 838:59:57 1970-01-03 00:00:02 1970-01-03 00:00:02 1903 1903 1903 1enum 1set,2set Drop view test.v1 ; Testcase 3.3.1.16 + 3.3.1.17 @@ -965,38 +965,38 @@ CREATE TABLE t1 (f1 NUMERIC(15,3)); INSERT INTO t1 VALUES(8.8); CREATE VIEW v1 AS SELECT * FROM t1; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`f1` AS `f1` from `t1` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`f1` AS `f1` from `t1` latin1 latin1_swedish_ci SELECT * FROM v1; f1 8.800 CREATE OR REPLACE VIEW v1 AS SELECT f1 FROM t1; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`f1` AS `f1` from `t1` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`f1` AS `f1` from `t1` latin1 latin1_swedish_ci SELECT * FROM v1; f1 8.800 CREATE OR REPLACE VIEW v1 AS SELECT f1 As my_column FROM t1; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`f1` AS `my_column` from `t1` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`f1` AS `my_column` from `t1` latin1 latin1_swedish_ci SELECT * FROM v1; my_column 8.800 CREATE OR REPLACE VIEW v1(column1,column2) AS SELECT f1 As my_column, f1 FROM t1; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`f1` AS `column1`,`t1`.`f1` AS `column2` from `t1` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`f1` AS `column1`,`t1`.`f1` AS `column2` from `t1` latin1 latin1_swedish_ci SELECT * FROM v1; column1 column2 8.800 8.800 CREATE OR REPLACE VIEW test.v1(column1,column2) AS SELECT f1 As my_column, f1 FROM test.t1; SHOW CREATE VIEW v1; -View Create View -v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`f1` AS `column1`,`t1`.`f1` AS `column2` from `t1` +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`f1` AS `column1`,`t1`.`f1` AS `column2` from `t1` latin1 latin1_swedish_ci SELECT * FROM v1; column1 column2 8.800 8.800 @@ -1081,10 +1081,10 @@ Testcase 3.3.1.21 -------------------------------------------------------------------------------- DROP VIEW IF EXISTS v1; CREATE VIEW test.v1( F59, F60 ) AS SELECT F59, F60 From tb2 LIMIT 2; -SELECT * FROM test.v1; +SELECT * FROM test.v1 order by F59, F60 desc; F59 F60 1 1 -2 2 +340 9984376 Drop view if exists test.v1 ; Testcase 3.3.1.22 @@ -1093,8 +1093,8 @@ DROP VIEW IF EXISTS v1; CREATE VIEW test.v1( product ) AS SELECT f59*f60 From tb2 LIMIT 2; SELECT * FROM test.v1; product -1 -4 +9 +25 CREATE OR REPLACE VIEW test.v1( product ) AS SELECT 1*2; SELECT * FROM test.v1; product @@ -1180,8 +1180,8 @@ DROP VIEW IF EXISTS v1; Create view test.v1 AS Select * from test.tb2 limit 2 ; Select * from test.v1; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 +340 9984376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 1 1 0000000001 0000000000000000000000000000000000000000000000000000000000000001 0000000001 0000000000000000000000000000000000000000000000000000000000000001 -5 0.000000000000000000000000000000 1 0.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549435e-38 1.17549e-38 1.175494352e-38 01.17549e-38 00000001.175494352e-38 01.17549e-38 00000001.175494352e-38 1000-01-01 838:59:58 1970-01-02 00:00:01 1970-01-02 00:00:01 1902 1902 1902 2enum 2set -2 2 0000000002 0000000000000000000000000000000000000000000000000000000000000002 0000000002 0000000000000000000000000000000000000000000000000000000000000002 -4 1.100000000000000000000000000000 2 1.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494349e-38 1.17549e-38 1.175494353e-38 01.17549e-38 00000001.175494353e-38 01.17549e-38 00000001.175494353e-38 1000-01-02 838:59:57 1970-01-03 00:00:02 1970-01-03 00:00:02 1903 1903 1903 1enum 1set,2set Drop view test.v1 ; Testcase 3.3.1.27 @@ -1190,10 +1190,10 @@ DROP VIEW IF EXISTS test.v1; Drop VIEW IF EXISTS test.v1_1 ; Create view test.v1 AS Select * from test.tb2 limit 2 ; Create view test.v1_1 AS Select F59 from test.v1 ; -Select * from test.v1_1 limit 20 ; +Select * from test.v1_1 order by F59 limit 20 ; F59 1 -2 +340 Drop view test.v1 ; Drop view test.v1_1 ; @@ -1204,58 +1204,58 @@ create database test2 ; Create view test2.v2 AS Select * from test.tb2 limit 50,50; use test2 ; Create view v1 AS Select * from test.tb2 limit 50 ; -Select * from v1 ; +Select * from v1 order by f59,f60,f61,f62,f63,f64,f65; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 1 1 0000000001 0000000000000000000000000000000000000000000000000000000000000001 0000000001 0000000000000000000000000000000000000000000000000000000000000001 -5 0.000000000000000000000000000000 1 0.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549435e-38 1.17549e-38 1.175494352e-38 01.17549e-38 00000001.175494352e-38 01.17549e-38 00000001.175494352e-38 1000-01-01 838:59:58 1970-01-02 00:00:01 1970-01-02 00:00:01 1902 1902 1902 2enum 2set 2 2 0000000002 0000000000000000000000000000000000000000000000000000000000000002 0000000002 0000000000000000000000000000000000000000000000000000000000000002 -4 1.100000000000000000000000000000 2 1.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494349e-38 1.17549e-38 1.175494353e-38 01.17549e-38 00000001.175494353e-38 01.17549e-38 00000001.175494353e-38 1000-01-02 838:59:57 1970-01-03 00:00:02 1970-01-03 00:00:02 1903 1903 1903 1enum 1set,2set 3 3 0000000003 0000000000000000000000000000000000000000000000000000000000000003 0000000003 0000000000000000000000000000000000000000000000000000000000000003 -3 2.200000000000000000000000000000 3 2.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494348e-38 1.17549e-38 1.175494354e-38 01.17549e-38 00000001.175494354e-38 01.17549e-38 00000001.175494354e-38 1000-01-03 838:59:56 1970-01-04 00:00:03 1970-01-04 00:00:03 1904 1904 1904 2enum 1set 4 4 0000000004 0000000000000000000000000000000000000000000000000000000000000004 0000000004 0000000000000000000000000000000000000000000000000000000000000004 -2 3.300000000000000000000000000000 4 3.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494347e-38 1.17549e-38 1.175494355e-38 01.17549e-38 00000001.175494355e-38 01.17549e-38 00000001.175494355e-38 1000-01-04 838:59:55 1970-01-05 00:00:04 1970-01-05 00:00:04 1905 1905 1905 1enum 2set +4 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 5 5 0000000005 0000000000000000000000000000000000000000000000000000000000000005 0000000005 0000000000000000000000000000000000000000000000000000000000000005 -1 4.400000000000000000000000000000 5 4.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494346e-38 1.17549e-38 1.175494356e-38 01.17549e-38 00000001.175494356e-38 01.17549e-38 00000001.175494356e-38 1000-01-05 838:59:54 1970-01-06 00:00:05 1970-01-06 00:00:05 1906 1906 1906 2enum 1set,2set 6 6 0000000006 0000000000000000000000000000000000000000000000000000000000000006 0000000006 0000000000000000000000000000000000000000000000000000000000000006 0 5.500000000000000000000000000000 6 5.500000000000000000000000000000 0000000006 000000000000000000000000000000005.500000000000000000000000000000 0000000006 000000000000000000000000000000005.500000000000000000000000000000 -1.175494345e-38 1.175494357e-38 00000001.175494357e-38 00000001.175494357e-38 -1.175494345e-38 1.175494357e-38 00000001.175494357e-38 00000001.175494357e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494345e-38 1.17549e-38 1.175494357e-38 01.17549e-38 00000001.175494357e-38 01.17549e-38 00000001.175494357e-38 1000-01-06 838:59:53 1970-01-07 00:00:06 1970-01-07 00:00:06 1907 1907 1907 1enum 1set 7 7 0000000007 0000000000000000000000000000000000000000000000000000000000000007 0000000007 0000000000000000000000000000000000000000000000000000000000000007 1 6.600000000000000000000000000000 7 6.600000000000000000000000000000 0000000007 000000000000000000000000000000006.600000000000000000000000000000 0000000007 000000000000000000000000000000006.600000000000000000000000000000 -1.175494344e-38 1.175494358e-38 00000001.175494358e-38 00000001.175494358e-38 -1.175494344e-38 1.175494358e-38 00000001.175494358e-38 00000001.175494358e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494344e-38 1.17549e-38 1.175494358e-38 01.17549e-38 00000001.175494358e-38 01.17549e-38 00000001.175494358e-38 1000-01-07 838:59:52 1970-01-08 00:00:07 1970-01-08 00:00:07 1908 1908 1908 2enum 2set 8 8 0000000008 0000000000000000000000000000000000000000000000000000000000000008 0000000008 0000000000000000000000000000000000000000000000000000000000000008 2 7.700000000000000000000000000000 8 7.700000000000000000000000000000 0000000008 000000000000000000000000000000007.700000000000000000000000000000 0000000008 000000000000000000000000000000007.700000000000000000000000000000 -1.175494343e-38 1.175494359e-38 00000001.175494359e-38 00000001.175494359e-38 -1.175494343e-38 1.175494359e-38 00000001.175494359e-38 00000001.175494359e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494343e-38 1.17549e-38 1.175494359e-38 01.17549e-38 00000001.175494359e-38 01.17549e-38 00000001.175494359e-38 1000-01-08 838:59:51 1970-01-09 00:00:08 1970-01-09 00:00:08 1909 1909 1909 1enum 1set,2set 9 9 0000000009 0000000000000000000000000000000000000000000000000000000000000009 0000000009 0000000000000000000000000000000000000000000000000000000000000009 3 8.800000000000000000000000000000 9 8.800000000000000000000000000000 0000000009 000000000000000000000000000000008.800000000000000000000000000000 0000000009 000000000000000000000000000000008.800000000000000000000000000000 -1.175494342e-38 1.17549436e-38 000000001.17549436e-38 000000001.17549436e-38 -1.175494342e-38 1.17549436e-38 000000001.17549436e-38 000000001.17549436e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494342e-38 1.17549e-38 1.17549436e-38 01.17549e-38 000000001.17549436e-38 01.17549e-38 000000001.17549436e-38 1000-01-09 838:59:50 1970-01-10 00:00:09 1970-01-10 00:00:09 1910 1910 1910 2enum 1set 10 10 0000000010 0000000000000000000000000000000000000000000000000000000000000010 0000000010 0000000000000000000000000000000000000000000000000000000000000010 4 9.900000000000000000000000000000 10 9.900000000000000000000000000000 0000000010 000000000000000000000000000000009.900000000000000000000000000000 0000000010 000000000000000000000000000000009.900000000000000000000000000000 -1.175494341e-38 1.175494361e-38 00000001.175494361e-38 00000001.175494361e-38 -1.175494341e-38 1.175494361e-38 00000001.175494361e-38 00000001.175494361e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494341e-38 1.17549e-38 1.175494361e-38 01.17549e-38 00000001.175494361e-38 01.17549e-38 00000001.175494361e-38 1000-01-10 838:59:49 1970-01-11 00:00:10 1970-01-11 00:00:10 1911 1911 1911 1enum 2set -76710 226546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -2760 985654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -569300 9114376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -660 876546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -250 87895654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -340 9984376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -3410 996546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -2550 775654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -3330 764376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -441 16546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -24 51654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -323 14376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -34 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -4 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 15 87 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -22 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -394 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -94 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -195 87 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -292 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -987 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -7876 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -321 NULL 0000000765 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -9112 NULL 0000008771 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -107 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -109 108 0000000104 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -207 205 0000000206 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -209 208 0000000204 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -27 25 0000000026 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -29 28 0000000024 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 17 15 0000000016 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 19 18 0000000014 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +22 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +24 51654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +27 25 0000000026 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +29 28 0000000024 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +34 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +94 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +107 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 107 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 109 108 0000000104 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -299 899 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +109 108 0000000104 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +195 87 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +207 205 0000000206 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +209 208 0000000204 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 242 79 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +250 87895654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +292 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +299 899 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +321 NULL 0000000765 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +323 14376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +340 9984376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +394 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 424 89 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +441 16546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +500 NULL 0000000900 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +660 876546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +987 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +2550 775654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +2760 985654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +3330 764376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +3410 996546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +7876 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +9112 NULL 0000008771 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +76710 226546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +569300 9114376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set Select * from test2.v2 ; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 Drop view if exists test2.v1 ; @@ -1318,18 +1318,18 @@ CREATE VIEW test.v1 AS SELECT test.v1_firstview.f59, test.v1_firstview.f60 FROM test.v1_firstview INNER JOIN test.v1_secondview ON test.v1_firstview.f59 = test.v1_secondview.f59 ; -SELECT * FROM test.v1 limit 0,10; +SELECT * FROM test.v1 order by f59,f60 limit 0,10; f59 f60 1 1 2 2 3 3 4 4 +4 4 +4 74 4 74 5 5 6 6 7 7 -8 8 -9 9 Drop view if exists test.v1_firstview ; Drop view if exists test.v1_secondview ; Drop view if exists test.v1 ; @@ -1347,18 +1347,18 @@ CREATE VIEW v1 AS SELECT test.v1_firstview.F59, test.v1_firstview.F60 FROM test.v1_firstview INNER JOIN test.v1_secondview ON test.v1_firstview.f59 = test.v1_secondview.f59 ; -SELECT * FROM v1 limit 0,10; +SELECT * FROM v1 order by f59,f60 limit 0,10; F59 F60 1 1 2 2 3 3 4 4 +4 4 +4 74 4 74 5 5 6 6 7 7 -8 8 -9 9 Drop view v1 ; Drop view test.v1_firstview ; Drop view test.v1_secondview ; @@ -1373,18 +1373,18 @@ CREATE VIEW test.v1 AS SELECT test.v1_firstview.f59, test.v1_firstview.f60 FROM test.v1_firstview INNER JOIN test.tb2 ON test.v1_firstview.f59 = test.tb2.f59; -SELECT * FROM test.v1 limit 0,10; +SELECT * FROM test.v1 order by f59,f60 limit 0,10; f59 f60 1 1 2 2 3 3 4 4 +4 4 +4 74 4 74 5 5 6 6 7 7 -8 8 -9 9 Drop view test.v1 ; Drop view test.v1_firstview; @@ -1397,18 +1397,18 @@ CREATE VIEW v1_firstview AS SELECT * FROM test.tb2 ; CREATE VIEW v1 AS SELECT v1_firstview.f59, v1_firstview.f60 FROM v1_firstview INNER JOIN test.tb2 ON v1_firstview.f59 = test.tb2.f59 ; -SELECT * FROM v1 limit 0,10; +SELECT * FROM v1 order by f59,f60 limit 0,10; f59 f60 1 1 2 2 3 3 4 4 +4 4 +4 74 4 74 5 5 6 6 7 7 -8 8 -9 9 Drop database test2 ; Testcase 3.3.1.37 @@ -1420,18 +1420,18 @@ Drop view if exists test.v1_1 ; Drop view if exists test.v1_1 ; Drop view if exists test.v1_main ; Create view test.v1 as Select f59, f60 FROM test.tb2; -Select * from test.v1 limit 0,10; +Select * from test.v1 order by f59,f60 limit 0,10; f59 f60 1 1 2 2 3 3 4 4 +4 74 5 5 6 6 7 7 8 8 9 9 -10 10 Create table t1(f59 int, f60 int); Insert into t1 values (90,507) ; Create view v1_1 as Select f59,f60 from t1 ; @@ -1441,18 +1441,18 @@ f59 f60 Create view v1_main as SELECT test.tb2.f59 FROM test.tb2 JOIN test.v1 ON test.tb2.f59 = test.v1.f59; -Select * from v1_main limit 0,10; +Select * from v1_main order by f59 limit 0,10; f59 1 2 3 4 4 +4 +4 5 6 7 -8 -9 Drop table t1; Drop view test.v1 ; Drop view test.v1_1 ; @@ -1738,28 +1738,28 @@ Drop view if exists test.v1_main; Drop view if exists test1.v1_1 ; Drop database if exists test3 ; Create view test.v1 as Select f59, f60 FROM test.tb2 limit 20 ; -Select * from test.v1 ; +Select * from test.v1 order by f59,f60; f59 f60 -1 1 2 2 3 3 -4 4 5 5 6 6 -7 7 -8 8 9 9 10 10 -76710 226546 -2760 985654 -569300 9114376 +17 15 +19 18 +24 51654 +34 41 +107 105 +323 14376 +441 16546 +500 NULL +500 NULL 660 876546 -250 87895654 -340 9984376 -3410 996546 2550 775654 3330 764376 -441 16546 +3410 996546 +7876 74 Create table test1.t1 (f59 int,f60 int) ; Insert into test1.t1 values (199,507) ; Create view test1.v1_1 as Select f59,f60 from test1.t1 ; @@ -1792,7 +1792,7 @@ Drop view if exists test.v1 ; CREATE VIEW test.v1 AS Select f59 from (Select * FROM tb2 limit 20) tx ; ERROR HY000: View's SELECT contains a subquery in the FROM clause -SELECT * FROM test.v1 ; +SELECT * FROM test.v1 order by f59 ; ERROR 42S02: Table 'test.v1' doesn't exist Drop view if exists test.v1 ; @@ -1873,7 +1873,7 @@ CREATE VIEW test.v1 AS SELECT * FROM test.tb2 where f59 = 04; UPDATE test.v1 SET f59 = 30 where F59 = 04 ; affected rows: 2 info: Rows matched: 2 Changed: 2 Warnings: 0 -SELECT * FROM test.v1 where f59 = 30 ; +SELECT * FROM test.v1 where f59 = 30 order by f59; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 SELECT * FROM test.tb2 where f59 = 30 ; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 @@ -1886,7 +1886,7 @@ SELECT * FROM tb2 where f59 = 100 ; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 100 4 0000000004 0000000000000000000000000000000000000000000000000000000000000004 0000000004 0000000000000000000000000000000000000000000000000000000000000004 -2 3.300000000000000000000000000000 4 3.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494347e-38 1.17549e-38 1.175494355e-38 01.17549e-38 00000001.175494355e-38 01.17549e-38 00000001.175494355e-38 1000-01-04 838:59:55 1970-01-05 00:00:04 1970-01-05 00:00:04 1905 1905 1905 1enum 2set 100 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -SELECT * FROM test.v1 ; +SELECT * FROM test.v1 order by f59 ; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 drop view if exists test.v1 ; Drop TABLE IF EXISTS test.t1 ; @@ -1962,7 +1962,7 @@ CREATE VIEW test.v1 AS SELECT f59,f60 FROM test.tb2 where f59 = 195 WITH CHECK OPTION ; UPDATE test.v1 SET f59 = 198 where f59=195 ; ERROR HY000: CHECK OPTION failed 'test.v1' -SELECT * FROM test.v1 ; +SELECT * FROM test.v1 order by f59 ; f59 f60 195 87 drop view if exists test.v1 ; @@ -1976,7 +1976,7 @@ FROM test.tb2 where F59 = 0987 WITH LOCAL CHECK OPTION ; CREATE VIEW test.v2 as SELECT * FROM test.v1 ; UPDATE test.v1 SET F59 = 919 where f59 = 0987 ; ERROR HY000: CHECK OPTION failed 'test.v1' -SELECT * FROM test.v1 ; +SELECT * FROM test.v1 order by f59 ; f59 f60 987 41 UPDATE test.v2 SET F59 = 9879 where f59 = 919 ; @@ -9671,115 +9671,115 @@ Testcase 3.3.1.50 - 3.3.1.53 -------------------------------------------------------------------------------- DROP VIEW IF EXISTS test.v1; CREATE VIEW test.v1 AS SELECT * FROM test.tb2 limit 5 ; -SELECT * FROM test.v1 ; +SELECT * FROM test.v1 order by f59 ; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 1 1 0000000001 0000000000000000000000000000000000000000000000000000000000000001 0000000001 0000000000000000000000000000000000000000000000000000000000000001 -5 0.000000000000000000000000000000 1 0.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549435e-38 1.17549e-38 1.175494352e-38 01.17549e-38 00000001.175494352e-38 01.17549e-38 00000001.175494352e-38 1000-01-01 838:59:58 1970-01-02 00:00:01 1970-01-02 00:00:01 1902 1902 1902 2enum 2set -2 2 0000000002 0000000000000000000000000000000000000000000000000000000000000002 0000000002 0000000000000000000000000000000000000000000000000000000000000002 -4 1.100000000000000000000000000000 2 1.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494349e-38 1.17549e-38 1.175494353e-38 01.17549e-38 00000001.175494353e-38 01.17549e-38 00000001.175494353e-38 1000-01-02 838:59:57 1970-01-03 00:00:02 1970-01-03 00:00:02 1903 1903 1903 1enum 1set,2set -3 3 0000000003 0000000000000000000000000000000000000000000000000000000000000003 0000000003 0000000000000000000000000000000000000000000000000000000000000003 -3 2.200000000000000000000000000000 3 2.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494348e-38 1.17549e-38 1.175494354e-38 01.17549e-38 00000001.175494354e-38 01.17549e-38 00000001.175494354e-38 1000-01-03 838:59:56 1970-01-04 00:00:03 1970-01-04 00:00:03 1904 1904 1904 2enum 1set -100 4 0000000004 0000000000000000000000000000000000000000000000000000000000000004 0000000004 0000000000000000000000000000000000000000000000000000000000000004 -2 3.300000000000000000000000000000 4 3.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494347e-38 1.17549e-38 1.175494355e-38 01.17549e-38 00000001.175494355e-38 01.17549e-38 00000001.175494355e-38 1000-01-04 838:59:55 1970-01-05 00:00:04 1970-01-05 00:00:04 1905 1905 1905 1enum 2set -5 5 0000000005 0000000000000000000000000000000000000000000000000000000000000005 0000000005 0000000000000000000000000000000000000000000000000000000000000005 -1 4.400000000000000000000000000000 5 4.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494346e-38 1.17549e-38 1.175494356e-38 01.17549e-38 00000001.175494356e-38 01.17549e-38 00000001.175494356e-38 1000-01-05 838:59:54 1970-01-06 00:00:05 1970-01-06 00:00:05 1906 1906 1906 2enum 1set,2set +8 8 0000000008 0000000000000000000000000000000000000000000000000000000000000008 0000000008 0000000000000000000000000000000000000000000000000000000000000008 2 7.700000000000000000000000000000 8 7.700000000000000000000000000000 0000000008 000000000000000000000000000000007.700000000000000000000000000000 0000000008 000000000000000000000000000000007.700000000000000000000000000000 -1.175494343e-38 1.175494359e-38 00000001.175494359e-38 00000001.175494359e-38 -1.175494343e-38 1.175494359e-38 00000001.175494359e-38 00000001.175494359e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494343e-38 1.17549e-38 1.175494359e-38 01.17549e-38 00000001.175494359e-38 01.17549e-38 00000001.175494359e-38 1000-01-08 838:59:51 1970-01-09 00:00:08 1970-01-09 00:00:08 1909 1909 1909 1enum 1set,2set +15 87 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +340 9984376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +2760 985654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set drop view test.v1 ; CREATE VIEW test.v1 AS SELECT F59,F61 FROM test.tb2 limit 50 ; -SELECT * FROM test.v1 ; +SELECT * FROM test.v1 order by F59, F61 ; F59 F61 1 0000000001 2 0000000002 3 0000000003 -100 0000000004 5 0000000005 6 0000000006 7 0000000007 8 0000000008 9 0000000009 10 0000000010 -76710 NULL -2760 NULL -569300 NULL -660 NULL -250 NULL -340 NULL -3410 NULL -2550 NULL -3330 NULL -441 NULL -24 NULL -323 NULL -34 NULL -100 NULL 15 NULL -22 NULL -394 NULL -94 NULL -195 NULL -292 NULL -987 NULL -7876 NULL -321 0000000765 -9112 0000008771 -500 0000000900 -500 0000000900 -500 0000000900 -107 0000000106 -109 0000000104 -207 0000000206 -209 0000000204 -27 0000000026 -29 0000000024 17 0000000016 19 0000000014 +22 NULL +24 NULL +27 0000000026 +29 0000000024 +34 NULL +94 NULL +100 NULL +100 0000000004 +107 0000000106 107 0000000106 109 0000000104 -299 NULL +109 0000000104 +195 NULL +207 0000000206 +209 0000000204 242 NULL +250 NULL +292 NULL +299 NULL +321 0000000765 +323 NULL +340 NULL +394 NULL 424 NULL +441 NULL +500 0000000900 +500 0000000900 +500 0000000900 +660 NULL +987 NULL +2550 NULL +2760 NULL +3330 NULL +3410 NULL +7876 NULL +9112 0000008771 +76710 NULL +569300 NULL drop view test.v1 ; -CREATE VIEW test.v1 AS SELECT * FROM test.tb2 limit 20 ; -SELECT * FROM test.v1; +CREATE VIEW test.v1 AS SELECT * FROM test.tb2 order by f59, f60, f61 limit 20 ; +SELECT * FROM test.v1 order by f59,f60,f61 ; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 1 1 0000000001 0000000000000000000000000000000000000000000000000000000000000001 0000000001 0000000000000000000000000000000000000000000000000000000000000001 -5 0.000000000000000000000000000000 1 0.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 0000000001 000000000000000000000000000000000.000000000000000000000000000000 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549435e-38 1.175494352e-38 00000001.175494352e-38 00000001.175494352e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549435e-38 1.17549e-38 1.175494352e-38 01.17549e-38 00000001.175494352e-38 01.17549e-38 00000001.175494352e-38 1000-01-01 838:59:58 1970-01-02 00:00:01 1970-01-02 00:00:01 1902 1902 1902 2enum 2set 2 2 0000000002 0000000000000000000000000000000000000000000000000000000000000002 0000000002 0000000000000000000000000000000000000000000000000000000000000002 -4 1.100000000000000000000000000000 2 1.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 0000000002 000000000000000000000000000000001.100000000000000000000000000000 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.175494349e-38 1.175494353e-38 00000001.175494353e-38 00000001.175494353e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494349e-38 1.17549e-38 1.175494353e-38 01.17549e-38 00000001.175494353e-38 01.17549e-38 00000001.175494353e-38 1000-01-02 838:59:57 1970-01-03 00:00:02 1970-01-03 00:00:02 1903 1903 1903 1enum 1set,2set 3 3 0000000003 0000000000000000000000000000000000000000000000000000000000000003 0000000003 0000000000000000000000000000000000000000000000000000000000000003 -3 2.200000000000000000000000000000 3 2.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 0000000003 000000000000000000000000000000002.200000000000000000000000000000 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.175494348e-38 1.175494354e-38 00000001.175494354e-38 00000001.175494354e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494348e-38 1.17549e-38 1.175494354e-38 01.17549e-38 00000001.175494354e-38 01.17549e-38 00000001.175494354e-38 1000-01-03 838:59:56 1970-01-04 00:00:03 1970-01-04 00:00:03 1904 1904 1904 2enum 1set -100 4 0000000004 0000000000000000000000000000000000000000000000000000000000000004 0000000004 0000000000000000000000000000000000000000000000000000000000000004 -2 3.300000000000000000000000000000 4 3.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494347e-38 1.17549e-38 1.175494355e-38 01.17549e-38 00000001.175494355e-38 01.17549e-38 00000001.175494355e-38 1000-01-04 838:59:55 1970-01-05 00:00:04 1970-01-05 00:00:04 1905 1905 1905 1enum 2set 5 5 0000000005 0000000000000000000000000000000000000000000000000000000000000005 0000000005 0000000000000000000000000000000000000000000000000000000000000005 -1 4.400000000000000000000000000000 5 4.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 0000000005 000000000000000000000000000000004.400000000000000000000000000000 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.175494346e-38 1.175494356e-38 00000001.175494356e-38 00000001.175494356e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494346e-38 1.17549e-38 1.175494356e-38 01.17549e-38 00000001.175494356e-38 01.17549e-38 00000001.175494356e-38 1000-01-05 838:59:54 1970-01-06 00:00:05 1970-01-06 00:00:05 1906 1906 1906 2enum 1set,2set 6 6 0000000006 0000000000000000000000000000000000000000000000000000000000000006 0000000006 0000000000000000000000000000000000000000000000000000000000000006 0 5.500000000000000000000000000000 6 5.500000000000000000000000000000 0000000006 000000000000000000000000000000005.500000000000000000000000000000 0000000006 000000000000000000000000000000005.500000000000000000000000000000 -1.175494345e-38 1.175494357e-38 00000001.175494357e-38 00000001.175494357e-38 -1.175494345e-38 1.175494357e-38 00000001.175494357e-38 00000001.175494357e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494345e-38 1.17549e-38 1.175494357e-38 01.17549e-38 00000001.175494357e-38 01.17549e-38 00000001.175494357e-38 1000-01-06 838:59:53 1970-01-07 00:00:06 1970-01-07 00:00:06 1907 1907 1907 1enum 1set 7 7 0000000007 0000000000000000000000000000000000000000000000000000000000000007 0000000007 0000000000000000000000000000000000000000000000000000000000000007 1 6.600000000000000000000000000000 7 6.600000000000000000000000000000 0000000007 000000000000000000000000000000006.600000000000000000000000000000 0000000007 000000000000000000000000000000006.600000000000000000000000000000 -1.175494344e-38 1.175494358e-38 00000001.175494358e-38 00000001.175494358e-38 -1.175494344e-38 1.175494358e-38 00000001.175494358e-38 00000001.175494358e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494344e-38 1.17549e-38 1.175494358e-38 01.17549e-38 00000001.175494358e-38 01.17549e-38 00000001.175494358e-38 1000-01-07 838:59:52 1970-01-08 00:00:07 1970-01-08 00:00:07 1908 1908 1908 2enum 2set 8 8 0000000008 0000000000000000000000000000000000000000000000000000000000000008 0000000008 0000000000000000000000000000000000000000000000000000000000000008 2 7.700000000000000000000000000000 8 7.700000000000000000000000000000 0000000008 000000000000000000000000000000007.700000000000000000000000000000 0000000008 000000000000000000000000000000007.700000000000000000000000000000 -1.175494343e-38 1.175494359e-38 00000001.175494359e-38 00000001.175494359e-38 -1.175494343e-38 1.175494359e-38 00000001.175494359e-38 00000001.175494359e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494343e-38 1.17549e-38 1.175494359e-38 01.17549e-38 00000001.175494359e-38 01.17549e-38 00000001.175494359e-38 1000-01-08 838:59:51 1970-01-09 00:00:08 1970-01-09 00:00:08 1909 1909 1909 1enum 1set,2set 9 9 0000000009 0000000000000000000000000000000000000000000000000000000000000009 0000000009 0000000000000000000000000000000000000000000000000000000000000009 3 8.800000000000000000000000000000 9 8.800000000000000000000000000000 0000000009 000000000000000000000000000000008.800000000000000000000000000000 0000000009 000000000000000000000000000000008.800000000000000000000000000000 -1.175494342e-38 1.17549436e-38 000000001.17549436e-38 000000001.17549436e-38 -1.175494342e-38 1.17549436e-38 000000001.17549436e-38 000000001.17549436e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494342e-38 1.17549e-38 1.17549436e-38 01.17549e-38 000000001.17549436e-38 01.17549e-38 000000001.17549436e-38 1000-01-09 838:59:50 1970-01-10 00:00:09 1970-01-10 00:00:09 1910 1910 1910 2enum 1set 10 10 0000000010 0000000000000000000000000000000000000000000000000000000000000010 0000000010 0000000000000000000000000000000000000000000000000000000000000010 4 9.900000000000000000000000000000 10 9.900000000000000000000000000000 0000000010 000000000000000000000000000000009.900000000000000000000000000000 0000000010 000000000000000000000000000000009.900000000000000000000000000000 -1.175494341e-38 1.175494361e-38 00000001.175494361e-38 00000001.175494361e-38 -1.175494341e-38 1.175494361e-38 00000001.175494361e-38 00000001.175494361e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494341e-38 1.17549e-38 1.175494361e-38 01.17549e-38 00000001.175494361e-38 01.17549e-38 00000001.175494361e-38 1000-01-10 838:59:49 1970-01-11 00:00:10 1970-01-11 00:00:10 1911 1911 1911 1enum 2set -76710 226546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -2760 985654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -569300 9114376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -660 876546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -250 87895654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -340 9984376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -3410 996546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -2550 775654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -3330 764376 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -441 16546 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +15 87 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +17 15 0000000016 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +19 18 0000000014 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +22 93 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +24 51654 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +27 25 0000000026 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +29 28 0000000024 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +34 41 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +94 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set +100 4 0000000004 0000000000000000000000000000000000000000000000000000000000000004 0000000004 0000000000000000000000000000000000000000000000000000000000000004 -2 3.300000000000000000000000000000 4 3.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 0000000004 000000000000000000000000000000003.300000000000000000000000000000 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.175494347e-38 1.175494355e-38 00000001.175494355e-38 00000001.175494355e-38 -1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.17549e-38 1.17549e-38 1.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 01.17549e-38 -1.17549e-38 -1.175494347e-38 1.17549e-38 1.175494355e-38 01.17549e-38 00000001.175494355e-38 01.17549e-38 00000001.175494355e-38 1000-01-04 838:59:55 1970-01-05 00:00:04 1970-01-05 00:00:04 1905 1905 1905 1enum 2set +100 74 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set drop view test.v1 ; CREATE VIEW test.v1 AS SELECT F59,f61 FROM test.tb2 limit 20 ; -SELECT * FROM test.v1 limit 50; +SELECT * FROM test.v1 order by f59,f61 desc limit 50; F59 f61 -1 0000000001 2 0000000002 3 0000000003 -100 0000000004 5 0000000005 6 0000000006 -7 0000000007 -8 0000000008 9 0000000009 10 0000000010 -76710 NULL -2760 NULL -569300 NULL +17 0000000016 +19 0000000014 +24 NULL +34 NULL +107 0000000106 +323 NULL +441 NULL +500 0000000900 +500 0000000900 660 NULL -250 NULL -340 NULL -3410 NULL 2550 NULL 3330 NULL -441 NULL +3410 NULL +7876 NULL drop view test.v1 ; Testcase 3.3.1.54 @@ -9798,7 +9798,7 @@ Insert into t2 values (2,2000) ; Insert into t2 values (31,97) ; Create view test.v1 as select t1.f59, t1.f60 from t1,t2 where t1.f59=t2.f59 ; -Select * from test.v1 limit 50 ; +Select * from test.v1 order by f59 limit 50 ; f59 f60 1 10 2 20 @@ -9864,7 +9864,7 @@ create or replace view test.v1 as Select t1.f59 t1_f59, t2.f59 t2_f59, t1.f60 t1_f60, t2.f60 t2_f60, t1.f61 t1_f61, t2.f61 t2_f61 from t1 inner join t2 where t1.f59 = t2.f59 ; -select * from test.v1; +select * from test.v1 order by t1_f59 ; t1_f59 t2_f59 t1_f60 t2_f60 t1_f61 t2_f61 2 2 double double 6 6 3 3 single-f3 single-f3 4 6 @@ -9877,7 +9877,7 @@ t1_f59 t2_f59 t1_f60 t2_f60 t1_f61 t2_f61 Create or replace view test.v1 as Select t1.f59 AS t1_f59, t2.f59 AS t2_f59 FROM t2 cross join t1; -Select * from v1; +Select * from v1 order by t1_f59,t2_f59; t1_f59 t2_f59 1 2 1 3 @@ -9903,7 +9903,7 @@ t1_f59 t2_f59 Create or replace view test.v1 as Select straight_join t1.f59 AS t1_f59, t2.f59 AS t2_f59 FROM t2,t1; -Select * from v1; +Select * from v1 order by t1_f59,t2_f59; t1_f59 t2_f59 1 2 1 3 @@ -9929,7 +9929,7 @@ t1_f59 t2_f59 Create or replace view test.v1 as Select f59, f60, f61, a, b FROM t2 natural join t1; -Select * from v1; +Select * from v1 order by f59; f59 f60 f61 a b 2 double 6 2 2 Select f59, f60, f61, a, b @@ -9940,11 +9940,11 @@ Create or replace view test.v1 as Select t1.f59 t1_f59, t2.f59 t2_f59, t1.f60 t1_f60, t2.f60 t2_f60, t1.f61 t1_f61, t2.f61 t2_f61 FROM t2 left outer join t1 on t2.f59=t1.f59; -Select * from v1; +Select * from v1 order by t1_f59; t1_f59 t2_f59 t1_f60 t2_f60 t1_f61 t2_f61 +NULL 4 NULL single NULL 4 2 2 double double 6 6 3 3 single-f3 single-f3 4 6 -NULL 4 NULL single NULL 4 Select t1.f59 t1_f59, t2.f59 t2_f59, t1.f60 t1_f60, t2.f60 t2_f60, t1.f61 t1_f61, t2.f61 t2_f61 FROM t2 left outer join t1 on t2.f59=t1.f59; @@ -9955,7 +9955,7 @@ NULL 4 NULL single NULL 4 Create or replace view test.v1 as Select f59, f60, f61, t1.a, t2.b FROM t2 natural left outer join t1; -Select * from v1; +Select * from v1 order by f59; f59 f60 f61 a b 2 double 6 2 2 3 single-f3 6 NULL 3 @@ -9970,7 +9970,7 @@ Create or replace view test.v1 as Select t1.f59 t1_f59, t2.f59 t2_f59, t1.f60 t1_f60, t2.f60 t2_f60, t1.f61 t1_f61, t2.f61 t2_f61 FROM t2 right outer join t1 on t2.f59=t1.f59; -Select * from v1; +Select * from v1 order by t1_f59; t1_f59 t2_f59 t1_f60 t2_f60 t1_f61 t2_f61 1 NULL single NULL 3 NULL 2 2 double double 6 6 @@ -9985,11 +9985,11 @@ t1_f59 t2_f59 t1_f60 t2_f60 t1_f61 t2_f61 Create or replace view test.v1 as Select f59, f60, a, b FROM t2 natural right outer join t1; -Select * from v1; +Select * from v1 order by f59 desc; f59 f60 a b -1 single 1 NULL -2 double 2 2 3 single-f3 3 NULL +2 double 2 2 +1 single 1 NULL Select f59, f60, a, b FROM t2 natural right outer join t1; f59 f60 a b @@ -10010,18 +10010,18 @@ Insert into t1 values (107,501,601) ; Insert into t1 values (901,801,401) ; Create or replace view test.v1 as Select tb2.f59 FROM tb2 LEFT JOIN t1 on tb2.f59 = t1.f59 ; -Select * from test.v1 limit 0,10; +Select * from test.v1 order by f59 limit 0,10; f59 1 2 3 -100 5 6 7 8 9 10 +15 Drop view if exists test.v1 ; Drop table if exists t1 ; Drop view if exists v1; @@ -10031,7 +10031,7 @@ Insert into t1 values (207,201,201) ; Insert into t1 values (201,201,201) ; Create or replace view test.v1 as Select tb2.f59 FROM tb2 INNER JOIN t1 on tb2.f59 = t1.f59 ; -Select * from test.v1 limit 0,10; +Select * from test.v1 order by f59 limit 0,10; f59 207 Drop view if exists test.v1 ; @@ -10043,7 +10043,7 @@ Insert into t1 values (27,21,21) ; Insert into t1 values (21,21,21) ; Create or replace view test.v1 as Select tb2.f59 FROM tb2 CROSS JOIN t1 on tb2.f59 = t1.f59 ; -Select * from test.v1 limit 0,10; +Select * from test.v1 order by f59 limit 0,10; f59 27 Drop view test.v1 ; @@ -10058,18 +10058,18 @@ Insert into t1 values (17,51,61) ; Insert into t1 values (91,81,41) ; Create or replace view test.v1 as (Select f59 FROM tb2 where f59=17 ) Union ALL (Select f59 from t1 where f59=17 ); -Select * from test.v1 limit 0,10; +Select * from test.v1 order by f59 limit 0,10; f59 17 17 Create or replace view test.v1 as (Select f59 FROM tb2 where f59=17 ) Union (Select f59 from t1 where f59=17 ); -Select * from test.v1 limit 0,10; +Select * from test.v1 order by f59 limit 0,10; f59 17 Create or replace view test.v1 as (Select f59 FROM tb2 where f59=17 ) Union Distinct (Select f59 from t1 where f60=17 ); -Select * from test.v1 limit 0,10; +Select * from test.v1 order by f59 limit 0,10; f59 17 Drop view test.v1 ; @@ -10081,7 +10081,7 @@ insert into t1 values (107,501,601); insert into t1 values (901,801,401); create or replace view test.v1 as select tb2.f59 from tb2 join t1 on tb2.f59 = t1.f59; -select * from test.v1 limit 0,10; +select * from test.v1 order by f59 limit 0,10; f59 107 107 @@ -10089,7 +10089,7 @@ create or replace view test.v1 as (select f59 from tb2 where f59=107 ) union all (select f59 from t1 where f59=107 ); -select * from test.v1 limit 0,10; +select * from test.v1 order by f59 limit 0,10; f59 107 107 @@ -10098,14 +10098,14 @@ create or replace view test.v1 as (select f59 from tb2 where f59=107 ) union (select f59 from t1 where f59=107 ); -select * from test.v1 limit 0,10; +select * from test.v1 order by f59 limit 0,10; f59 107 create or replace view test.v1 as (select f59 from tb2 where f59=107 ) union distinct (select f59 from t1 where f59=107 ); -select * from test.v1 limit 0,10; +select * from test.v1 order by f59 limit 0,10; f59 107 drop view if exists test.v1 ; @@ -10116,13 +10116,13 @@ Testcase 3.3.1.64 Drop view if exists test.v1 ; CREATE VIEW test.v1 AS SELECT F59 FROM test.tb2 where test.tb2.F59 = 109; -SELECT * FROM test.v1 limit 0,10; +SELECT * FROM test.v1 order by f59 limit 0,10; F59 109 109 ALTER VIEW test.v1 AS SELECT * FROM test.tb2 WHERE test.tb2.f59 = 242 ; -SELECT * FROM test.v1 limit 0,10; +SELECT * FROM test.v1 order by f59 limit 0,10; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 242 79 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set Drop view test.v1 ; @@ -10202,7 +10202,8 @@ SHOW FIELDS FROM v1; ERROR 42S02: Table 'test.v1' doesn't exist CHECK TABLE v1; Table Op Msg_type Msg_text -test.v1 check error Table 'test.v1' doesn't exist +test.v1 check Error Table 'test.v1' doesn't exist +test.v1 check error Corrupt DESCRIBE v1; ERROR 42S02: Table 'test.v1' doesn't exist EXPLAIN SELECT * FROM v1; @@ -10249,8 +10250,8 @@ CREATE VIEW test3.v30 AS SELECT * FROM test3.v29; CREATE VIEW test3.v31 AS SELECT * FROM test3.v30; CREATE VIEW test3.v32 AS SELECT * FROM test3.v31; SHOW CREATE VIEW test3.v32; -View Create View -v32 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `test3`.`v32` AS select `v31`.`f1` AS `f1` from `test3`.`v31` +View Create View character_set_client collation_connection +v32 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `test3`.`v32` AS select `v31`.`f1` AS `f1` from `test3`.`v31` latin1 latin1_swedish_ci SELECT * FROM test3.v32; f1 1.000 @@ -10259,8 +10260,8 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 1 DROP VIEW test3.v0; SHOW CREATE VIEW test3.v32; -View Create View -v32 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `test3`.`v32` AS select `v31`.`f1` AS `f1` from `test3`.`v31` +View Create View character_set_client collation_connection +v32 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `test3`.`v32` AS select `v31`.`f1` AS `f1` from `test3`.`v31` latin1 latin1_swedish_ci Warnings: Warning 1356 View 'test3.v32' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them SELECT * FROM test3.v32; @@ -10268,15 +10269,13 @@ ERROR HY000: View 'test3.v32' references invalid table(s) or column(s) or functi EXPLAIN SELECT * FROM test3.v32; ERROR HY000: View 'test3.v32' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them -FIXME - Setting join_limit to 30 - hangs for higher values +FIXME - Setting join_limit to 28 - hangs for higher values ---------------------------------------------------------- -SET @join_limit = 30; +SET @join_limit = 28; SET @max_level = @join_limit - 1; DROP DATABASE IF EXISTS test3; DROP TABLE IF EXISTS test1.t1; DROP TABLE IF EXISTS test2.t1; -DROP VIEW IF EXISTS test1.v29; -DROP VIEW IF EXISTS test1.v28; DROP VIEW IF EXISTS test1.v27; DROP VIEW IF EXISTS test1.v26; DROP VIEW IF EXISTS test1.v25; @@ -10383,15 +10382,11 @@ CREATE OR REPLACE VIEW test1.v26 AS SELECT f1, f2 FROM test3.t1 tab1 NATURAL JOIN test1.v25 tab2; CREATE OR REPLACE VIEW test1.v27 AS SELECT f1, f2 FROM test1.t1 tab1 NATURAL JOIN test1.v26 tab2; -CREATE OR REPLACE VIEW test1.v28 AS SELECT f1, f2 -FROM test2.t1 tab1 NATURAL JOIN test1.v27 tab2; -CREATE OR REPLACE VIEW test1.v29 AS SELECT f1, f2 -FROM test3.t1 tab1 NATURAL JOIN test1.v28 tab2; -SHOW CREATE VIEW test1.v29; -View Create View -v29 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `test1`.`v29` AS select `tab1`.`f1` AS `f1`,`tab1`.`f2` AS `f2` from (`test3`.`t1` `tab1` join `test1`.`v28` `tab2` on(((`tab1`.`f1` = `tab2`.`f1`) and (`tab1`.`f2` = `tab2`.`f2`)))) +SHOW CREATE VIEW test1.v27; +View Create View character_set_client collation_connection +v27 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `test1`.`v27` AS select `tab1`.`f1` AS `f1`,`tab1`.`f2` AS `f2` from (`test1`.`t1` `tab1` join `test1`.`v26` `tab2` on(((`tab1`.`f1` = `tab2`.`f1`) and (`tab1`.`f2` = `tab2`.`f2`)))) latin1 latin1_swedish_ci SELECT CAST(f1 AS SIGNED INTEGER) AS f1, -CAST(f2 AS CHAR) AS f2 FROM test1.v29; +CAST(f2 AS CHAR) AS f2 FROM test1.v27; f1 f2 5 five @@ -10400,14 +10395,14 @@ differs on some platforms FIXME Is this a bug ? -------------------------------------------------------------------------------- EXPLAIN SELECT CAST(f1 AS SIGNED INTEGER) AS f1, -CAST(f2 AS CHAR) AS f2 FROM test1.v29; -CREATE VIEW test1.v30 AS SELECT f1, f2 -FROM test3.t1 tab1 NATURAL JOIN test1.v29 tab2; -SHOW CREATE VIEW test1.v30; -View Create View -v30 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `test1`.`v30` AS select `tab1`.`f1` AS `f1`,`tab1`.`f2` AS `f2` from (`test3`.`t1` `tab1` join `test1`.`v29` `tab2` on(((`tab1`.`f1` = `tab2`.`f1`) and (`tab1`.`f2` = `tab2`.`f2`)))) +CAST(f2 AS CHAR) AS f2 FROM test1.v27; +CREATE VIEW test1.v28 AS SELECT f1, f2 +FROM test3.t1 tab1 NATURAL JOIN test1.v27 tab2; +SHOW CREATE VIEW test1.v28; +View Create View character_set_client collation_connection +v28 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `test1`.`v28` AS select `tab1`.`f1` AS `f1`,`tab1`.`f2` AS `f2` from (`test3`.`t1` `tab1` join `test1`.`v27` `tab2` on(((`tab1`.`f1` = `tab2`.`f1`) and (`tab1`.`f2` = `tab2`.`f2`)))) latin1 latin1_swedish_ci SELECT CAST(f1 AS SIGNED INTEGER) AS f1, -CAST(f2 AS CHAR) AS f2 FROM test1.v30; +CAST(f2 AS CHAR) AS f2 FROM test1.v28; ERROR HY000: Got temporary error 4006 'Connect failure - out of connection objects (increase MaxNoOfConcurrentTransactions)' from NDBCLUSTER The output of following EXPLAIN is deactivated, because the result @@ -10415,33 +10410,31 @@ differs on some platforms FIXME Is this a bug ? -------------------------------------------------------------------------------- EXPLAIN SELECT CAST(f1 AS SIGNED INTEGER) AS f1, -CAST(f2 AS CHAR) AS f2 FROM test1.v30; -DROP VIEW IF EXISTS test1.v30; +CAST(f2 AS CHAR) AS f2 FROM test1.v28; +DROP VIEW IF EXISTS test1.v28; CREATE OR REPLACE VIEW test1.v0 AS SELECT f1 as f2, f2 as f1 FROM test2.t1; CREATE OR REPLACE VIEW test2.v0 AS SELECT CAST('0001-01-01' AS DATE) as f1, f2 FROM test3.t1; -SHOW CREATE VIEW test1.v29; +SHOW CREATE VIEW test1.v27; SELECT CAST(f1 AS SIGNED INTEGER) AS f1, -CAST(f2 AS CHAR) AS f2 FROM test1.v29; +CAST(f2 AS CHAR) AS f2 FROM test1.v27; EXPLAIN SELECT CAST(f1 AS SIGNED INTEGER) AS f1, -CAST(f2 AS CHAR) AS f2 FROM test1.v29; +CAST(f2 AS CHAR) AS f2 FROM test1.v27; CREATE OR REPLACE VIEW test3.v0 AS SELECT f1 , CONVERT('ßÄäÖöÜü§' USING UCS2) as f2 FROM test1.t1; -SHOW CREATE VIEW test1.v29; +SHOW CREATE VIEW test1.v27; SELECT CAST(f1 AS SIGNED INTEGER) AS f1, -CAST(f2 AS CHAR) AS f2 FROM test1.v29; +CAST(f2 AS CHAR) AS f2 FROM test1.v27; EXPLAIN SELECT CAST(f1 AS SIGNED INTEGER) AS f1, -CAST(f2 AS CHAR) AS f2 FROM test1.v29; +CAST(f2 AS CHAR) AS f2 FROM test1.v27; CREATE OR REPLACE VIEW test3.v0 AS SELECT CONVERT('ßÄäÖöÜü§' USING UCS2) as f1, f2 FROM test1.t1; -SHOW CREATE VIEW test1.v29; +SHOW CREATE VIEW test1.v27; SELECT CAST(f1 AS SIGNED INTEGER) AS f1, -CAST(f2 AS CHAR) AS f2 FROM test1.v29; +CAST(f2 AS CHAR) AS f2 FROM test1.v27; EXPLAIN SELECT CAST(f1 AS SIGNED INTEGER) AS f1, -CAST(f2 AS CHAR) AS f2 FROM test1.v29; -DROP VIEW IF EXISTS test1.v29; -DROP VIEW IF EXISTS test1.v28; +CAST(f2 AS CHAR) AS f2 FROM test1.v27; DROP VIEW IF EXISTS test1.v27; DROP VIEW IF EXISTS test1.v26; DROP VIEW IF EXISTS test1.v25; @@ -10512,7 +10505,7 @@ info: Rows matched: 1 Changed: 1 Warnings: 0 SELECT * FROM tb2 where f59 = 8 and f60 = 105; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 8 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -SELECT f59,f60 FROM test.v1 where f59 = 8 and f60 = 105; +SELECT f59,f60 FROM test.v1 where f59 = 8 and f60 = 105 ; f59 f60 8 105 Drop view test.v1 ; @@ -10531,7 +10524,7 @@ f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 891 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 891 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set 891 105 0000000106 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set -SELECT f59,f60 FROM test.v1 where f59 = 891 and f60 = 105; +SELECT f59,f60 FROM test.v1 where f59 = 891 and f60 = 105 ; f59 f60 891 105 891 105 @@ -10548,7 +10541,7 @@ DELETE FROM test.v1 where f59 = 789 ; affected rows: 1 SELECT * FROM tb2 where f59 = 789 ; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 -SELECT f59,f60 FROM test.v1 where f59 = 789; +SELECT f59,f60 FROM test.v1 where f59 = 789 order by f60 ; f59 f60 Drop view test.v1 ; @@ -10561,7 +10554,7 @@ DELETE FROM test.v1 where f59 = 711 ; affected rows: 1 SELECT * FROM tb2 where f59 = 711 ; f59 f60 f61 f62 f63 f64 f65 f66 f67 f68 f69 f70 f71 f72 f73 f74 f75 f76 f77 f78 f79 f80 f81 f82 f83 f84 f85 f86 f87 f88 f89 f90 f91 f92 f93 f94 f95 f96 f97 f98 f99 f100 f101 f102 f103 f104 f105 f106 f107 f108 f109 -SELECT f59,f60 FROM test.v1 where f59 = 711; +SELECT f59,f60 FROM test.v1 where f59 = 711 order by f60 ; f59 f60 Drop view test.v1 ; diff --git a/mysql-test/suite/funcs_1/views/views_master.inc b/mysql-test/suite/funcs_1/views/views_master.inc index 106708742f0..cb71fd7f790 100644 --- a/mysql-test/suite/funcs_1/views/views_master.inc +++ b/mysql-test/suite/funcs_1/views/views_master.inc @@ -145,33 +145,33 @@ Insert into t1 values (500,9866); --enable_warnings CREATE VIEW v1 AS select f59,f60,f61 FROM test.tb2 where f59=250; - select * FROM v1 limit 0,10; + select * FROM v1 order by f60,f61 limit 0,10; #(02) Drop view if exists v1 ; CREATE VIEW v1 AS select f59,f60,f61 FROM test.tb2 limit 100; - select * FROM v1 limit 0,10; + select * FROM v1 order by f59,f60,f61 limit 0,10; #(03) CREATE or REPLACE VIEW v1 AS select f59,f60,f61 FROM test.tb2 limit 4,3; - select * FROM v1 limit 0,10; + select * FROM v1 order by f59,f60,f61 limit 0,10; #(04) CREATE or REPLACE VIEW v1 AS select distinct f59 FROM test.tb2 limit 4,3; - select * FROM v1 limit 0,10; + select * FROM v1 order by f59 limit 0,10; #(05) ALTER VIEW v1 AS select f59 FROM test.tb2 limit 6,2; - select * FROM v1 limit 0,10; + select * FROM v1 order by f59 limit 0,10; #(06) CREATE or REPLACE VIEW v1 AS select f59 from tb2 order by f59 limit 100; - select * FROM v1 limit 0,10; + select * FROM v1 order by f59 limit 0,10; #(07) CREATE or REPLACE VIEW v1 AS select f59 @@ -186,32 +186,32 @@ Insert into t1 values (500,9866); #(09) CREATE or REPLACE VIEW v1 AS select f59 from tb2 group by f59 limit 100; - select * FROM v1 limit 0,10; + select * FROM v1 order by f59 limit 0,10; #(10) CREATE or REPLACE VIEW v1 AS select f59 from tb2 group by f59 asc limit 100; - select * FROM v1 limit 0,10; + select * FROM v1 order by f59 limit 0,10; #(11) CREATE or REPLACE VIEW v1 AS select f59 from tb2 group by f59 desc limit 100; - select * FROM v1 limit 0,10; + select * FROM v1 order by f59 limit 0,10; #(12) CREATE or REPLACE VIEW v1 AS (select f59 from tb2) union (select f59 from t1) limit 100; - select * FROM v1 limit 0,10; + select * FROM v1 order by f59 limit 0,10; #(13) CREATE or REPLACE VIEW v1 AS (select f59 FROM tb2) UNION DISTINCT(select f59 FROM t1) ; - select * FROM v1 limit 0,10; + select * FROM v1 order by f59 limit 0,10; #(14) CREATE or REPLACE VIEW v1 AS (select f59 FROM tb2) UNION ALL(select f59 FROM t1) ; - select * FROM v1 limit 0,10; + select * FROM v1 order by f59 limit 0,10; #(15) if ($have_bug_11589) @@ -220,24 +220,24 @@ if ($have_bug_11589) } CREATE or REPLACE VIEW v1 AS select * FROM test.tb2 WITH LOCAL CHECK OPTION ; - select * FROM v1 limit 0,50; + select * FROM v1 order by f59,f60,f61,f62,f63,f64 limit 0,50; #(16) CREATE or REPLACE VIEW v1 AS select * FROM test.tb2 WITH CASCADED CHECK OPTION ; - select * FROM v1 limit 0,10; + select * FROM v1 order by f59,f60,f61,f62,f63,f64 limit 0,10; --enable_ps_protocol #(17) CREATE OR REPLACE VIEW v1 AS SELECT F59, F60 FROM test.tb2 WITH CASCADED CHECK OPTION; - SELECT * FROM v1 limit 0,10; + SELECT * FROM v1 order by f59,f60 limit 0,10; #(18) CREATE or REPLACE VIEW v1 AS select f59, f60 from test.tb2 where f59=3330 ; - select * FROM v1 limit 0,10; + select * FROM v1 order by f60 limit 0,10; DROP VIEW v1 ; DROP TABLE t1 ; @@ -816,18 +816,18 @@ AS SELECT * FROM t1 limit 2; SHOW CREATE VIEW test.v1; SELECT * FROM test.v1; # Switch the base table -CREATE OR REPLACE VIEW test.v1 AS SELECT * FROM tb2 limit 2; +CREATE OR REPLACE VIEW test.v1 AS SELECT * FROM tb2 order by f59 limit 2; SHOW CREATE VIEW test.v1; if ($have_bug_11589) { --disable_ps_protocol } -SELECT * FROM test.v1 ; +SELECT * FROM test.v1 order by f59,f60,f61,f62,f63,f64,f65; --enable_ps_protocol # Switch the SELECT but not the base table CREATE OR REPLACE VIEW test.v1 AS SELECT F59 FROM tb2 limit 10,100; SHOW CREATE VIEW test.v1; -SELECT * FROM test.v1; +SELECT * FROM test.v1 order by F59; Drop table test.t1 ; Drop view test.v1 ; @@ -1020,7 +1020,7 @@ let $message= Testcase 3.3.1.21 ; DROP VIEW IF EXISTS v1; --enable_warnings CREATE VIEW test.v1( F59, F60 ) AS SELECT F59, F60 From tb2 LIMIT 2; -SELECT * FROM test.v1; +SELECT * FROM test.v1 order by F59, F60 desc; Drop view if exists test.v1 ; @@ -1175,7 +1175,7 @@ Drop VIEW IF EXISTS test.v1_1 ; --enable_warnings Create view test.v1 AS Select * from test.tb2 limit 2 ; Create view test.v1_1 AS Select F59 from test.v1 ; -Select * from test.v1_1 limit 20 ; +Select * from test.v1_1 order by F59 limit 20 ; Drop view test.v1 ; Drop view test.v1_1 ; @@ -1197,7 +1197,7 @@ if ($have_bug_11589) { --disable_ps_protocol } -Select * from v1 ; +Select * from v1 order by f59,f60,f61,f62,f63,f64,f65; --enable_ps_protocol Select * from test2.v2 ; Drop view if exists test2.v1 ; @@ -1287,7 +1287,7 @@ CREATE VIEW test.v1 AS SELECT test.v1_firstview.f59, test.v1_firstview.f60 FROM test.v1_firstview INNER JOIN test.v1_secondview ON test.v1_firstview.f59 = test.v1_secondview.f59 ; -SELECT * FROM test.v1 limit 0,10; +SELECT * FROM test.v1 order by f59,f60 limit 0,10; Drop view if exists test.v1_firstview ; Drop view if exists test.v1_secondview ; Drop view if exists test.v1 ; @@ -1314,7 +1314,7 @@ CREATE VIEW v1 AS SELECT test.v1_firstview.F59, test.v1_firstview.F60 FROM test.v1_firstview INNER JOIN test.v1_secondview ON test.v1_firstview.f59 = test.v1_secondview.f59 ; -SELECT * FROM v1 limit 0,10; +SELECT * FROM v1 order by f59,f60 limit 0,10; Drop view v1 ; Drop view test.v1_firstview ; Drop view test.v1_secondview ; @@ -1339,7 +1339,7 @@ CREATE VIEW test.v1 AS SELECT test.v1_firstview.f59, test.v1_firstview.f60 FROM test.v1_firstview INNER JOIN test.tb2 ON test.v1_firstview.f59 = test.tb2.f59; -SELECT * FROM test.v1 limit 0,10; +SELECT * FROM test.v1 order by f59,f60 limit 0,10; Drop view test.v1 ; Drop view test.v1_firstview; @@ -1360,7 +1360,7 @@ CREATE VIEW v1_firstview AS SELECT * FROM test.tb2 ; CREATE VIEW v1 AS SELECT v1_firstview.f59, v1_firstview.f60 FROM v1_firstview INNER JOIN test.tb2 ON v1_firstview.f59 = test.tb2.f59 ; -SELECT * FROM v1 limit 0,10; +SELECT * FROM v1 order by f59,f60 limit 0,10; Drop database test2 ; @@ -1385,7 +1385,7 @@ Drop view if exists test.v1_1 ; Drop view if exists test.v1_main ; --enable_warnings Create view test.v1 as Select f59, f60 FROM test.tb2; -Select * from test.v1 limit 0,10; +Select * from test.v1 order by f59,f60 limit 0,10; Create table t1(f59 int, f60 int); Insert into t1 values (90,507) ; @@ -1396,7 +1396,7 @@ Select * from v1_1 ; Create view v1_main as SELECT test.tb2.f59 FROM test.tb2 JOIN test.v1 ON test.tb2.f59 = test.v1.f59; -Select * from v1_main limit 0,10; +Select * from v1_main order by f59 limit 0,10; Drop table t1; Drop view test.v1 ; @@ -1505,7 +1505,7 @@ Drop view if exists test1.v1_1 ; Drop database if exists test3 ; --enable_warnings Create view test.v1 as Select f59, f60 FROM test.tb2 limit 20 ; -Select * from test.v1 ; +Select * from test.v1 order by f59,f60; Create table test1.t1 (f59 int,f60 int) ; Insert into test1.t1 values (199,507) ; @@ -1550,7 +1550,7 @@ Drop view if exists test.v1 ; CREATE VIEW test.v1 AS Select f59 from (Select * FROM tb2 limit 20) tx ; --error 1146 -SELECT * FROM test.v1 ; +SELECT * FROM test.v1 order by f59 ; --disable_warnings Drop view if exists test.v1 ; --enable_warnings @@ -1709,7 +1709,7 @@ CREATE VIEW test.v1 AS SELECT * FROM test.tb2 where f59 = 04; --enable_info UPDATE test.v1 SET f59 = 30 where F59 = 04 ; --disable_info -SELECT * FROM test.v1 where f59 = 30 ; +SELECT * FROM test.v1 where f59 = 30 order by f59; if ($have_bug_11589) { --disable_ps_protocol @@ -1726,7 +1726,7 @@ if ($have_bug_11589) } SELECT * FROM tb2 where f59 = 100 ; --enable_ps_protocol -SELECT * FROM test.v1 ; +SELECT * FROM test.v1 order by f59 ; drop view if exists test.v1 ; @@ -1821,7 +1821,7 @@ FROM test.tb2 where f59 = 195 WITH CHECK OPTION ; --error 1369 UPDATE test.v1 SET f59 = 198 where f59=195 ; -SELECT * FROM test.v1 ; +SELECT * FROM test.v1 order by f59 ; drop view if exists test.v1 ; @@ -1846,7 +1846,7 @@ CREATE VIEW test.v2 as SELECT * FROM test.v1 ; # This UPDATE violates the definition of VIEW test.v1. --error 1369 UPDATE test.v1 SET F59 = 919 where f59 = 0987 ; -SELECT * FROM test.v1 ; +SELECT * FROM test.v1 order by f59 ; # ML: This UPDATE violates the definition of VIEW test.v1, but this # does not count, because the UPDATE runs on test.v2, which @@ -2299,7 +2299,7 @@ if ($have_bug_11589) { --disable_ps_protocol } -SELECT * FROM test.v1 ; +SELECT * FROM test.v1 order by f59 ; --enable_ps_protocol drop view test.v1 ; ############################################################################### @@ -2310,7 +2310,7 @@ drop view test.v1 ; # AS SELECT col1, col3 FROM . ############################################################################### CREATE VIEW test.v1 AS SELECT F59,F61 FROM test.tb2 limit 50 ; -SELECT * FROM test.v1 ; +SELECT * FROM test.v1 order by F59, F61 ; drop view test.v1 ; ############################################################################### # Testcase 3.3.1.52: Ensure that a view that is a subset of every column and @@ -2319,12 +2319,12 @@ drop view test.v1 ; # that is semantically equivalent to CREATE VIEW # AS SELECT * FROM
WHERE .... ############################################################################### -CREATE VIEW test.v1 AS SELECT * FROM test.tb2 limit 20 ; +CREATE VIEW test.v1 AS SELECT * FROM test.tb2 order by f59, f60, f61 limit 20 ; if ($have_bug_11589) { --disable_ps_protocol } -SELECT * FROM test.v1; +SELECT * FROM test.v1 order by f59,f60,f61 ; --enable_ps_protocol drop view test.v1 ; ############################################################################### @@ -2335,7 +2335,7 @@ drop view test.v1 ; # AS SELECT col1, col3 FROM
WHERE .. ############################################################################### CREATE VIEW test.v1 AS SELECT F59,f61 FROM test.tb2 limit 20 ; -SELECT * FROM test.v1 limit 50; +SELECT * FROM test.v1 order by f59,f61 desc limit 50; drop view test.v1 ; @@ -2363,7 +2363,7 @@ Insert into t2 values (2,2000) ; Insert into t2 values (31,97) ; Create view test.v1 as select t1.f59, t1.f60 from t1,t2 where t1.f59=t2.f59 ; -Select * from test.v1 limit 50 ; +Select * from test.v1 order by f59 limit 50 ; drop table test.t1 ; drop table test.t2 ; @@ -2457,7 +2457,7 @@ create or replace view test.v1 as Select t1.f59 t1_f59, t2.f59 t2_f59, t1.f60 t1_f60, t2.f60 t2_f60, t1.f61 t1_f61, t2.f61 t2_f61 from t1 inner join t2 where t1.f59 = t2.f59 ; -select * from test.v1; +select * from test.v1 order by t1_f59 ; Select t1.f59 t1_f59, t2.f59 t2_f59, t1.f60 t1_f60, t2.f60 t2_f60, t1.f61 t1_f61, t2.f61 t2_f61 from t1 inner join t2 where t1.f59 = t2.f59; @@ -2466,7 +2466,7 @@ from t1 inner join t2 where t1.f59 = t2.f59; Create or replace view test.v1 as Select t1.f59 AS t1_f59, t2.f59 AS t2_f59 FROM t2 cross join t1; -Select * from v1; +Select * from v1 order by t1_f59,t2_f59; Select t1.f59 AS t1_f59, t2.f59 AS t2_f59 FROM t2 cross join t1; @@ -2474,7 +2474,7 @@ FROM t2 cross join t1; Create or replace view test.v1 as Select straight_join t1.f59 AS t1_f59, t2.f59 AS t2_f59 FROM t2,t1; -Select * from v1; +Select * from v1 order by t1_f59,t2_f59; Select straight_join t1.f59 AS t1_f59, t2.f59 AS t2_f59 FROM t2,t1; @@ -2482,7 +2482,7 @@ FROM t2,t1; Create or replace view test.v1 as Select f59, f60, f61, a, b FROM t2 natural join t1; -Select * from v1; +Select * from v1 order by f59; Select f59, f60, f61, a, b FROM t2 natural join t1; @@ -2491,7 +2491,7 @@ Create or replace view test.v1 as Select t1.f59 t1_f59, t2.f59 t2_f59, t1.f60 t1_f60, t2.f60 t2_f60, t1.f61 t1_f61, t2.f61 t2_f61 FROM t2 left outer join t1 on t2.f59=t1.f59; -Select * from v1; +Select * from v1 order by t1_f59; Select t1.f59 t1_f59, t2.f59 t2_f59, t1.f60 t1_f60, t2.f60 t2_f60, t1.f61 t1_f61, t2.f61 t2_f61 FROM t2 left outer join t1 on t2.f59=t1.f59; @@ -2500,7 +2500,7 @@ FROM t2 left outer join t1 on t2.f59=t1.f59; Create or replace view test.v1 as Select f59, f60, f61, t1.a, t2.b FROM t2 natural left outer join t1; -Select * from v1; +Select * from v1 order by f59; Select f59, f60, f61, t1.a, t2.b FROM t2 natural left outer join t1; @@ -2509,7 +2509,7 @@ Create or replace view test.v1 as Select t1.f59 t1_f59, t2.f59 t2_f59, t1.f60 t1_f60, t2.f60 t2_f60, t1.f61 t1_f61, t2.f61 t2_f61 FROM t2 right outer join t1 on t2.f59=t1.f59; -Select * from v1; +Select * from v1 order by t1_f59; Select t1.f59 t1_f59, t2.f59 t2_f59, t1.f60 t1_f60, t2.f60 t2_f60, t1.f61 t1_f61, t2.f61 t2_f61 FROM t2 right outer join t1 on t2.f59=t1.f59; @@ -2518,7 +2518,7 @@ FROM t2 right outer join t1 on t2.f59=t1.f59; Create or replace view test.v1 as Select f59, f60, a, b FROM t2 natural right outer join t1; -Select * from v1; +Select * from v1 order by f59 desc; Select f59, f60, a, b FROM t2 natural right outer join t1; @@ -2551,7 +2551,7 @@ Insert into t1 values (901,801,401) ; Create or replace view test.v1 as Select tb2.f59 FROM tb2 LEFT JOIN t1 on tb2.f59 = t1.f59 ; -Select * from test.v1 limit 0,10; +Select * from test.v1 order by f59 limit 0,10; Drop view if exists test.v1 ; # Testcase 3.3.1.A2 ; @@ -2566,7 +2566,7 @@ Insert into t1 values (201,201,201) ; Create or replace view test.v1 as Select tb2.f59 FROM tb2 INNER JOIN t1 on tb2.f59 = t1.f59 ; -Select * from test.v1 limit 0,10; +Select * from test.v1 order by f59 limit 0,10; Drop view if exists test.v1 ; # Testcase 3.3.1.A3 ; @@ -2581,7 +2581,7 @@ Insert into t1 values (21,21,21) ; Create or replace view test.v1 as Select tb2.f59 FROM tb2 CROSS JOIN t1 on tb2.f59 = t1.f59 ; -Select * from test.v1 limit 0,10; +Select * from test.v1 order by f59 limit 0,10; Drop view test.v1 ; @@ -2607,15 +2607,15 @@ Insert into t1 values (91,81,41) ; Create or replace view test.v1 as (Select f59 FROM tb2 where f59=17 ) Union ALL (Select f59 from t1 where f59=17 ); -Select * from test.v1 limit 0,10; +Select * from test.v1 order by f59 limit 0,10; Create or replace view test.v1 as (Select f59 FROM tb2 where f59=17 ) Union (Select f59 from t1 where f59=17 ); -Select * from test.v1 limit 0,10; +Select * from test.v1 order by f59 limit 0,10; Create or replace view test.v1 as (Select f59 FROM tb2 where f59=17 ) Union Distinct (Select f59 from t1 where f60=17 ); -Select * from test.v1 limit 0,10; +Select * from test.v1 order by f59 limit 0,10; Drop view test.v1 ; @@ -2631,25 +2631,25 @@ insert into t1 values (901,801,401); create or replace view test.v1 as select tb2.f59 from tb2 join t1 on tb2.f59 = t1.f59; -select * from test.v1 limit 0,10; +select * from test.v1 order by f59 limit 0,10; create or replace view test.v1 as (select f59 from tb2 where f59=107 ) union all (select f59 from t1 where f59=107 ); -select * from test.v1 limit 0,10; +select * from test.v1 order by f59 limit 0,10; create or replace view test.v1 as (select f59 from tb2 where f59=107 ) union (select f59 from t1 where f59=107 ); -select * from test.v1 limit 0,10; +select * from test.v1 order by f59 limit 0,10; create or replace view test.v1 as (select f59 from tb2 where f59=107 ) union distinct (select f59 from t1 where f59=107 ); -select * from test.v1 limit 0,10; +select * from test.v1 order by f59 limit 0,10; drop view if exists test.v1 ; drop table t1; @@ -2668,7 +2668,7 @@ Drop view if exists test.v1 ; CREATE VIEW test.v1 AS SELECT F59 FROM test.tb2 where test.tb2.F59 = 109; -SELECT * FROM test.v1 limit 0,10; +SELECT * FROM test.v1 order by f59 limit 0,10; ALTER VIEW test.v1 AS SELECT * FROM test.tb2 WHERE test.tb2.f59 = 242 ; @@ -2676,7 +2676,7 @@ if ($have_bug_11589) { --disable_ps_protocol } -SELECT * FROM test.v1 limit 0,10; +SELECT * FROM test.v1 order by f59 limit 0,10; --enable_ps_protocol Drop view test.v1 ; @@ -2899,10 +2899,14 @@ eval EXPLAIN SELECT * FROM test3.v$toplevel; # and OBN's box performs excessive paging. # (RAM: OBN ~384MB RAM, ML 1 GB) #++++++++++++++++++++++++++++++++++++++++++++++ -let $message= FIXME - Setting join_limit to 30 - hangs for higher values; +let $message= FIXME - Setting join_limit to 28 - hangs for higher values; --source include/show_msg.inc +# OBN - Reduced from 30 in 5.1.21 to avoid hitting the ndbcluster limit +# of "ERROR HY000:RROR HY000: Got temporary error 4006 'Connect failure +# - out of connection objects (increase MaxNoOfConcurrentTransactions)' +# from NDBCLUSTER " to early; #SET @join_limit = 61; -SET @join_limit = 30; +SET @join_limit = 28; # OBN - see above SET @max_level = @join_limit - 1; --enable_query_log @@ -3184,7 +3188,7 @@ if ($have_bug_11589) } SELECT * FROM tb2 where f59 = 8 and f60 = 105; --enable_ps_protocol -SELECT f59,f60 FROM test.v1 where f59 = 8 and f60 = 105; +SELECT f59,f60 FROM test.v1 where f59 = 8 and f60 = 105 ; Drop view test.v1 ; @@ -3212,7 +3216,7 @@ if ($have_bug_11589) } SELECT * FROM tb2 where f59 = 891 and f60 = 105; --enable_ps_protocol -SELECT f59,f60 FROM test.v1 where f59 = 891 and f60 = 105; +SELECT f59,f60 FROM test.v1 where f59 = 891 and f60 = 105 ; Drop view test.v1 ; @@ -3233,7 +3237,7 @@ CREATE VIEW test.v1 AS SELECT f59,f60,f61 FROM tb2 where f59 = 789 ; DELETE FROM test.v1 where f59 = 789 ; --disable_info SELECT * FROM tb2 where f59 = 789 ; -SELECT f59,f60 FROM test.v1 where f59 = 789; +SELECT f59,f60 FROM test.v1 where f59 = 789 order by f60 ; Drop view test.v1 ; @@ -3256,7 +3260,7 @@ DELETE FROM test.v1 where f59 = 711 ; --disable_info SELECT * FROM tb2 where f59 = 711 ; -SELECT f59,f60 FROM test.v1 where f59 = 711; +SELECT f59,f60 FROM test.v1 where f59 = 711 order by f60 ; Drop view test.v1 ; diff --git a/mysql-test/suite/funcs_2/r/ndb_charset.result b/mysql-test/suite/funcs_2/r/ndb_charset.result index 538bea5e75e..7a5c63f71d6 100644 --- a/mysql-test/suite/funcs_2/r/ndb_charset.result +++ b/mysql-test/suite/funcs_2/r/ndb_charset.result @@ -3,7 +3,7 @@ SET NAMES armscii8; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET armscii8 COLLATE armscii8_bin) ENGINE=NDB CHARACTER SET armscii8 COLLATE armscii8_bin; 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 NDBCLUSTER # # # # # # # # # # # # armscii8_bin # # # +t1 ndbcluster # # # # # # # # # # # # armscii8_bin # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -233,7 +233,7 @@ SET NAMES armscii8; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET armscii8 COLLATE armscii8_general_ci) ENGINE=NDB CHARACTER SET armscii8 COLLATE armscii8_general_ci; 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 NDBCLUSTER # # # # # # # # # # # # armscii8_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # armscii8_general_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -463,7 +463,7 @@ SET NAMES ascii; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET ascii COLLATE ascii_bin) ENGINE=NDB CHARACTER SET ascii COLLATE ascii_bin; 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 NDBCLUSTER # # # # # # # # # # # # ascii_bin # # # +t1 ndbcluster # # # # # # # # # # # # ascii_bin # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -693,7 +693,7 @@ SET NAMES ascii; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET ascii COLLATE ascii_general_ci) ENGINE=NDB CHARACTER SET ascii COLLATE ascii_general_ci; 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 NDBCLUSTER # # # # # # # # # # # # ascii_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # ascii_general_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -923,7 +923,7 @@ SET NAMES big5; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET big5 COLLATE big5_bin) ENGINE=NDB CHARACTER SET big5 COLLATE big5_bin; 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 NDBCLUSTER # # # # # # # # # # # # big5_bin # # # +t1 ndbcluster # # # # # # # # # # # # big5_bin # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -1027,7 +1027,7 @@ SET NAMES big5; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET big5 COLLATE big5_chinese_ci) ENGINE=NDB CHARACTER SET big5 COLLATE big5_chinese_ci; 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 NDBCLUSTER # # # # # # # # # # # # big5_chinese_ci # # # +t1 ndbcluster # # # # # # # # # # # # big5_chinese_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -1131,7 +1131,7 @@ SET NAMES binary; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET binary) ENGINE=NDB CHARACTER SET binary; 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 NDBCLUSTER # # # # # # # # # # # # binary # # # +t1 ndbcluster # # # # # # # # # # # # binary # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -1361,7 +1361,7 @@ SET NAMES cp1250; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET cp1250 COLLATE cp1250_bin) ENGINE=NDB CHARACTER SET cp1250 COLLATE cp1250_bin; 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 NDBCLUSTER # # # # # # # # # # # # cp1250_bin # # # +t1 ndbcluster # # # # # # # # # # # # cp1250_bin # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -1591,7 +1591,7 @@ SET NAMES cp1250; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET cp1250 COLLATE cp1250_croatian_ci) ENGINE=NDB CHARACTER SET cp1250 COLLATE cp1250_croatian_ci; 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 NDBCLUSTER # # # # # # # # # # # # cp1250_croatian_ci # # # +t1 ndbcluster # # # # # # # # # # # # cp1250_croatian_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -1821,7 +1821,7 @@ SET NAMES cp1250; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET cp1250 COLLATE cp1250_czech_cs) ENGINE=NDB CHARACTER SET cp1250 COLLATE cp1250_czech_cs; 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 NDBCLUSTER # # # # # # # # # # # # cp1250_czech_cs # # # +t1 ndbcluster # # # # # # # # # # # # cp1250_czech_cs # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 7F 1 @@ -2051,7 +2051,7 @@ SET NAMES cp1250; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET cp1250 COLLATE cp1250_general_ci) ENGINE=NDB CHARACTER SET cp1250 COLLATE cp1250_general_ci; 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 NDBCLUSTER # # # # # # # # # # # # cp1250_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # cp1250_general_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len A0 1 @@ -2281,7 +2281,7 @@ SET NAMES cp1251; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET cp1251 COLLATE cp1251_bin) ENGINE=NDB CHARACTER SET cp1251 COLLATE cp1251_bin; 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 NDBCLUSTER # # # # # # # # # # # # cp1251_bin # # # +t1 ndbcluster # # # # # # # # # # # # cp1251_bin # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -2511,7 +2511,7 @@ SET NAMES cp1251; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET cp1251 COLLATE cp1251_bulgarian_ci) ENGINE=NDB CHARACTER SET cp1251 COLLATE cp1251_bulgarian_ci; 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 NDBCLUSTER # # # # # # # # # # # # cp1251_bulgarian_ci # # # +t1 ndbcluster # # # # # # # # # # # # cp1251_bulgarian_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -2741,7 +2741,7 @@ SET NAMES cp1251; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET cp1251 COLLATE cp1251_general_ci) ENGINE=NDB CHARACTER SET cp1251 COLLATE cp1251_general_ci; 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 NDBCLUSTER # # # # # # # # # # # # cp1251_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # cp1251_general_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -2971,7 +2971,7 @@ SET NAMES cp1251; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET cp1251 COLLATE cp1251_general_cs) ENGINE=NDB CHARACTER SET cp1251 COLLATE cp1251_general_cs; 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 NDBCLUSTER # # # # # # # # # # # # cp1251_general_cs # # # +t1 ndbcluster # # # # # # # # # # # # cp1251_general_cs # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -3201,7 +3201,7 @@ SET NAMES cp1251; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET cp1251 COLLATE cp1251_ukrainian_ci) ENGINE=NDB CHARACTER SET cp1251 COLLATE cp1251_ukrainian_ci; 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 NDBCLUSTER # # # # # # # # # # # # cp1251_ukrainian_ci # # # +t1 ndbcluster # # # # # # # # # # # # cp1251_ukrainian_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 60 1 @@ -3431,7 +3431,7 @@ SET NAMES cp1256; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET cp1256 COLLATE cp1256_bin) ENGINE=NDB CHARACTER SET cp1256 COLLATE cp1256_bin; 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 NDBCLUSTER # # # # # # # # # # # # cp1256_bin # # # +t1 ndbcluster # # # # # # # # # # # # cp1256_bin # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -3661,7 +3661,7 @@ SET NAMES cp1256; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET cp1256 COLLATE cp1256_general_ci) ENGINE=NDB CHARACTER SET cp1256 COLLATE cp1256_general_ci; 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 NDBCLUSTER # # # # # # # # # # # # cp1256_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # cp1256_general_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -3891,7 +3891,7 @@ SET NAMES cp1257; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET cp1257 COLLATE cp1257_bin) ENGINE=NDB CHARACTER SET cp1257 COLLATE cp1257_bin; 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 NDBCLUSTER # # # # # # # # # # # # cp1257_bin # # # +t1 ndbcluster # # # # # # # # # # # # cp1257_bin # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -4121,7 +4121,7 @@ SET NAMES cp1257; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET cp1257 COLLATE cp1257_general_ci) ENGINE=NDB CHARACTER SET cp1257 COLLATE cp1257_general_ci; 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 NDBCLUSTER # # # # # # # # # # # # cp1257_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # cp1257_general_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -4351,7 +4351,7 @@ SET NAMES cp1257; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET cp1257 COLLATE cp1257_lithuanian_ci) ENGINE=NDB CHARACTER SET cp1257 COLLATE cp1257_lithuanian_ci; 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 NDBCLUSTER # # # # # # # # # # # # cp1257_lithuanian_ci # # # +t1 ndbcluster # # # # # # # # # # # # cp1257_lithuanian_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -4581,7 +4581,7 @@ SET NAMES cp850; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET cp850 COLLATE cp850_bin) ENGINE=NDB CHARACTER SET cp850 COLLATE cp850_bin; 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 NDBCLUSTER # # # # # # # # # # # # cp850_bin # # # +t1 ndbcluster # # # # # # # # # # # # cp850_bin # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -4811,7 +4811,7 @@ SET NAMES cp850; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET cp850 COLLATE cp850_general_ci) ENGINE=NDB CHARACTER SET cp850 COLLATE cp850_general_ci; 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 NDBCLUSTER # # # # # # # # # # # # cp850_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # cp850_general_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -5041,7 +5041,7 @@ SET NAMES cp852; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET cp852 COLLATE cp852_bin) ENGINE=NDB CHARACTER SET cp852 COLLATE cp852_bin; 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 NDBCLUSTER # # # # # # # # # # # # cp852_bin # # # +t1 ndbcluster # # # # # # # # # # # # cp852_bin # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -5271,7 +5271,7 @@ SET NAMES cp852; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET cp852 COLLATE cp852_general_ci) ENGINE=NDB CHARACTER SET cp852 COLLATE cp852_general_ci; 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 NDBCLUSTER # # # # # # # # # # # # cp852_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # cp852_general_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -5501,7 +5501,7 @@ SET NAMES cp866; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET cp866 COLLATE cp866_bin) ENGINE=NDB CHARACTER SET cp866 COLLATE cp866_bin; 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 NDBCLUSTER # # # # # # # # # # # # cp866_bin # # # +t1 ndbcluster # # # # # # # # # # # # cp866_bin # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -5731,7 +5731,7 @@ SET NAMES cp866; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET cp866 COLLATE cp866_general_ci) ENGINE=NDB CHARACTER SET cp866 COLLATE cp866_general_ci; 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 NDBCLUSTER # # # # # # # # # # # # cp866_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # cp866_general_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -5961,7 +5961,7 @@ SET NAMES cp932; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET cp932 COLLATE cp932_bin) ENGINE=NDB CHARACTER SET cp932 COLLATE cp932_bin; 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 NDBCLUSTER # # # # # # # # # # # # cp932_bin # # # +t1 ndbcluster # # # # # # # # # # # # cp932_bin # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -6128,7 +6128,7 @@ SET NAMES cp932; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET cp932 COLLATE cp932_japanese_ci) ENGINE=NDB CHARACTER SET cp932 COLLATE cp932_japanese_ci; 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 NDBCLUSTER # # # # # # # # # # # # cp932_japanese_ci # # # +t1 ndbcluster # # # # # # # # # # # # cp932_japanese_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -6295,7 +6295,7 @@ SET NAMES dec8; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET dec8 COLLATE dec8_bin) ENGINE=NDB CHARACTER SET dec8 COLLATE dec8_bin; 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 NDBCLUSTER # # # # # # # # # # # # dec8_bin # # # +t1 ndbcluster # # # # # # # # # # # # dec8_bin # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -6525,7 +6525,7 @@ SET NAMES dec8; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET dec8 COLLATE dec8_swedish_ci) ENGINE=NDB CHARACTER SET dec8 COLLATE dec8_swedish_ci; 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 NDBCLUSTER # # # # # # # # # # # # dec8_swedish_ci # # # +t1 ndbcluster # # # # # # # # # # # # dec8_swedish_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -6755,7 +6755,7 @@ SET NAMES eucjpms; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET eucjpms COLLATE eucjpms_bin) ENGINE=NDB CHARACTER SET eucjpms COLLATE eucjpms_bin; 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 NDBCLUSTER # # # # # # # # # # # # eucjpms_bin # # # +t1 ndbcluster # # # # # # # # # # # # eucjpms_bin # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -6859,7 +6859,7 @@ SET NAMES eucjpms; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET eucjpms COLLATE eucjpms_japanese_ci) ENGINE=NDB CHARACTER SET eucjpms COLLATE eucjpms_japanese_ci; 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 NDBCLUSTER # # # # # # # # # # # # eucjpms_japanese_ci # # # +t1 ndbcluster # # # # # # # # # # # # eucjpms_japanese_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -6963,7 +6963,7 @@ SET NAMES euckr; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET euckr COLLATE euckr_bin) ENGINE=NDB CHARACTER SET euckr COLLATE euckr_bin; 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 NDBCLUSTER # # # # # # # # # # # # euckr_bin # # # +t1 ndbcluster # # # # # # # # # # # # euckr_bin # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -7067,7 +7067,7 @@ SET NAMES euckr; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET euckr COLLATE euckr_korean_ci) ENGINE=NDB CHARACTER SET euckr COLLATE euckr_korean_ci; 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 NDBCLUSTER # # # # # # # # # # # # euckr_korean_ci # # # +t1 ndbcluster # # # # # # # # # # # # euckr_korean_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -7171,7 +7171,7 @@ SET NAMES gb2312; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET gb2312 COLLATE gb2312_bin) ENGINE=NDB CHARACTER SET gb2312 COLLATE gb2312_bin; 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 NDBCLUSTER # # # # # # # # # # # # gb2312_bin # # # +t1 ndbcluster # # # # # # # # # # # # gb2312_bin # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -7275,7 +7275,7 @@ SET NAMES gb2312; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET gb2312 COLLATE gb2312_chinese_ci) ENGINE=NDB CHARACTER SET gb2312 COLLATE gb2312_chinese_ci; 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 NDBCLUSTER # # # # # # # # # # # # gb2312_chinese_ci # # # +t1 ndbcluster # # # # # # # # # # # # gb2312_chinese_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -7379,7 +7379,7 @@ SET NAMES gbk; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET gbk COLLATE gbk_bin) ENGINE=NDB CHARACTER SET gbk COLLATE gbk_bin; 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 NDBCLUSTER # # # # # # # # # # # # gbk_bin # # # +t1 ndbcluster # # # # # # # # # # # # gbk_bin # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -7483,7 +7483,7 @@ SET NAMES gbk; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET gbk COLLATE gbk_chinese_ci) ENGINE=NDB CHARACTER SET gbk COLLATE gbk_chinese_ci; 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 NDBCLUSTER # # # # # # # # # # # # gbk_chinese_ci # # # +t1 ndbcluster # # # # # # # # # # # # gbk_chinese_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -7587,7 +7587,7 @@ SET NAMES geostd8; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET geostd8 COLLATE geostd8_bin) ENGINE=NDB CHARACTER SET geostd8 COLLATE geostd8_bin; 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 NDBCLUSTER # # # # # # # # # # # # geostd8_bin # # # +t1 ndbcluster # # # # # # # # # # # # geostd8_bin # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -7817,7 +7817,7 @@ SET NAMES geostd8; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET geostd8 COLLATE geostd8_general_ci) ENGINE=NDB CHARACTER SET geostd8 COLLATE geostd8_general_ci; 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 NDBCLUSTER # # # # # # # # # # # # geostd8_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # geostd8_general_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -8047,7 +8047,7 @@ SET NAMES greek; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET greek COLLATE greek_bin) ENGINE=NDB CHARACTER SET greek COLLATE greek_bin; 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 NDBCLUSTER # # # # # # # # # # # # greek_bin # # # +t1 ndbcluster # # # # # # # # # # # # greek_bin # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -8277,7 +8277,7 @@ SET NAMES greek; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET greek COLLATE greek_general_ci) ENGINE=NDB CHARACTER SET greek COLLATE greek_general_ci; 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 NDBCLUSTER # # # # # # # # # # # # greek_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # greek_general_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -8507,7 +8507,7 @@ SET NAMES hebrew; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET hebrew COLLATE hebrew_bin) ENGINE=NDB CHARACTER SET hebrew COLLATE hebrew_bin; 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 NDBCLUSTER # # # # # # # # # # # # hebrew_bin # # # +t1 ndbcluster # # # # # # # # # # # # hebrew_bin # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -8737,7 +8737,7 @@ SET NAMES hebrew; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET hebrew COLLATE hebrew_general_ci) ENGINE=NDB CHARACTER SET hebrew COLLATE hebrew_general_ci; 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 NDBCLUSTER # # # # # # # # # # # # hebrew_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # hebrew_general_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -8967,7 +8967,7 @@ SET NAMES hp8; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET hp8 COLLATE hp8_bin) ENGINE=NDB CHARACTER SET hp8 COLLATE hp8_bin; 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 NDBCLUSTER # # # # # # # # # # # # hp8_bin # # # +t1 ndbcluster # # # # # # # # # # # # hp8_bin # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -9197,7 +9197,7 @@ SET NAMES hp8; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET hp8 COLLATE hp8_english_ci) ENGINE=NDB CHARACTER SET hp8 COLLATE hp8_english_ci; 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 NDBCLUSTER # # # # # # # # # # # # hp8_english_ci # # # +t1 ndbcluster # # # # # # # # # # # # hp8_english_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -9427,7 +9427,7 @@ SET NAMES keybcs2; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET keybcs2 COLLATE keybcs2_bin) ENGINE=NDB CHARACTER SET keybcs2 COLLATE keybcs2_bin; 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 NDBCLUSTER # # # # # # # # # # # # keybcs2_bin # # # +t1 ndbcluster # # # # # # # # # # # # keybcs2_bin # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -9657,7 +9657,7 @@ SET NAMES keybcs2; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET keybcs2 COLLATE keybcs2_general_ci) ENGINE=NDB CHARACTER SET keybcs2 COLLATE keybcs2_general_ci; 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 NDBCLUSTER # # # # # # # # # # # # keybcs2_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # keybcs2_general_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -9887,7 +9887,7 @@ SET NAMES koi8r; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET koi8r COLLATE koi8r_bin) ENGINE=NDB CHARACTER SET koi8r COLLATE koi8r_bin; 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 NDBCLUSTER # # # # # # # # # # # # koi8r_bin # # # +t1 ndbcluster # # # # # # # # # # # # koi8r_bin # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -10117,7 +10117,7 @@ SET NAMES koi8r; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET koi8r COLLATE koi8r_general_ci) ENGINE=NDB CHARACTER SET koi8r COLLATE koi8r_general_ci; 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 NDBCLUSTER # # # # # # # # # # # # koi8r_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # koi8r_general_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -10347,7 +10347,7 @@ SET NAMES koi8u; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET koi8u COLLATE koi8u_bin) ENGINE=NDB CHARACTER SET koi8u COLLATE koi8u_bin; 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 NDBCLUSTER # # # # # # # # # # # # koi8u_bin # # # +t1 ndbcluster # # # # # # # # # # # # koi8u_bin # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -10577,7 +10577,7 @@ SET NAMES koi8u; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET koi8u COLLATE koi8u_general_ci) ENGINE=NDB CHARACTER SET koi8u COLLATE koi8u_general_ci; 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 NDBCLUSTER # # # # # # # # # # # # koi8u_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # koi8u_general_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 60 1 @@ -10807,7 +10807,7 @@ SET NAMES latin1; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET latin1 COLLATE latin1_bin) ENGINE=NDB CHARACTER SET latin1 COLLATE latin1_bin; 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 NDBCLUSTER # # # # # # # # # # # # latin1_bin # # # +t1 ndbcluster # # # # # # # # # # # # latin1_bin # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -11037,7 +11037,7 @@ SET NAMES latin1; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET latin1 COLLATE latin1_danish_ci) ENGINE=NDB CHARACTER SET latin1 COLLATE latin1_danish_ci; 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 NDBCLUSTER # # # # # # # # # # # # latin1_danish_ci # # # +t1 ndbcluster # # # # # # # # # # # # latin1_danish_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -11267,7 +11267,7 @@ SET NAMES latin1; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET latin1 COLLATE latin1_general_ci) ENGINE=NDB CHARACTER SET latin1 COLLATE latin1_general_ci; 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 NDBCLUSTER # # # # # # # # # # # # latin1_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # latin1_general_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -11497,7 +11497,7 @@ SET NAMES latin1; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET latin1 COLLATE latin1_general_cs) ENGINE=NDB CHARACTER SET latin1 COLLATE latin1_general_cs; 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 NDBCLUSTER # # # # # # # # # # # # latin1_general_cs # # # +t1 ndbcluster # # # # # # # # # # # # latin1_general_cs # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -11727,7 +11727,7 @@ SET NAMES latin1; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET latin1 COLLATE latin1_german1_ci) ENGINE=NDB CHARACTER SET latin1 COLLATE latin1_german1_ci; 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 NDBCLUSTER # # # # # # # # # # # # latin1_german1_ci # # # +t1 ndbcluster # # # # # # # # # # # # latin1_german1_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -11957,7 +11957,7 @@ SET NAMES latin1; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET latin1 COLLATE latin1_german2_ci) ENGINE=NDB CHARACTER SET latin1 COLLATE latin1_german2_ci; 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 NDBCLUSTER # # # # # # # # # # # # latin1_german2_ci # # # +t1 ndbcluster # # # # # # # # # # # # latin1_german2_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -12187,7 +12187,7 @@ SET NAMES latin1; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET latin1 COLLATE latin1_spanish_ci) ENGINE=NDB CHARACTER SET latin1 COLLATE latin1_spanish_ci; 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 NDBCLUSTER # # # # # # # # # # # # latin1_spanish_ci # # # +t1 ndbcluster # # # # # # # # # # # # latin1_spanish_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -12417,7 +12417,7 @@ SET NAMES latin1; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET latin1 COLLATE latin1_swedish_ci) ENGINE=NDB CHARACTER SET latin1 COLLATE latin1_swedish_ci; 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 NDBCLUSTER # # # # # # # # # # # # latin1_swedish_ci # # # +t1 ndbcluster # # # # # # # # # # # # latin1_swedish_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -12647,7 +12647,7 @@ SET NAMES latin2; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET latin2 COLLATE latin2_bin) ENGINE=NDB CHARACTER SET latin2 COLLATE latin2_bin; 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 NDBCLUSTER # # # # # # # # # # # # latin2_bin # # # +t1 ndbcluster # # # # # # # # # # # # latin2_bin # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -12877,7 +12877,7 @@ SET NAMES latin2; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET latin2 COLLATE latin2_croatian_ci) ENGINE=NDB CHARACTER SET latin2 COLLATE latin2_croatian_ci; 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 NDBCLUSTER # # # # # # # # # # # # latin2_croatian_ci # # # +t1 ndbcluster # # # # # # # # # # # # latin2_croatian_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -13107,7 +13107,7 @@ SET NAMES latin2; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET latin2 COLLATE latin2_czech_cs) ENGINE=NDB CHARACTER SET latin2 COLLATE latin2_czech_cs; 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 NDBCLUSTER # # # # # # # # # # # # latin2_czech_cs # # # +t1 ndbcluster # # # # # # # # # # # # latin2_czech_cs # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 2E 1 @@ -13337,7 +13337,7 @@ SET NAMES latin2; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET latin2 COLLATE latin2_general_ci) ENGINE=NDB CHARACTER SET latin2 COLLATE latin2_general_ci; 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 NDBCLUSTER # # # # # # # # # # # # latin2_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # latin2_general_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -13567,7 +13567,7 @@ SET NAMES latin2; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET latin2 COLLATE latin2_hungarian_ci) ENGINE=NDB CHARACTER SET latin2 COLLATE latin2_hungarian_ci; 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 NDBCLUSTER # # # # # # # # # # # # latin2_hungarian_ci # # # +t1 ndbcluster # # # # # # # # # # # # latin2_hungarian_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 7F 1 @@ -13797,7 +13797,7 @@ SET NAMES latin5; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET latin5 COLLATE latin5_bin) ENGINE=NDB CHARACTER SET latin5 COLLATE latin5_bin; 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 NDBCLUSTER # # # # # # # # # # # # latin5_bin # # # +t1 ndbcluster # # # # # # # # # # # # latin5_bin # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -14027,7 +14027,7 @@ SET NAMES latin5; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET latin5 COLLATE latin5_turkish_ci) ENGINE=NDB CHARACTER SET latin5 COLLATE latin5_turkish_ci; 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 NDBCLUSTER # # # # # # # # # # # # latin5_turkish_ci # # # +t1 ndbcluster # # # # # # # # # # # # latin5_turkish_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -14257,7 +14257,7 @@ SET NAMES latin7; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET latin7 COLLATE latin7_bin) ENGINE=NDB CHARACTER SET latin7 COLLATE latin7_bin; 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 NDBCLUSTER # # # # # # # # # # # # latin7_bin # # # +t1 ndbcluster # # # # # # # # # # # # latin7_bin # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -14487,7 +14487,7 @@ SET NAMES latin7; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET latin7 COLLATE latin7_estonian_cs) ENGINE=NDB CHARACTER SET latin7 COLLATE latin7_estonian_cs; 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 NDBCLUSTER # # # # # # # # # # # # latin7_estonian_cs # # # +t1 ndbcluster # # # # # # # # # # # # latin7_estonian_cs # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 80 1 @@ -14717,7 +14717,7 @@ SET NAMES latin7; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET latin7 COLLATE latin7_general_ci) ENGINE=NDB CHARACTER SET latin7 COLLATE latin7_general_ci; 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 NDBCLUSTER # # # # # # # # # # # # latin7_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # latin7_general_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 7F 1 @@ -14947,7 +14947,7 @@ SET NAMES latin7; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET latin7 COLLATE latin7_general_cs) ENGINE=NDB CHARACTER SET latin7 COLLATE latin7_general_cs; 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 NDBCLUSTER # # # # # # # # # # # # latin7_general_cs # # # +t1 ndbcluster # # # # # # # # # # # # latin7_general_cs # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 7F 1 @@ -15177,7 +15177,7 @@ SET NAMES macce; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET macce COLLATE macce_bin) ENGINE=NDB CHARACTER SET macce COLLATE macce_bin; 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 NDBCLUSTER # # # # # # # # # # # # macce_bin # # # +t1 ndbcluster # # # # # # # # # # # # macce_bin # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -15407,7 +15407,7 @@ SET NAMES macce; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET macce COLLATE macce_general_ci) ENGINE=NDB CHARACTER SET macce COLLATE macce_general_ci; 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 NDBCLUSTER # # # # # # # # # # # # macce_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # macce_general_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -15637,7 +15637,7 @@ SET NAMES macroman; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET macroman COLLATE macroman_bin) ENGINE=NDB CHARACTER SET macroman COLLATE macroman_bin; 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 NDBCLUSTER # # # # # # # # # # # # macroman_bin # # # +t1 ndbcluster # # # # # # # # # # # # macroman_bin # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -15867,7 +15867,7 @@ SET NAMES macroman; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET macroman COLLATE macroman_general_ci) ENGINE=NDB CHARACTER SET macroman COLLATE macroman_general_ci; 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 NDBCLUSTER # # # # # # # # # # # # macroman_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # macroman_general_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -16097,7 +16097,7 @@ SET NAMES sjis; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET sjis COLLATE sjis_bin) ENGINE=NDB CHARACTER SET sjis COLLATE sjis_bin; 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 NDBCLUSTER # # # # # # # # # # # # sjis_bin # # # +t1 ndbcluster # # # # # # # # # # # # sjis_bin # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -16264,7 +16264,7 @@ SET NAMES sjis; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET sjis COLLATE sjis_japanese_ci) ENGINE=NDB CHARACTER SET sjis COLLATE sjis_japanese_ci; 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 NDBCLUSTER # # # # # # # # # # # # sjis_japanese_ci # # # +t1 ndbcluster # # # # # # # # # # # # sjis_japanese_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -16431,7 +16431,7 @@ SET NAMES swe7; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET swe7 COLLATE swe7_bin) ENGINE=NDB CHARACTER SET swe7 COLLATE swe7_bin; 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 NDBCLUSTER # # # # # # # # # # # # swe7_bin # # # +t1 ndbcluster # # # # # # # # # # # # swe7_bin # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -16661,7 +16661,7 @@ SET NAMES swe7; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET swe7 COLLATE swe7_swedish_ci) ENGINE=NDB CHARACTER SET swe7 COLLATE swe7_swedish_ci; 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 NDBCLUSTER # # # # # # # # # # # # swe7_swedish_ci # # # +t1 ndbcluster # # # # # # # # # # # # swe7_swedish_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -16891,7 +16891,7 @@ SET NAMES tis620; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET tis620 COLLATE tis620_bin) ENGINE=NDB CHARACTER SET tis620 COLLATE tis620_bin; 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 NDBCLUSTER # # # # # # # # # # # # tis620_bin # # # +t1 ndbcluster # # # # # # # # # # # # tis620_bin # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -17121,7 +17121,7 @@ SET NAMES tis620; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET tis620 COLLATE tis620_thai_ci) ENGINE=NDB CHARACTER SET tis620 COLLATE tis620_thai_ci; 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 NDBCLUSTER # # # # # # # # # # # # tis620_thai_ci # # # +t1 ndbcluster # # # # # # # # # # # # tis620_thai_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -17351,7 +17351,7 @@ SET NAMES ujis; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET ujis COLLATE ujis_bin) ENGINE=NDB CHARACTER SET ujis COLLATE ujis_bin; 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 NDBCLUSTER # # # # # # # # # # # # ujis_bin # # # +t1 ndbcluster # # # # # # # # # # # # ujis_bin # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -17455,7 +17455,7 @@ SET NAMES ujis; CREATE TABLE test.t1 (a VARCHAR(3) CHARACTER SET ujis COLLATE ujis_japanese_ci) ENGINE=NDB CHARACTER SET ujis COLLATE ujis_japanese_ci; 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 NDBCLUSTER # # # # # # # # # # # # ujis_japanese_ci # # # +t1 ndbcluster # # # # # # # # # # # # ujis_japanese_ci # # # SELECT HEX(ASCII(a)) AS a_ascii, CHAR_LENGTH(a) AS a_len FROM test.t1 ORDER BY a, ORD(a); a_ascii a_len 21 1 @@ -17562,7 +17562,7 @@ SET NAMES utf8; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8) ENGINE=NDB CHARACTER SET utf8; 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 NDBCLUSTER # # # # # # # # # # # # utf8_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_general_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; ALTER TABLE test.t1 CHANGE a a CHAR(4) CHARACTER SET ucs2 COLLATE ucs2_bin; @@ -20103,7 +20103,7 @@ SET NAMES utf8; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8) ENGINE=NDB CHARACTER SET utf8; 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 NDBCLUSTER # # # # # # # # # # # # utf8_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_general_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; ALTER TABLE test.t1 CHANGE a a CHAR(4) CHARACTER SET ucs2 COLLATE ucs2_czech_ci; @@ -22644,7 +22644,7 @@ SET NAMES utf8; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8) ENGINE=NDB CHARACTER SET utf8; 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 NDBCLUSTER # # # # # # # # # # # # utf8_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_general_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; ALTER TABLE test.t1 CHANGE a a CHAR(4) CHARACTER SET ucs2 COLLATE ucs2_danish_ci; @@ -25185,7 +25185,7 @@ SET NAMES utf8; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8) ENGINE=NDB CHARACTER SET utf8; 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 NDBCLUSTER # # # # # # # # # # # # utf8_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_general_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; ALTER TABLE test.t1 CHANGE a a CHAR(4) CHARACTER SET ucs2 COLLATE ucs2_estonian_ci; @@ -27726,7 +27726,7 @@ SET NAMES utf8; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8) ENGINE=NDB CHARACTER SET utf8; 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 NDBCLUSTER # # # # # # # # # # # # utf8_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_general_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; ALTER TABLE test.t1 CHANGE a a CHAR(4) CHARACTER SET ucs2 COLLATE ucs2_general_ci; @@ -30267,7 +30267,7 @@ SET NAMES utf8; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8) ENGINE=NDB CHARACTER SET utf8; 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 NDBCLUSTER # # # # # # # # # # # # utf8_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_general_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; ALTER TABLE test.t1 CHANGE a a CHAR(4) CHARACTER SET ucs2 COLLATE ucs2_hungarian_ci; @@ -32808,7 +32808,7 @@ SET NAMES utf8; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8) ENGINE=NDB CHARACTER SET utf8; 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 NDBCLUSTER # # # # # # # # # # # # utf8_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_general_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; ALTER TABLE test.t1 CHANGE a a CHAR(4) CHARACTER SET ucs2 COLLATE ucs2_icelandic_ci; @@ -35349,7 +35349,7 @@ SET NAMES utf8; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8) ENGINE=NDB CHARACTER SET utf8; 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 NDBCLUSTER # # # # # # # # # # # # utf8_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_general_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; ALTER TABLE test.t1 CHANGE a a CHAR(4) CHARACTER SET ucs2 COLLATE ucs2_latvian_ci; @@ -37890,7 +37890,7 @@ SET NAMES utf8; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8) ENGINE=NDB CHARACTER SET utf8; 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 NDBCLUSTER # # # # # # # # # # # # utf8_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_general_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; ALTER TABLE test.t1 CHANGE a a CHAR(4) CHARACTER SET ucs2 COLLATE ucs2_lithuanian_ci; @@ -40431,7 +40431,7 @@ SET NAMES utf8; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8) ENGINE=NDB CHARACTER SET utf8; 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 NDBCLUSTER # # # # # # # # # # # # utf8_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_general_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; ALTER TABLE test.t1 CHANGE a a CHAR(4) CHARACTER SET ucs2 COLLATE ucs2_persian_ci; @@ -42972,7 +42972,7 @@ SET NAMES utf8; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8) ENGINE=NDB CHARACTER SET utf8; 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 NDBCLUSTER # # # # # # # # # # # # utf8_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_general_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; ALTER TABLE test.t1 CHANGE a a CHAR(4) CHARACTER SET ucs2 COLLATE ucs2_polish_ci; @@ -45513,7 +45513,7 @@ SET NAMES utf8; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8) ENGINE=NDB CHARACTER SET utf8; 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 NDBCLUSTER # # # # # # # # # # # # utf8_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_general_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; ALTER TABLE test.t1 CHANGE a a CHAR(4) CHARACTER SET ucs2 COLLATE ucs2_roman_ci; @@ -48054,7 +48054,7 @@ SET NAMES utf8; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8) ENGINE=NDB CHARACTER SET utf8; 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 NDBCLUSTER # # # # # # # # # # # # utf8_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_general_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; ALTER TABLE test.t1 CHANGE a a CHAR(4) CHARACTER SET ucs2 COLLATE ucs2_romanian_ci; @@ -50595,7 +50595,7 @@ SET NAMES utf8; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8) ENGINE=NDB CHARACTER SET utf8; 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 NDBCLUSTER # # # # # # # # # # # # utf8_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_general_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; ALTER TABLE test.t1 CHANGE a a CHAR(4) CHARACTER SET ucs2 COLLATE ucs2_slovak_ci; @@ -53136,7 +53136,7 @@ SET NAMES utf8; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8) ENGINE=NDB CHARACTER SET utf8; 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 NDBCLUSTER # # # # # # # # # # # # utf8_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_general_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; ALTER TABLE test.t1 CHANGE a a CHAR(4) CHARACTER SET ucs2 COLLATE ucs2_slovenian_ci; @@ -55677,7 +55677,7 @@ SET NAMES utf8; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8) ENGINE=NDB CHARACTER SET utf8; 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 NDBCLUSTER # # # # # # # # # # # # utf8_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_general_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; ALTER TABLE test.t1 CHANGE a a CHAR(4) CHARACTER SET ucs2 COLLATE ucs2_spanish2_ci; @@ -58218,7 +58218,7 @@ SET NAMES utf8; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8) ENGINE=NDB CHARACTER SET utf8; 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 NDBCLUSTER # # # # # # # # # # # # utf8_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_general_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; ALTER TABLE test.t1 CHANGE a a CHAR(4) CHARACTER SET ucs2 COLLATE ucs2_spanish_ci; @@ -60759,7 +60759,7 @@ SET NAMES utf8; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8) ENGINE=NDB CHARACTER SET utf8; 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 NDBCLUSTER # # # # # # # # # # # # utf8_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_general_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; ALTER TABLE test.t1 CHANGE a a CHAR(4) CHARACTER SET ucs2 COLLATE ucs2_swedish_ci; @@ -63300,7 +63300,7 @@ SET NAMES utf8; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8) ENGINE=NDB CHARACTER SET utf8; 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 NDBCLUSTER # # # # # # # # # # # # utf8_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_general_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; ALTER TABLE test.t1 CHANGE a a CHAR(4) CHARACTER SET ucs2 COLLATE ucs2_turkish_ci; @@ -65841,7 +65841,7 @@ SET NAMES utf8; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8) ENGINE=NDB CHARACTER SET utf8; 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 NDBCLUSTER # # # # # # # # # # # # utf8_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_general_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; ALTER TABLE test.t1 CHANGE a a CHAR(4) CHARACTER SET ucs2 COLLATE ucs2_unicode_ci; @@ -68381,7 +68381,7 @@ USE test; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8 COLLATE utf8_bin) ENGINE=NDB CHARACTER SET utf8 COLLATE utf8_bin; 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 NDBCLUSTER # # # # # # # # # # # # utf8_bin # # # +t1 ndbcluster # # # # # # # # # # # # utf8_bin # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; DELETE FROM test.t1 WHERE CHAR_LENGTH(a) <> 1; @@ -70920,7 +70920,7 @@ USE test; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8 COLLATE utf8_czech_ci) ENGINE=NDB CHARACTER SET utf8 COLLATE utf8_czech_ci; 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 NDBCLUSTER # # # # # # # # # # # # utf8_czech_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_czech_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; DELETE FROM test.t1 WHERE CHAR_LENGTH(a) <> 1; @@ -73459,7 +73459,7 @@ USE test; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8 COLLATE utf8_danish_ci) ENGINE=NDB CHARACTER SET utf8 COLLATE utf8_danish_ci; 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 NDBCLUSTER # # # # # # # # # # # # utf8_danish_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_danish_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; DELETE FROM test.t1 WHERE CHAR_LENGTH(a) <> 1; @@ -75998,7 +75998,7 @@ USE test; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8 COLLATE utf8_estonian_ci) ENGINE=NDB CHARACTER SET utf8 COLLATE utf8_estonian_ci; 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 NDBCLUSTER # # # # # # # # # # # # utf8_estonian_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_estonian_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; DELETE FROM test.t1 WHERE CHAR_LENGTH(a) <> 1; @@ -78537,7 +78537,7 @@ USE test; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8 COLLATE utf8_general_ci) ENGINE=NDB CHARACTER SET utf8 COLLATE utf8_general_ci; 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 NDBCLUSTER # # # # # # # # # # # # utf8_general_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_general_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; DELETE FROM test.t1 WHERE CHAR_LENGTH(a) <> 1; @@ -81076,7 +81076,7 @@ USE test; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8 COLLATE utf8_hungarian_ci) ENGINE=NDB CHARACTER SET utf8 COLLATE utf8_hungarian_ci; 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 NDBCLUSTER # # # # # # # # # # # # utf8_hungarian_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_hungarian_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; DELETE FROM test.t1 WHERE CHAR_LENGTH(a) <> 1; @@ -83615,7 +83615,7 @@ USE test; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8 COLLATE utf8_icelandic_ci) ENGINE=NDB CHARACTER SET utf8 COLLATE utf8_icelandic_ci; 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 NDBCLUSTER # # # # # # # # # # # # utf8_icelandic_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_icelandic_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; DELETE FROM test.t1 WHERE CHAR_LENGTH(a) <> 1; @@ -86154,7 +86154,7 @@ USE test; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8 COLLATE utf8_latvian_ci) ENGINE=NDB CHARACTER SET utf8 COLLATE utf8_latvian_ci; 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 NDBCLUSTER # # # # # # # # # # # # utf8_latvian_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_latvian_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; DELETE FROM test.t1 WHERE CHAR_LENGTH(a) <> 1; @@ -88693,7 +88693,7 @@ USE test; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8 COLLATE utf8_lithuanian_ci) ENGINE=NDB CHARACTER SET utf8 COLLATE utf8_lithuanian_ci; 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 NDBCLUSTER # # # # # # # # # # # # utf8_lithuanian_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_lithuanian_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; DELETE FROM test.t1 WHERE CHAR_LENGTH(a) <> 1; @@ -91232,7 +91232,7 @@ USE test; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8 COLLATE utf8_persian_ci) ENGINE=NDB CHARACTER SET utf8 COLLATE utf8_persian_ci; 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 NDBCLUSTER # # # # # # # # # # # # utf8_persian_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_persian_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; DELETE FROM test.t1 WHERE CHAR_LENGTH(a) <> 1; @@ -93771,7 +93771,7 @@ USE test; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8 COLLATE utf8_polish_ci) ENGINE=NDB CHARACTER SET utf8 COLLATE utf8_polish_ci; 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 NDBCLUSTER # # # # # # # # # # # # utf8_polish_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_polish_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; DELETE FROM test.t1 WHERE CHAR_LENGTH(a) <> 1; @@ -96310,7 +96310,7 @@ USE test; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8 COLLATE utf8_roman_ci) ENGINE=NDB CHARACTER SET utf8 COLLATE utf8_roman_ci; 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 NDBCLUSTER # # # # # # # # # # # # utf8_roman_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_roman_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; DELETE FROM test.t1 WHERE CHAR_LENGTH(a) <> 1; @@ -98849,7 +98849,7 @@ USE test; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8 COLLATE utf8_romanian_ci) ENGINE=NDB CHARACTER SET utf8 COLLATE utf8_romanian_ci; 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 NDBCLUSTER # # # # # # # # # # # # utf8_romanian_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_romanian_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; DELETE FROM test.t1 WHERE CHAR_LENGTH(a) <> 1; @@ -101388,7 +101388,7 @@ USE test; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8 COLLATE utf8_slovak_ci) ENGINE=NDB CHARACTER SET utf8 COLLATE utf8_slovak_ci; 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 NDBCLUSTER # # # # # # # # # # # # utf8_slovak_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_slovak_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; DELETE FROM test.t1 WHERE CHAR_LENGTH(a) <> 1; @@ -103927,7 +103927,7 @@ USE test; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8 COLLATE utf8_slovenian_ci) ENGINE=NDB CHARACTER SET utf8 COLLATE utf8_slovenian_ci; 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 NDBCLUSTER # # # # # # # # # # # # utf8_slovenian_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_slovenian_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; DELETE FROM test.t1 WHERE CHAR_LENGTH(a) <> 1; @@ -106466,7 +106466,7 @@ USE test; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8 COLLATE utf8_spanish2_ci) ENGINE=NDB CHARACTER SET utf8 COLLATE utf8_spanish2_ci; 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 NDBCLUSTER # # # # # # # # # # # # utf8_spanish2_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_spanish2_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; DELETE FROM test.t1 WHERE CHAR_LENGTH(a) <> 1; @@ -109005,7 +109005,7 @@ USE test; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8 COLLATE utf8_spanish_ci) ENGINE=NDB CHARACTER SET utf8 COLLATE utf8_spanish_ci; 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 NDBCLUSTER # # # # # # # # # # # # utf8_spanish_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_spanish_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; DELETE FROM test.t1 WHERE CHAR_LENGTH(a) <> 1; @@ -111544,7 +111544,7 @@ USE test; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8 COLLATE utf8_swedish_ci) ENGINE=NDB CHARACTER SET utf8 COLLATE utf8_swedish_ci; 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 NDBCLUSTER # # # # # # # # # # # # utf8_swedish_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_swedish_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; DELETE FROM test.t1 WHERE CHAR_LENGTH(a) <> 1; @@ -114083,7 +114083,7 @@ USE test; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8 COLLATE utf8_turkish_ci) ENGINE=NDB CHARACTER SET utf8 COLLATE utf8_turkish_ci; 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 NDBCLUSTER # # # # # # # # # # # # utf8_turkish_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_turkish_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; DELETE FROM test.t1 WHERE CHAR_LENGTH(a) <> 1; @@ -116622,7 +116622,7 @@ USE test; CREATE TABLE test.t1 (a CHAR(4) CHARACTER SET utf8 COLLATE utf8_unicode_ci) ENGINE=NDB CHARACTER SET utf8 COLLATE utf8_unicode_ci; 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 NDBCLUSTER # # # # # # # # # # # # utf8_unicode_ci # # # +t1 ndbcluster # # # # # # # # # # # # utf8_unicode_ci # # # LOAD DATA INFILE 'MYSQL_TEST_DIR/suite/funcs_2/data/charset_utf8.txt' INTO TABLE test.t1; DELETE FROM test.t1 WHERE CHAR_LENGTH(a) <> 1; From 0f54801412886753b480d6d27bf75f3e8c6fdee7 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 9 Aug 2007 10:21:28 +0200 Subject: [PATCH 051/194] Bug#29804 UDF parameters don't contain correct string length - Fix warnings - Export 'check_const_len' from udf_example.dll sql/udf_example.c: Fix warnings sql/udf_example.def: Add 'check_const_len' function to be exported from udf_example.dll --- sql/udf_example.c | 6 +++--- sql/udf_example.def | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/sql/udf_example.c b/sql/udf_example.c index 5165a577555..6c07a929b04 100644 --- a/sql/udf_example.c +++ b/sql/udf_example.c @@ -1115,15 +1115,15 @@ my_bool check_const_len_init(UDF_INIT *initid, UDF_ARGS *args, char *message) } if (args->args[0] == 0) { - initid->ptr= "Not constant"; + initid->ptr= (char*)"Not constant"; } else if(strlen(args->args[0]) == args->lengths[0]) { - initid->ptr= "Correct length"; + initid->ptr= (char*)"Correct length"; } else { - initid->ptr= "Wrong length"; + initid->ptr= (char*)"Wrong length"; } initid->max_length = 100; return 0; diff --git a/sql/udf_example.def b/sql/udf_example.def index 7a87147d7b6..7c69b681f8b 100644 --- a/sql/udf_example.def +++ b/sql/udf_example.def @@ -23,3 +23,4 @@ EXPORTS avgcost is_const is_const_init + check_const_len From 8d025792a5cbb8a1ed5361116d5d4f5d1db10a56 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 9 Aug 2007 13:01:29 -0700 Subject: [PATCH 052/194] Two bugs in one! The count call was duplicating internally the counts for loaded tests (not autosql tests, just loaded). This could manifest itself by executing by file, or by executing a pre statement. BUG#29803 client/mysqlslap.c: 1) Declared VOID on pre/post statement return values (we were not using the return value and I prefer to see this declared explicitly) 2) Removed extra count call which was causing duplication of rows with parsed files examples. mysql-test/r/mysqlslap.result: The additional selects come from fixing the pre return count call. Dropping the final select is a result of fixing the true count. --- client/mysqlslap.c | 19 +++++++++---------- mysql-test/r/mysqlslap.result | 4 ++-- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/client/mysqlslap.c b/client/mysqlslap.c index aa15141bfdc..43d8b1b1560 100644 --- a/client/mysqlslap.c +++ b/client/mysqlslap.c @@ -1407,15 +1407,15 @@ get_options(int *argc,char ***argv) tmp_string[sbuf.st_size]= '\0'; my_close(data_file,MYF(0)); if (user_supplied_pre_statements) - actual_queries= parse_delimiter(tmp_string, &pre_statements, - delimiter[0]); + (void)parse_delimiter(tmp_string, &pre_statements, + delimiter[0]); my_free(tmp_string, MYF(0)); } else if (user_supplied_pre_statements) { - actual_queries= parse_delimiter(user_supplied_pre_statements, - &pre_statements, - delimiter[0]); + (void)parse_delimiter(user_supplied_pre_statements, + &pre_statements, + delimiter[0]); } if (user_supplied_post_statements && my_stat(user_supplied_post_statements, &sbuf, MYF(0))) @@ -1438,14 +1438,14 @@ get_options(int *argc,char ***argv) tmp_string[sbuf.st_size]= '\0'; my_close(data_file,MYF(0)); if (user_supplied_post_statements) - parse_delimiter(tmp_string, &post_statements, - delimiter[0]); + (void)parse_delimiter(tmp_string, &post_statements, + delimiter[0]); my_free(tmp_string, MYF(0)); } else if (user_supplied_post_statements) { - parse_delimiter(user_supplied_post_statements, &post_statements, - delimiter[0]); + (void)parse_delimiter(user_supplied_post_statements, &post_statements, + delimiter[0]); } if (verbose >= 2) @@ -1993,7 +1993,6 @@ parse_delimiter(const char *script, statement **stmt, char delm) ptr+= retstr - ptr + 1; if (isspace(*ptr)) ptr++; - count++; } if (ptr != script+length) diff --git a/mysql-test/r/mysqlslap.result b/mysql-test/r/mysqlslap.result index cc8bc3dac31..dfe721d10d2 100644 --- a/mysql-test/r/mysqlslap.result +++ b/mysql-test/r/mysqlslap.result @@ -129,7 +129,6 @@ INSERT INTO t1 VALUES (1, 'This is a test'); insert into t2 values ('test', 'test2'); select * from t1; select * from t2; -select * from t1; DROP SCHEMA IF EXISTS `mysqlslap`; DROP SCHEMA IF EXISTS `mysqlslap`; CREATE SCHEMA `mysqlslap`; @@ -141,7 +140,6 @@ INSERT INTO t1 VALUES (1, 'This is a test'); insert into t2 values ('test', 'test2'); select * from t1; select * from t2; -select * from t1; DROP SCHEMA IF EXISTS `mysqlslap`; DROP SCHEMA IF EXISTS `mysqlslap`; CREATE SCHEMA `mysqlslap`; @@ -153,6 +151,7 @@ INSERT INTO t1 VALUES (1, 'This is a test'); insert into t2 values ('test', 'test2'); SHOW TABLES; select * from t1; +select * from t2; SHOW TABLES; DROP SCHEMA IF EXISTS `mysqlslap`; DROP SCHEMA IF EXISTS `mysqlslap`; @@ -165,6 +164,7 @@ INSERT INTO t1 VALUES (1, 'This is a test'); insert into t2 values ('test', 'test2'); SHOW TABLES; select * from t1; +select * from t2; SHOW TABLES; DROP SCHEMA IF EXISTS `mysqlslap`; DROP SCHEMA IF EXISTS `mysqlslap`; From 5dfb1861787c209b6024894de25dbcb965fa3437 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 9 Aug 2007 23:18:44 +0200 Subject: [PATCH 053/194] rpl_packet.test: Updated test to use new include function wait_for_slave_running_off.inc: Created new include to resolve the timing issue recorded by Bug#30209 rpl_events.inc: The issue shown in Bug#30128 is that 'from er' shows up in a part of the test that it should not show up in. This event really is not created until later in the test, yet since the test runs row and then turns around and runs statement, I am guessing that the first run may not have cleaned up like it should, so I am adding a sync with master after the drop of table t1 to ensure that both master and slave are clean. mysql-test/suite/rpl/t/rpl_packet.test: Updated test to use new include function mysql-test/include/wait_for_slave_running_off.inc: Created new include to resolve the timing issue recorded by Bug#30209 mysql-test/include/rpl_events.inc: The issue shown in Bug#30128 is that 'from er' shows up in a part of the test that it should not show up in. This event really is not created until later in the test, yet since the test runs row and then turns around and runs statement, I am guessing that the first run may not have cleaned up like it should, so I am adding a sync with master after the drop of table t1 to ensure that both master and slave are clean. --- mysql-test/include/rpl_events.inc | 2 ++ .../include/wait_for_slave_running_off.inc | 35 +++++++++++++++++++ mysql-test/suite/rpl/t/rpl_packet.test | 1 + 3 files changed, 38 insertions(+) create mode 100755 mysql-test/include/wait_for_slave_running_off.inc diff --git a/mysql-test/include/rpl_events.inc b/mysql-test/include/rpl_events.inc index 4b57468b2d7..e1bf5500923 100644 --- a/mysql-test/include/rpl_events.inc +++ b/mysql-test/include/rpl_events.inc @@ -147,4 +147,6 @@ DROP EVENT test.slave_terminate; --echo "Cleanup" connection master; DROP TABLE t1; +sync_slave_with_master; +connection master; diff --git a/mysql-test/include/wait_for_slave_running_off.inc b/mysql-test/include/wait_for_slave_running_off.inc new file mode 100755 index 00000000000..0f675291ec1 --- /dev/null +++ b/mysql-test/include/wait_for_slave_running_off.inc @@ -0,0 +1,35 @@ +################################################### +#Author: Jeb +#Date: 2007-08-09 +#Purpose: This is to address timing issue recorded +# in bug 30209. This function with wait +# until "SHOW STATUS LIKE 'Slave_running'" +# returns 'OFF' +#Details: +# 1) Fill in and setup variable +# 2) loop through looking OFF +# 3) If loops too long die. +#################################################### +connection slave; +let $row_number= 1; +let $run= 1; +let $counter= 300; + +while ($run) +{ + let $running_result= query_get_value(SHOW STATUS LIKE 'Slave_running', Value, $row_number); + if (`SELECT '$running_result' = 'OFF'`){ + let $run= 0; + } + sleep 0.1; + if (!$counter){ + --echo "Failed while waiting for slave to stop" + --replace_result $MASTER_MYPORT MASTER_PORT + --replace_column 1 # 7 # 8 # 9 # 22 # 23 # 33 # + query_vertical SHOW SLAVE STATUS; + exit; + } + dec $counter; +} + + diff --git a/mysql-test/suite/rpl/t/rpl_packet.test b/mysql-test/suite/rpl/t/rpl_packet.test index 26fe36d8c40..c147878e0c7 100644 --- a/mysql-test/suite/rpl/t/rpl_packet.test +++ b/mysql-test/suite/rpl/t/rpl_packet.test @@ -68,6 +68,7 @@ INSERT INTO `t1`(`f1`) VALUES ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa # The slave I/O thread must stop after trying to read the above event connection slave; sleep 2; +--source include/wait_for_slave_running_off.inc SHOW STATUS LIKE 'Slave_running'; # cleanup From d3b64bd1a2fe17a7e1867df29b6555082021971b Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 9 Aug 2007 17:31:00 -0600 Subject: [PATCH 054/194] Bug#25930 (CREATE TABLE x SELECT ... parses columns wrong when ran with ANSI_QUOTES mode) This patch contains a test case only, showing that the bug has been fixed. The issue was related to parsing <"blah">, where the lexical analyser would not properly delimit the start and end of the token. Properly making the token boundaries has been fixed in sql_lex.cc with the patch for bug 25411 : see the Lex_input_stream class. mysql-test/r/parser.result: Test case for Bug#25930, which was fixed by Bug#25411 mysql-test/t/parser.test: Test case for Bug#25930, which was fixed by Bug#25411 --- mysql-test/r/parser.result | 10 ++++++++++ mysql-test/t/parser.test | 22 ++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/mysql-test/r/parser.result b/mysql-test/r/parser.result index cb44a235f25..76326f65f08 100644 --- a/mysql-test/r/parser.result +++ b/mysql-test/r/parser.result @@ -273,6 +273,16 @@ create table VAR_SAMP(a int); 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 'VAR_SAMP(a int)' at line 1 create table VAR_SAMP (a int); 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 'VAR_SAMP (a int)' at line 1 +DROP TABLE IF EXISTS table_25930_a; +DROP TABLE IF EXISTS table_25930_b; +SET SQL_MODE = 'ANSI_QUOTES'; +CREATE TABLE table_25930_a ( "blah" INT ); +CREATE TABLE table_25930_b SELECT "blah" - 1 FROM table_25930_a; +desc table_25930_b; +Field Type Null Key Default Extra +"blah" - 1 bigint(12) YES NULL +DROP TABLE table_25930_a; +DROP TABLE table_25930_b; SET @@sql_mode=@save_sql_mode; select pi(3.14); ERROR 42000: Incorrect parameter count in the call to native function 'pi' diff --git a/mysql-test/t/parser.test b/mysql-test/t/parser.test index 65aa9dbb89b..79c9129bb74 100644 --- a/mysql-test/t/parser.test +++ b/mysql-test/t/parser.test @@ -363,6 +363,28 @@ create table VAR_SAMP(a int); --error ER_PARSE_ERROR create table VAR_SAMP (a int); +# +# Bug#25930 (CREATE TABLE x SELECT ... parses columns wrong when ran with +# ANSI_QUOTES mode) +# + +--disable_warnings +DROP TABLE IF EXISTS table_25930_a; +DROP TABLE IF EXISTS table_25930_b; +--enable_warnings + +SET SQL_MODE = 'ANSI_QUOTES'; +CREATE TABLE table_25930_a ( "blah" INT ); +CREATE TABLE table_25930_b SELECT "blah" - 1 FROM table_25930_a; + +# The lexer used to chop the first <">, +# not marking the start of the token "blah" correctly. +desc table_25930_b; + +DROP TABLE table_25930_a; +DROP TABLE table_25930_b; + + SET @@sql_mode=@save_sql_mode; #============================================================================= From 9ad300d50d531d930c649002ee34123b452ec526 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 10 Aug 2007 12:48:01 -0400 Subject: [PATCH 055/194] BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash This patch adds functionality to row-based replication to ensure the slave's column sizes are >= to that of the master. It also includes some refactoring for the code from WL#3228. mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash Removed commented out portion of test referenced in bug report. This test supports the original request of the bug report. mysql-test/suite/rpl/r/rpl_extraCol_innodb.result: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash New result file for additional test. mysql-test/suite/rpl/r/rpl_extraCol_myisam.result: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash New result file for additional test. mysql-test/suite/rpl_ndb/r/rpl_ndb_extraCol.result: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash New result file for additional test. sql/field.cc: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash This patch refactors the additions made by this bug patch and those made by WL#3228. The effort consolidates the large switches on type() into functions within the field classes. sql/field.h: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash This patch refactors the additions made by this bug patch and those made by WL#3228. The effort consolidates the large switches on type() into functions within the field classes. sql/log_event.cc: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash This patch refactors the calc_field_size() method to use the new methods implemented in the field classes. It also corrects comments concerning how replication of field metadata works. sql/log_event.h: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash This patch refactors out the calc_field_size() method into the method save_field_metadata(). sql/rpl_utility.cc: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash This patch adds a method to check the size of the field on the master using the field metadata from WL#3228. Each column is checked to ensure the slave's column is >= to the master's column in size. sql/rpl_utility.h: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash This patch changes the table_def class so that it records the size of the metadata. This is a result of refactoring out the calc_field_size() method into the method save_field_metadata(). Prevents access via field_metadata(col) to unitialized memory when there is no metadata transmitted from the master. mysql-test/suite/rpl/r/rpl_row_colSize.result: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash New result file for additional test. mysql-test/suite/rpl/t/rpl_row_colSize.test: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash Added a test file to test each variable type that relies on field metadata from the master. mysql-test/include/test_fieldsize.inc: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash Sub unit file to test each variable type that relies on field metadata from the master. --- .../extra/rpl_tests/rpl_extraSlave_Col.test | 89 ++- mysql-test/include/test_fieldsize.inc | 40 + .../suite/rpl/r/rpl_extraCol_innodb.result | 131 ++- .../suite/rpl/r/rpl_extraCol_myisam.result | 131 ++- mysql-test/suite/rpl/r/rpl_row_colSize.result | 754 ++++++++++++++++++ mysql-test/suite/rpl/t/rpl_row_colSize.test | 168 ++++ .../suite/rpl_ndb/r/rpl_ndb_extraCol.result | 131 ++- sql/field.cc | 272 ++++++- sql/field.h | 68 +- sql/log_event.cc | 155 +--- sql/log_event.h | 3 +- sql/rpl_utility.cc | 19 + sql/rpl_utility.h | 5 +- 13 files changed, 1697 insertions(+), 269 deletions(-) create mode 100644 mysql-test/include/test_fieldsize.inc create mode 100644 mysql-test/suite/rpl/r/rpl_row_colSize.result create mode 100644 mysql-test/suite/rpl/t/rpl_row_colSize.test diff --git a/mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test b/mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test index abeef5f2903..a4ac55cc2e8 100644 --- a/mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test +++ b/mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test @@ -71,38 +71,47 @@ sync_slave_with_master; ############################################ ## BUG22086 -#--echo *** Create t2 on slave *** -#STOP SLAVE; -#RESET SLAVE; -#eval CREATE TABLE t2 (a INT, b INT PRIMARY KEY, c CHAR(5), -# d FLOAT DEFAULT '2.00', -# e CHAR(5) DEFAULT 'TEST2') -# ENGINE=$engine_type; -# -#--echo *** Create t2 on Master *** -#connection master; -#eval CREATE TABLE t2 (a INT PRIMARY KEY, b INT, c CHAR(10) -# ) ENGINE=$engine_type; -#RESET MASTER; -# -#--echo *** Start Slave *** -#connection slave; -#START SLAVE; -# -#--echo *** Master Data Insert *** -#connection master; -# -#INSERT INTO t2 () VALUES(1,2,'Kyle, TEX'),(2,1,'JOE AUSTIN'),(3,4,'QA TESTING'); -#SELECT * FROM t2 ORDER BY a; +--echo *** Create t2 on slave *** +STOP SLAVE; +RESET SLAVE; +eval CREATE TABLE t2 (a INT, b INT PRIMARY KEY, c CHAR(5), + d FLOAT DEFAULT '2.00', + e CHAR(5) DEFAULT 'TEST2') + ENGINE=$engine_type; -#--echo *** Select from slave *** -#sync_slave_with_master; -#SELECT * FROM t2 ORDER BY a; +--echo *** Create t2 on Master *** +connection master; +eval CREATE TABLE t2 (a INT PRIMARY KEY, b INT, c CHAR(10) + ) ENGINE=$engine_type; +RESET MASTER; -#--echo *** Drop t2 *** -#connection master; -#DROP TABLE t2; -#sync_slave_with_master; +--echo *** Master Data Insert *** +connection master; + +INSERT INTO t2 () VALUES(1,2,'Kyle, TEX'),(2,1,'JOE AUSTIN'),(3,4,'QA TESTING'); +SELECT * FROM t2 ORDER BY a; + +--echo *** Start Slave *** +connection slave; +START SLAVE; +wait_for_slave_to_stop; +--replace_result $MASTER_MYPORT MASTER_PORT +--replace_column 1 # 4 # 7 # 8 # 9 # 16 # 22 # 23 # 33 # 35 # 36 # +--query_vertical SHOW SLAVE STATUS +STOP SLAVE; +RESET SLAVE; +SELECT * FROM t2 ORDER BY a; + +connection master; +RESET MASTER; + +connection slave; +START SLAVE; + +--echo *** Drop t2 *** +connection master; +DROP TABLE t2; +sync_slave_with_master; #################################### ### Try to replicate BLOB to INT ### @@ -140,7 +149,7 @@ INSERT INTO t3 () VALUES(@b1,2,'Kyle, TEX'),(@b1,1,'JOE AUSTIN'),(@b1,4,'QA TEST connection slave; --source include/wait_for_slave_sql_to_stop.inc --replace_result $MASTER_MYPORT MASTER_PORT ---replace_column 1 # 7 # 8 # 9 # 22 # 23 # 33 # +--replace_column 1 # 4 # 7 # 8 # 9 # 16 # 22 # 23 # 33 # 35 # 36 # --query_vertical SHOW SLAVE STATUS SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; START SLAVE; @@ -185,7 +194,7 @@ INSERT INTO t4 () VALUES(100.22,2,'Kyle, TEX'),(200.26,1,'JOE AUSTIN'), connection slave; --source include/wait_for_slave_sql_to_stop.inc --replace_result $MASTER_MYPORT MASTER_PORT ---replace_column 1 # 7 # 8 # 9 # 22 # 23 # 33 # +--replace_column 1 # 4 # 7 # 8 # 9 # 16 # 22 # 23 # 33 # 35 # 36 # --query_vertical SHOW SLAVE STATUS SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; START SLAVE; @@ -230,7 +239,7 @@ INSERT INTO t5 () VALUES(1,'Kyle',200.23,1,'b1b1',23.00098), connection slave; --source include/wait_for_slave_sql_to_stop.inc --replace_result $MASTER_MYPORT MASTER_PORT ---replace_column 1 # 7 # 8 # 9 # 22 # 23 # 33 # +--replace_column 1 # 4 # 7 # 8 # 9 # 16 # 22 # 23 # 33 # 35 # 36 # --query_vertical SHOW SLAVE STATUS SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; START SLAVE; @@ -276,7 +285,7 @@ INSERT INTO t6 () VALUES(1,'Kyle',200.23,1), connection slave; --source include/wait_for_slave_sql_to_stop.inc --replace_result $MASTER_MYPORT MASTER_PORT ---replace_column 1 # 7 # 8 # 9 # 22 # 23 # 33 # +--replace_column 1 # 4 # 7 # 8 # 9 # 16 # 22 # 23 # 33 # 35 # 36 # --query_vertical SHOW SLAVE STATUS SET GLOBAL SQL_SLAVE_SKIP_COUNTER=3; #START SLAVE; @@ -378,7 +387,7 @@ INSERT INTO t8 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA'); #connection slave; #wait_for_slave_to_stop; #--replace_result $MASTER_MYPORT MASTER_PORT -#--replace_column 1 # 7 # 8 # 9 # 22 # 23 # 33 # +#--replace_column 1 # 4 # 7 # 8 # 9 # 16 # 22 # 23 # 33 # 35 # 36 # #--query_vertical SHOW SLAVE STATUS #SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; #START SLAVE; @@ -429,7 +438,7 @@ sync_slave_with_master; #--echo *** Select from T9 *** #--source include/wait_for_slave_sql_to_stop.inc #--replace_result $MASTER_MYPORT MASTER_PORT -#--replace_column 1 # 7 # 8 # 9 # 22 # 23 # 33 # +#--replace_column 1 # 4 # 7 # 8 # 9 # 16 # 22 # 23 # 33 # 35 # 36 # #--query_vertical SHOW SLAVE STATUS #SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; #START SLAVE; @@ -471,7 +480,7 @@ INSERT INTO t10 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA'); connection slave; --source include/wait_for_slave_sql_to_stop.inc --replace_result $MASTER_MYPORT MASTER_PORT ---replace_column 1 # 7 # 8 # 9 # 22 # 23 # 33 # +--replace_column 1 # 4 # 7 # 8 # 9 # 16 # 22 # 23 # 33 # 35 # 36 # --query_vertical SHOW SLAVE STATUS SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; START SLAVE; @@ -515,7 +524,7 @@ INSERT INTO t11 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA'); connection slave; --source include/wait_for_slave_sql_to_stop.inc --replace_result $MASTER_MYPORT MASTER_PORT ---replace_column 1 # 7 # 8 # 9 # 22 # 23 # 33 # +--replace_column 1 # 4 # 7 # 8 # 9 # 16 # 22 # 23 # 33 # 35 # 36 # --query_vertical SHOW SLAVE STATUS SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; START SLAVE; @@ -725,7 +734,7 @@ ALTER TABLE t15 ADD COLUMN c6 INT AFTER c5; connection slave; --source include/wait_for_slave_sql_to_stop.inc --replace_result $MASTER_MYPORT MASTER_PORT ---replace_column 1 # 7 # 8 # 9 # 22 # 23 # 33 # +--replace_column 1 # 4 # 7 # 8 # 9 # 16 # 22 # 23 # 33 # 35 # 36 # --query_vertical SHOW SLAVE STATUS SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; START SLAVE; @@ -834,7 +843,7 @@ INSERT INTO t17 () VALUES(9223372036854775807,2,'Kyle, TEX'); connection slave; --source include/wait_for_slave_sql_to_stop.inc --replace_result $MASTER_MYPORT MASTER_PORT ---replace_column 1 # 7 # 8 # 9 # 22 # 23 # 33 # +--replace_column 1 # 4 # 7 # 8 # 9 # 16 # 22 # 23 # 33 # 35 # 36 # --query_vertical SHOW SLAVE STATUS SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; START SLAVE; diff --git a/mysql-test/include/test_fieldsize.inc b/mysql-test/include/test_fieldsize.inc new file mode 100644 index 00000000000..cbe63e26318 --- /dev/null +++ b/mysql-test/include/test_fieldsize.inc @@ -0,0 +1,40 @@ +# +# include/test_fieldsize.inc +# +# This include file is designed to create a table with one column +# whose size on the master is greater than that on the slave. The +# test should fail with an error on the slave. +# + +connection master; +DROP TABLE IF EXISTS t1; + +sync_slave_with_master; +STOP SLAVE; +RESET SLAVE; +eval $test_table_slave; + +connection master; +eval $test_table_master; +RESET MASTER; + +eval $test_insert; + +connection slave; +START SLAVE; +wait_for_slave_to_stop; +--replace_result $MASTER_MYPORT MASTER_PORT +--replace_column 1 # 4 # 7 # 8 # 9 # 16 # 22 # 23 # 33 # 35 # 36 # +--query_vertical SHOW SLAVE STATUS + +# The following should be 0 +SELECT COUNT(*) FROM t1; +STOP SLAVE; +RESET SLAVE; + +connection master; +RESET MASTER; + +connection slave; +START SLAVE; + diff --git a/mysql-test/suite/rpl/r/rpl_extraCol_innodb.result b/mysql-test/suite/rpl/r/rpl_extraCol_innodb.result index c3159987b30..bff391610a6 100644 --- a/mysql-test/suite/rpl/r/rpl_extraCol_innodb.result +++ b/mysql-test/suite/rpl/r/rpl_extraCol_innodb.result @@ -33,6 +33,73 @@ a b c d e 3 4 QA 2 TEST *** Drop t1 *** DROP TABLE t1; +*** Create t2 on slave *** +STOP SLAVE; +RESET SLAVE; +CREATE TABLE t2 (a INT, b INT PRIMARY KEY, c CHAR(5), +d FLOAT DEFAULT '2.00', +e CHAR(5) DEFAULT 'TEST2') +ENGINE='InnoDB'; +*** Create t2 on Master *** +CREATE TABLE t2 (a INT PRIMARY KEY, b INT, c CHAR(10) +) ENGINE='InnoDB'; +RESET MASTER; +*** Master Data Insert *** +INSERT INTO t2 () VALUES(1,2,'Kyle, TEX'),(2,1,'JOE AUSTIN'),(3,4,'QA TESTING'); +SELECT * FROM t2 ORDER BY a; +a b c +1 2 Kyle, TEX +2 1 JOE AUSTIN +3 4 QA TESTING +*** Start Slave *** +START SLAVE; +SHOW SLAVE STATUS; +Slave_IO_State # +Master_Host 127.0.0.1 +Master_User root +Master_Port # +Connect_Retry 1 +Master_Log_File master-bin.000001 +Read_Master_Log_Pos # +Relay_Log_File # +Relay_Log_Pos # +Relay_Master_Log_File master-bin.000001 +Slave_IO_Running Yes +Slave_SQL_Running No +Replicate_Do_DB +Replicate_Ignore_DB +Replicate_Do_Table +Replicate_Ignore_Table # +Replicate_Wild_Do_Table +Replicate_Wild_Ignore_Table +Last_Errno 1532 +Last_Error Table definition on master and slave does not match: Column 2 size mismatch - master has size 10, test.t2 on slave has size 6. Master's column size should be <= the slave's column size. +Skip_Counter 0 +Exec_Master_Log_Pos # +Relay_Log_Space # +Until_Condition None +Until_Log_File +Until_Log_Pos 0 +Master_SSL_Allowed No +Master_SSL_CA_File +Master_SSL_CA_Path +Master_SSL_Cert +Master_SSL_Cipher +Master_SSL_Key +Seconds_Behind_Master # +Master_SSL_Verify_Server_Cert No +Last_IO_Errno # +Last_IO_Error # +Last_SQL_Errno 1532 +Last_SQL_Error Table definition on master and slave does not match: Column 2 size mismatch - master has size 10, test.t2 on slave has size 6. Master's column size should be <= the slave's column size. +STOP SLAVE; +RESET SLAVE; +SELECT * FROM t2 ORDER BY a; +a b c d e +RESET MASTER; +START SLAVE; +*** Drop t2 *** +DROP TABLE t2; *** Create t3 on slave *** STOP SLAVE; RESET SLAVE; @@ -57,7 +124,7 @@ SHOW SLAVE STATUS; Slave_IO_State # Master_Host 127.0.0.1 Master_User root -Master_Port MASTER_PORT +Master_Port # Connect_Retry 1 Master_Log_File master-bin.000001 Read_Master_Log_Pos # @@ -69,7 +136,7 @@ Slave_SQL_Running No Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table -Replicate_Ignore_Table +Replicate_Ignore_Table # Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno 1532 @@ -88,8 +155,8 @@ Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No -Last_IO_Errno 0 -Last_IO_Error +Last_IO_Errno # +Last_IO_Error # Last_SQL_Errno 1532 Last_SQL_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 252, test.t3 has type 3 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; @@ -119,7 +186,7 @@ SHOW SLAVE STATUS; Slave_IO_State # Master_Host 127.0.0.1 Master_User root -Master_Port MASTER_PORT +Master_Port # Connect_Retry 1 Master_Log_File master-bin.000001 Read_Master_Log_Pos # @@ -131,7 +198,7 @@ Slave_SQL_Running No Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table -Replicate_Ignore_Table +Replicate_Ignore_Table # Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno 1532 @@ -150,8 +217,8 @@ Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No -Last_IO_Errno 0 -Last_IO_Error +Last_IO_Errno # +Last_IO_Error # Last_SQL_Errno 1532 Last_SQL_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 246, test.t4 has type 3 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; @@ -181,7 +248,7 @@ SHOW SLAVE STATUS; Slave_IO_State # Master_Host 127.0.0.1 Master_User root -Master_Port MASTER_PORT +Master_Port # Connect_Retry 1 Master_Log_File master-bin.000001 Read_Master_Log_Pos # @@ -193,7 +260,7 @@ Slave_SQL_Running No Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table -Replicate_Ignore_Table +Replicate_Ignore_Table # Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno 1532 @@ -212,8 +279,8 @@ Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No -Last_IO_Errno 0 -Last_IO_Error +Last_IO_Errno # +Last_IO_Error # Last_SQL_Errno 1532 Last_SQL_Error Table definition on master and slave does not match: Column 5 type mismatch - received type 4, test.t5 has type 246 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; @@ -242,7 +309,7 @@ SHOW SLAVE STATUS; Slave_IO_State # Master_Host 127.0.0.1 Master_User root -Master_Port MASTER_PORT +Master_Port # Connect_Retry 1 Master_Log_File master-bin.000001 Read_Master_Log_Pos # @@ -254,7 +321,7 @@ Slave_SQL_Running No Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table -Replicate_Ignore_Table +Replicate_Ignore_Table # Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno 1532 @@ -273,8 +340,8 @@ Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No -Last_IO_Errno 0 -Last_IO_Error +Last_IO_Errno # +Last_IO_Error # Last_SQL_Errno 1532 Last_SQL_Error Table definition on master and slave does not match: Column 3 type mismatch - received type 16, test.t6 has type 3 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=3; @@ -354,7 +421,7 @@ SHOW SLAVE STATUS; Slave_IO_State # Master_Host 127.0.0.1 Master_User root -Master_Port MASTER_PORT +Master_Port # Connect_Retry 1 Master_Log_File master-bin.000001 Read_Master_Log_Pos # @@ -366,7 +433,7 @@ Slave_SQL_Running No Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table -Replicate_Ignore_Table +Replicate_Ignore_Table # Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno 1532 @@ -385,8 +452,8 @@ Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No -Last_IO_Errno 0 -Last_IO_Error +Last_IO_Errno # +Last_IO_Error # Last_SQL_Errno 1532 Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 254, test.t10 has type 5 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; @@ -415,7 +482,7 @@ SHOW SLAVE STATUS; Slave_IO_State # Master_Host 127.0.0.1 Master_User root -Master_Port MASTER_PORT +Master_Port # Connect_Retry 1 Master_Log_File master-bin.000001 Read_Master_Log_Pos # @@ -427,7 +494,7 @@ Slave_SQL_Running No Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table -Replicate_Ignore_Table +Replicate_Ignore_Table # Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno 1532 @@ -446,8 +513,8 @@ Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No -Last_IO_Errno 0 -Last_IO_Error +Last_IO_Errno # +Last_IO_Error # Last_SQL_Errno 1532 Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 15, test.t11 has type 252 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; @@ -605,7 +672,7 @@ SHOW SLAVE STATUS; Slave_IO_State # Master_Host 127.0.0.1 Master_User root -Master_Port MASTER_PORT +Master_Port # Connect_Retry 1 Master_Log_File master-bin.000001 Read_Master_Log_Pos # @@ -617,7 +684,7 @@ Slave_SQL_Running No Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table -Replicate_Ignore_Table +Replicate_Ignore_Table # Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno 1060 @@ -636,8 +703,8 @@ Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No -Last_IO_Errno 0 -Last_IO_Error +Last_IO_Errno # +Last_IO_Error # Last_SQL_Errno 1060 Last_SQL_Error Error 'Duplicate column name 'c6'' on query. Default database: 'test'. Query: 'ALTER TABLE t15 ADD COLUMN c6 INT AFTER c5' SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; @@ -740,7 +807,7 @@ SHOW SLAVE STATUS; Slave_IO_State # Master_Host 127.0.0.1 Master_User root -Master_Port MASTER_PORT +Master_Port # Connect_Retry 1 Master_Log_File master-bin.000001 Read_Master_Log_Pos # @@ -752,7 +819,7 @@ Slave_SQL_Running No Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table -Replicate_Ignore_Table +Replicate_Ignore_Table # Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno 1532 @@ -771,8 +838,8 @@ Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No -Last_IO_Errno 0 -Last_IO_Error +Last_IO_Errno # +Last_IO_Error # Last_SQL_Errno 1532 Last_SQL_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 8, test.t17 has type 2 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; diff --git a/mysql-test/suite/rpl/r/rpl_extraCol_myisam.result b/mysql-test/suite/rpl/r/rpl_extraCol_myisam.result index 9d6c3ed5d33..7613bb6aa12 100644 --- a/mysql-test/suite/rpl/r/rpl_extraCol_myisam.result +++ b/mysql-test/suite/rpl/r/rpl_extraCol_myisam.result @@ -33,6 +33,73 @@ a b c d e 3 4 QA 2 TEST *** Drop t1 *** DROP TABLE t1; +*** Create t2 on slave *** +STOP SLAVE; +RESET SLAVE; +CREATE TABLE t2 (a INT, b INT PRIMARY KEY, c CHAR(5), +d FLOAT DEFAULT '2.00', +e CHAR(5) DEFAULT 'TEST2') +ENGINE='MyISAM'; +*** Create t2 on Master *** +CREATE TABLE t2 (a INT PRIMARY KEY, b INT, c CHAR(10) +) ENGINE='MyISAM'; +RESET MASTER; +*** Master Data Insert *** +INSERT INTO t2 () VALUES(1,2,'Kyle, TEX'),(2,1,'JOE AUSTIN'),(3,4,'QA TESTING'); +SELECT * FROM t2 ORDER BY a; +a b c +1 2 Kyle, TEX +2 1 JOE AUSTIN +3 4 QA TESTING +*** Start Slave *** +START SLAVE; +SHOW SLAVE STATUS; +Slave_IO_State # +Master_Host 127.0.0.1 +Master_User root +Master_Port # +Connect_Retry 1 +Master_Log_File master-bin.000001 +Read_Master_Log_Pos # +Relay_Log_File # +Relay_Log_Pos # +Relay_Master_Log_File master-bin.000001 +Slave_IO_Running Yes +Slave_SQL_Running No +Replicate_Do_DB +Replicate_Ignore_DB +Replicate_Do_Table +Replicate_Ignore_Table # +Replicate_Wild_Do_Table +Replicate_Wild_Ignore_Table +Last_Errno 1532 +Last_Error Table definition on master and slave does not match: Column 2 size mismatch - master has size 10, test.t2 on slave has size 6. Master's column size should be <= the slave's column size. +Skip_Counter 0 +Exec_Master_Log_Pos # +Relay_Log_Space # +Until_Condition None +Until_Log_File +Until_Log_Pos 0 +Master_SSL_Allowed No +Master_SSL_CA_File +Master_SSL_CA_Path +Master_SSL_Cert +Master_SSL_Cipher +Master_SSL_Key +Seconds_Behind_Master # +Master_SSL_Verify_Server_Cert No +Last_IO_Errno # +Last_IO_Error # +Last_SQL_Errno 1532 +Last_SQL_Error Table definition on master and slave does not match: Column 2 size mismatch - master has size 10, test.t2 on slave has size 6. Master's column size should be <= the slave's column size. +STOP SLAVE; +RESET SLAVE; +SELECT * FROM t2 ORDER BY a; +a b c d e +RESET MASTER; +START SLAVE; +*** Drop t2 *** +DROP TABLE t2; *** Create t3 on slave *** STOP SLAVE; RESET SLAVE; @@ -57,7 +124,7 @@ SHOW SLAVE STATUS; Slave_IO_State # Master_Host 127.0.0.1 Master_User root -Master_Port MASTER_PORT +Master_Port # Connect_Retry 1 Master_Log_File master-bin.000001 Read_Master_Log_Pos # @@ -69,7 +136,7 @@ Slave_SQL_Running No Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table -Replicate_Ignore_Table +Replicate_Ignore_Table # Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno 1532 @@ -88,8 +155,8 @@ Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No -Last_IO_Errno 0 -Last_IO_Error +Last_IO_Errno # +Last_IO_Error # Last_SQL_Errno 1532 Last_SQL_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 252, test.t3 has type 3 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; @@ -119,7 +186,7 @@ SHOW SLAVE STATUS; Slave_IO_State # Master_Host 127.0.0.1 Master_User root -Master_Port MASTER_PORT +Master_Port # Connect_Retry 1 Master_Log_File master-bin.000001 Read_Master_Log_Pos # @@ -131,7 +198,7 @@ Slave_SQL_Running No Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table -Replicate_Ignore_Table +Replicate_Ignore_Table # Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno 1532 @@ -150,8 +217,8 @@ Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No -Last_IO_Errno 0 -Last_IO_Error +Last_IO_Errno # +Last_IO_Error # Last_SQL_Errno 1532 Last_SQL_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 246, test.t4 has type 3 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; @@ -181,7 +248,7 @@ SHOW SLAVE STATUS; Slave_IO_State # Master_Host 127.0.0.1 Master_User root -Master_Port MASTER_PORT +Master_Port # Connect_Retry 1 Master_Log_File master-bin.000001 Read_Master_Log_Pos # @@ -193,7 +260,7 @@ Slave_SQL_Running No Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table -Replicate_Ignore_Table +Replicate_Ignore_Table # Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno 1532 @@ -212,8 +279,8 @@ Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No -Last_IO_Errno 0 -Last_IO_Error +Last_IO_Errno # +Last_IO_Error # Last_SQL_Errno 1532 Last_SQL_Error Table definition on master and slave does not match: Column 5 type mismatch - received type 4, test.t5 has type 246 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; @@ -242,7 +309,7 @@ SHOW SLAVE STATUS; Slave_IO_State # Master_Host 127.0.0.1 Master_User root -Master_Port MASTER_PORT +Master_Port # Connect_Retry 1 Master_Log_File master-bin.000001 Read_Master_Log_Pos # @@ -254,7 +321,7 @@ Slave_SQL_Running No Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table -Replicate_Ignore_Table +Replicate_Ignore_Table # Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno 1532 @@ -273,8 +340,8 @@ Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No -Last_IO_Errno 0 -Last_IO_Error +Last_IO_Errno # +Last_IO_Error # Last_SQL_Errno 1532 Last_SQL_Error Table definition on master and slave does not match: Column 3 type mismatch - received type 16, test.t6 has type 3 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=3; @@ -354,7 +421,7 @@ SHOW SLAVE STATUS; Slave_IO_State # Master_Host 127.0.0.1 Master_User root -Master_Port MASTER_PORT +Master_Port # Connect_Retry 1 Master_Log_File master-bin.000001 Read_Master_Log_Pos # @@ -366,7 +433,7 @@ Slave_SQL_Running No Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table -Replicate_Ignore_Table +Replicate_Ignore_Table # Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno 1532 @@ -385,8 +452,8 @@ Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No -Last_IO_Errno 0 -Last_IO_Error +Last_IO_Errno # +Last_IO_Error # Last_SQL_Errno 1532 Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 254, test.t10 has type 5 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; @@ -415,7 +482,7 @@ SHOW SLAVE STATUS; Slave_IO_State # Master_Host 127.0.0.1 Master_User root -Master_Port MASTER_PORT +Master_Port # Connect_Retry 1 Master_Log_File master-bin.000001 Read_Master_Log_Pos # @@ -427,7 +494,7 @@ Slave_SQL_Running No Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table -Replicate_Ignore_Table +Replicate_Ignore_Table # Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno 1532 @@ -446,8 +513,8 @@ Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No -Last_IO_Errno 0 -Last_IO_Error +Last_IO_Errno # +Last_IO_Error # Last_SQL_Errno 1532 Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 15, test.t11 has type 252 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; @@ -605,7 +672,7 @@ SHOW SLAVE STATUS; Slave_IO_State # Master_Host 127.0.0.1 Master_User root -Master_Port MASTER_PORT +Master_Port # Connect_Retry 1 Master_Log_File master-bin.000001 Read_Master_Log_Pos # @@ -617,7 +684,7 @@ Slave_SQL_Running No Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table -Replicate_Ignore_Table +Replicate_Ignore_Table # Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno 1060 @@ -636,8 +703,8 @@ Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No -Last_IO_Errno 0 -Last_IO_Error +Last_IO_Errno # +Last_IO_Error # Last_SQL_Errno 1060 Last_SQL_Error Error 'Duplicate column name 'c6'' on query. Default database: 'test'. Query: 'ALTER TABLE t15 ADD COLUMN c6 INT AFTER c5' SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; @@ -740,7 +807,7 @@ SHOW SLAVE STATUS; Slave_IO_State # Master_Host 127.0.0.1 Master_User root -Master_Port MASTER_PORT +Master_Port # Connect_Retry 1 Master_Log_File master-bin.000001 Read_Master_Log_Pos # @@ -752,7 +819,7 @@ Slave_SQL_Running No Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table -Replicate_Ignore_Table +Replicate_Ignore_Table # Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno 1532 @@ -771,8 +838,8 @@ Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No -Last_IO_Errno 0 -Last_IO_Error +Last_IO_Errno # +Last_IO_Error # Last_SQL_Errno 1532 Last_SQL_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 8, test.t17 has type 2 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; diff --git a/mysql-test/suite/rpl/r/rpl_row_colSize.result b/mysql-test/suite/rpl/r/rpl_row_colSize.result new file mode 100644 index 00000000000..9cb84cfcd30 --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_row_colSize.result @@ -0,0 +1,754 @@ +stop slave; +drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; +reset master; +reset slave; +drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; +start slave; +DROP TABLE IF EXISTS t1; +**** Testing WL#3228 changes. **** +*** Create "wider" table on slave *** +Checking MYSQL_TYPE_NEWDECIMAL fields +DROP TABLE IF EXISTS t1; +Warnings: +Note 1051 Unknown table 't1' +STOP SLAVE; +RESET SLAVE; +CREATE TABLE t1 (a DECIMAL(5,2)); +CREATE TABLE t1 (a DECIMAL(20, 10)); +RESET MASTER; +INSERT INTO t1 VALUES (901251.90125); +START SLAVE; +SHOW SLAVE STATUS; +Slave_IO_State # +Master_Host 127.0.0.1 +Master_User root +Master_Port # +Connect_Retry 1 +Master_Log_File master-bin.000001 +Read_Master_Log_Pos # +Relay_Log_File # +Relay_Log_Pos # +Relay_Master_Log_File master-bin.000001 +Slave_IO_Running Yes +Slave_SQL_Running No +Replicate_Do_DB +Replicate_Ignore_DB +Replicate_Do_Table +Replicate_Ignore_Table # +Replicate_Wild_Do_Table +Replicate_Wild_Ignore_Table +Last_Errno 1532 +Last_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 10, test.t1 on slave has size 3. Master's column size should be <= the slave's column size. +Skip_Counter 0 +Exec_Master_Log_Pos # +Relay_Log_Space # +Until_Condition None +Until_Log_File +Until_Log_Pos 0 +Master_SSL_Allowed No +Master_SSL_CA_File +Master_SSL_CA_Path +Master_SSL_Cert +Master_SSL_Cipher +Master_SSL_Key +Seconds_Behind_Master # +Master_SSL_Verify_Server_Cert No +Last_IO_Errno # +Last_IO_Error # +Last_SQL_Errno 1532 +Last_SQL_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 10, test.t1 on slave has size 3. Master's column size should be <= the slave's column size. +SELECT COUNT(*) FROM t1; +COUNT(*) +0 +STOP SLAVE; +RESET SLAVE; +RESET MASTER; +START SLAVE; +DROP TABLE IF EXISTS t1; +STOP SLAVE; +RESET SLAVE; +CREATE TABLE t1 (a DECIMAL(27, 9)); +CREATE TABLE t1 (a DECIMAL(27, 18)); +RESET MASTER; +INSERT INTO t1 VALUES (901251.90125); +START SLAVE; +SHOW SLAVE STATUS; +Slave_IO_State # +Master_Host 127.0.0.1 +Master_User root +Master_Port # +Connect_Retry 1 +Master_Log_File master-bin.000001 +Read_Master_Log_Pos # +Relay_Log_File # +Relay_Log_Pos # +Relay_Master_Log_File master-bin.000001 +Slave_IO_Running Yes +Slave_SQL_Running No +Replicate_Do_DB +Replicate_Ignore_DB +Replicate_Do_Table +Replicate_Ignore_Table # +Replicate_Wild_Do_Table +Replicate_Wild_Ignore_Table +Last_Errno 1532 +Last_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 12, test.t1 on slave has size 12. Master's column size should be <= the slave's column size. +Skip_Counter 0 +Exec_Master_Log_Pos # +Relay_Log_Space # +Until_Condition None +Until_Log_File +Until_Log_Pos 0 +Master_SSL_Allowed No +Master_SSL_CA_File +Master_SSL_CA_Path +Master_SSL_Cert +Master_SSL_Cipher +Master_SSL_Key +Seconds_Behind_Master # +Master_SSL_Verify_Server_Cert No +Last_IO_Errno # +Last_IO_Error # +Last_SQL_Errno 1532 +Last_SQL_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 12, test.t1 on slave has size 12. Master's column size should be <= the slave's column size. +SELECT COUNT(*) FROM t1; +COUNT(*) +0 +STOP SLAVE; +RESET SLAVE; +RESET MASTER; +START SLAVE; +DROP TABLE IF EXISTS t1; +STOP SLAVE; +RESET SLAVE; +CREATE TABLE t1 (a NUMERIC(5,2)); +CREATE TABLE t1 (a NUMERIC(20, 10)); +RESET MASTER; +INSERT INTO t1 VALUES (901251.90125); +START SLAVE; +SHOW SLAVE STATUS; +Slave_IO_State # +Master_Host 127.0.0.1 +Master_User root +Master_Port # +Connect_Retry 1 +Master_Log_File master-bin.000001 +Read_Master_Log_Pos # +Relay_Log_File # +Relay_Log_Pos # +Relay_Master_Log_File master-bin.000001 +Slave_IO_Running Yes +Slave_SQL_Running No +Replicate_Do_DB +Replicate_Ignore_DB +Replicate_Do_Table +Replicate_Ignore_Table # +Replicate_Wild_Do_Table +Replicate_Wild_Ignore_Table +Last_Errno 1532 +Last_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 10, test.t1 on slave has size 3. Master's column size should be <= the slave's column size. +Skip_Counter 0 +Exec_Master_Log_Pos # +Relay_Log_Space # +Until_Condition None +Until_Log_File +Until_Log_Pos 0 +Master_SSL_Allowed No +Master_SSL_CA_File +Master_SSL_CA_Path +Master_SSL_Cert +Master_SSL_Cipher +Master_SSL_Key +Seconds_Behind_Master # +Master_SSL_Verify_Server_Cert No +Last_IO_Errno # +Last_IO_Error # +Last_SQL_Errno 1532 +Last_SQL_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 10, test.t1 on slave has size 3. Master's column size should be <= the slave's column size. +SELECT COUNT(*) FROM t1; +COUNT(*) +0 +STOP SLAVE; +RESET SLAVE; +RESET MASTER; +START SLAVE; +Checking MYSQL_TYPE_FLOAT fields +DROP TABLE IF EXISTS t1; +STOP SLAVE; +RESET SLAVE; +CREATE TABLE t1 (a FLOAT(20)); +CREATE TABLE t1 (a FLOAT(47)); +RESET MASTER; +INSERT INTO t1 VALUES (901251.90125); +START SLAVE; +SHOW SLAVE STATUS; +Slave_IO_State # +Master_Host 127.0.0.1 +Master_User root +Master_Port # +Connect_Retry 1 +Master_Log_File master-bin.000001 +Read_Master_Log_Pos # +Relay_Log_File # +Relay_Log_Pos # +Relay_Master_Log_File master-bin.000001 +Slave_IO_Running Yes +Slave_SQL_Running No +Replicate_Do_DB +Replicate_Ignore_DB +Replicate_Do_Table +Replicate_Ignore_Table # +Replicate_Wild_Do_Table +Replicate_Wild_Ignore_Table +Last_Errno 1532 +Last_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 5, test.t1 has type 4 +Skip_Counter 0 +Exec_Master_Log_Pos # +Relay_Log_Space # +Until_Condition None +Until_Log_File +Until_Log_Pos 0 +Master_SSL_Allowed No +Master_SSL_CA_File +Master_SSL_CA_Path +Master_SSL_Cert +Master_SSL_Cipher +Master_SSL_Key +Seconds_Behind_Master # +Master_SSL_Verify_Server_Cert No +Last_IO_Errno # +Last_IO_Error # +Last_SQL_Errno 1532 +Last_SQL_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 5, test.t1 has type 4 +SELECT COUNT(*) FROM t1; +COUNT(*) +0 +STOP SLAVE; +RESET SLAVE; +RESET MASTER; +START SLAVE; +Checking MYSQL_TYPE_BIT fields +DROP TABLE IF EXISTS t1; +STOP SLAVE; +RESET SLAVE; +CREATE TABLE t1 (a BIT(5)); +CREATE TABLE t1 (a BIT(64)); +RESET MASTER; +INSERT INTO t1 VALUES (B'10101'); +START SLAVE; +SHOW SLAVE STATUS; +Slave_IO_State # +Master_Host 127.0.0.1 +Master_User root +Master_Port # +Connect_Retry 1 +Master_Log_File master-bin.000001 +Read_Master_Log_Pos # +Relay_Log_File # +Relay_Log_Pos # +Relay_Master_Log_File master-bin.000001 +Slave_IO_Running Yes +Slave_SQL_Running No +Replicate_Do_DB +Replicate_Ignore_DB +Replicate_Do_Table +Replicate_Ignore_Table # +Replicate_Wild_Do_Table +Replicate_Wild_Ignore_Table +Last_Errno 1532 +Last_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 8, test.t1 on slave has size 1. Master's column size should be <= the slave's column size. +Skip_Counter 0 +Exec_Master_Log_Pos # +Relay_Log_Space # +Until_Condition None +Until_Log_File +Until_Log_Pos 0 +Master_SSL_Allowed No +Master_SSL_CA_File +Master_SSL_CA_Path +Master_SSL_Cert +Master_SSL_Cipher +Master_SSL_Key +Seconds_Behind_Master # +Master_SSL_Verify_Server_Cert No +Last_IO_Errno # +Last_IO_Error # +Last_SQL_Errno 1532 +Last_SQL_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 8, test.t1 on slave has size 1. Master's column size should be <= the slave's column size. +SELECT COUNT(*) FROM t1; +COUNT(*) +0 +STOP SLAVE; +RESET SLAVE; +RESET MASTER; +START SLAVE; +DROP TABLE IF EXISTS t1; +STOP SLAVE; +RESET SLAVE; +CREATE TABLE t1 (a BIT(11)); +CREATE TABLE t1 (a BIT(12)); +RESET MASTER; +INSERT INTO t1 VALUES (B'10101'); +START SLAVE; +SHOW SLAVE STATUS; +Slave_IO_State # +Master_Host 127.0.0.1 +Master_User root +Master_Port # +Connect_Retry 1 +Master_Log_File master-bin.000001 +Read_Master_Log_Pos # +Relay_Log_File # +Relay_Log_Pos # +Relay_Master_Log_File master-bin.000001 +Slave_IO_Running Yes +Slave_SQL_Running No +Replicate_Do_DB +Replicate_Ignore_DB +Replicate_Do_Table +Replicate_Ignore_Table # +Replicate_Wild_Do_Table +Replicate_Wild_Ignore_Table +Last_Errno 1532 +Last_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 2, test.t1 on slave has size 2. Master's column size should be <= the slave's column size. +Skip_Counter 0 +Exec_Master_Log_Pos # +Relay_Log_Space # +Until_Condition None +Until_Log_File +Until_Log_Pos 0 +Master_SSL_Allowed No +Master_SSL_CA_File +Master_SSL_CA_Path +Master_SSL_Cert +Master_SSL_Cipher +Master_SSL_Key +Seconds_Behind_Master # +Master_SSL_Verify_Server_Cert No +Last_IO_Errno # +Last_IO_Error # +Last_SQL_Errno 1532 +Last_SQL_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 2, test.t1 on slave has size 2. Master's column size should be <= the slave's column size. +SELECT COUNT(*) FROM t1; +COUNT(*) +0 +STOP SLAVE; +RESET SLAVE; +RESET MASTER; +START SLAVE; +Checking MYSQL_TYPE_SET fields +DROP TABLE IF EXISTS t1; +STOP SLAVE; +RESET SLAVE; +CREATE TABLE t1 (a SET('4')); +CREATE TABLE t1 (a SET('1','2','3','4','5','6','7','8','9')); +RESET MASTER; +INSERT INTO t1 VALUES ('4'); +START SLAVE; +SHOW SLAVE STATUS; +Slave_IO_State # +Master_Host 127.0.0.1 +Master_User root +Master_Port # +Connect_Retry 1 +Master_Log_File master-bin.000001 +Read_Master_Log_Pos # +Relay_Log_File # +Relay_Log_Pos # +Relay_Master_Log_File master-bin.000001 +Slave_IO_Running Yes +Slave_SQL_Running No +Replicate_Do_DB +Replicate_Ignore_DB +Replicate_Do_Table +Replicate_Ignore_Table # +Replicate_Wild_Do_Table +Replicate_Wild_Ignore_Table +Last_Errno 1532 +Last_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 2, test.t1 on slave has size 1. Master's column size should be <= the slave's column size. +Skip_Counter 0 +Exec_Master_Log_Pos # +Relay_Log_Space # +Until_Condition None +Until_Log_File +Until_Log_Pos 0 +Master_SSL_Allowed No +Master_SSL_CA_File +Master_SSL_CA_Path +Master_SSL_Cert +Master_SSL_Cipher +Master_SSL_Key +Seconds_Behind_Master # +Master_SSL_Verify_Server_Cert No +Last_IO_Errno # +Last_IO_Error # +Last_SQL_Errno 1532 +Last_SQL_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 2, test.t1 on slave has size 1. Master's column size should be <= the slave's column size. +SELECT COUNT(*) FROM t1; +COUNT(*) +0 +STOP SLAVE; +RESET SLAVE; +RESET MASTER; +START SLAVE; +Checking MYSQL_TYPE_STRING fields +DROP TABLE IF EXISTS t1; +STOP SLAVE; +RESET SLAVE; +CREATE TABLE t1 (a CHAR(10)); +CREATE TABLE t1 (a CHAR(20)); +RESET MASTER; +INSERT INTO t1 VALUES ('This is a test.'); +START SLAVE; +SHOW SLAVE STATUS; +Slave_IO_State # +Master_Host 127.0.0.1 +Master_User root +Master_Port # +Connect_Retry 1 +Master_Log_File master-bin.000001 +Read_Master_Log_Pos # +Relay_Log_File # +Relay_Log_Pos # +Relay_Master_Log_File master-bin.000001 +Slave_IO_Running Yes +Slave_SQL_Running No +Replicate_Do_DB +Replicate_Ignore_DB +Replicate_Do_Table +Replicate_Ignore_Table # +Replicate_Wild_Do_Table +Replicate_Wild_Ignore_Table +Last_Errno 1532 +Last_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 20, test.t1 on slave has size 11. Master's column size should be <= the slave's column size. +Skip_Counter 0 +Exec_Master_Log_Pos # +Relay_Log_Space # +Until_Condition None +Until_Log_File +Until_Log_Pos 0 +Master_SSL_Allowed No +Master_SSL_CA_File +Master_SSL_CA_Path +Master_SSL_Cert +Master_SSL_Cipher +Master_SSL_Key +Seconds_Behind_Master # +Master_SSL_Verify_Server_Cert No +Last_IO_Errno # +Last_IO_Error # +Last_SQL_Errno 1532 +Last_SQL_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 20, test.t1 on slave has size 11. Master's column size should be <= the slave's column size. +SELECT COUNT(*) FROM t1; +COUNT(*) +0 +STOP SLAVE; +RESET SLAVE; +RESET MASTER; +START SLAVE; +Checking MYSQL_TYPE_ENUM fields +DROP TABLE IF EXISTS t1; +STOP SLAVE; +RESET SLAVE; +CREATE TABLE t1 (a ENUM('44','54')); +CREATE TABLE t1 (a ENUM( +'01','02','03','04','05','06','07','08','09', +'11','12','13','14','15','16','17','18','19', +'21','22','23','24','25','26','27','28','29', +'31','32','33','34','35','36','37','38','39', +'41','42','43','44','45','46','47','48','49', +'51','52','53','54','55','56','57','58','59', +'61','62','63','64','65','66','67','68','69', +'71','72','73','74','75','76','77','78','79', +'81','82','83','84','85','86','87','88','89', +'91','92','93','94','95','96','97','98','99', +'101','102','103','104','105','106','107','108','109', +'111','112','113','114','115','116','117','118','119', +'121','122','123','124','125','126','127','128','129', +'131','132','133','134','135','136','137','138','139', +'141','142','143','144','145','146','147','148','149', +'151','152','153','154','155','156','157','158','159', +'161','162','163','164','165','166','167','168','169', +'171','172','173','174','175','176','177','178','179', +'181','182','183','184','185','186','187','188','189', +'191','192','193','194','195','196','197','198','199', +'201','202','203','204','205','206','207','208','209', +'211','212','213','214','215','216','217','218','219', +'221','222','223','224','225','226','227','228','229', +'231','232','233','234','235','236','237','238','239', +'241','242','243','244','245','246','247','248','249', +'251','252','253','254','255','256','257','258','259', +'261','262','263','264','265','266','267','268','269', +'271','272','273','274','275','276','277','278','279', +'281','282','283','284','285','286','287','288','289', +'291','292','293','294','295','296','297','298','299' + )); +RESET MASTER; +INSERT INTO t1 VALUES ('44'); +START SLAVE; +SHOW SLAVE STATUS; +Slave_IO_State # +Master_Host 127.0.0.1 +Master_User root +Master_Port # +Connect_Retry 1 +Master_Log_File master-bin.000001 +Read_Master_Log_Pos # +Relay_Log_File # +Relay_Log_Pos # +Relay_Master_Log_File master-bin.000001 +Slave_IO_Running Yes +Slave_SQL_Running No +Replicate_Do_DB +Replicate_Ignore_DB +Replicate_Do_Table +Replicate_Ignore_Table # +Replicate_Wild_Do_Table +Replicate_Wild_Ignore_Table +Last_Errno 1532 +Last_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 2, test.t1 on slave has size 1. Master's column size should be <= the slave's column size. +Skip_Counter 0 +Exec_Master_Log_Pos # +Relay_Log_Space # +Until_Condition None +Until_Log_File +Until_Log_Pos 0 +Master_SSL_Allowed No +Master_SSL_CA_File +Master_SSL_CA_Path +Master_SSL_Cert +Master_SSL_Cipher +Master_SSL_Key +Seconds_Behind_Master # +Master_SSL_Verify_Server_Cert No +Last_IO_Errno # +Last_IO_Error # +Last_SQL_Errno 1532 +Last_SQL_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 2, test.t1 on slave has size 1. Master's column size should be <= the slave's column size. +SELECT COUNT(*) FROM t1; +COUNT(*) +0 +STOP SLAVE; +RESET SLAVE; +RESET MASTER; +START SLAVE; +Checking MYSQL_TYPE_VARCHAR fields +DROP TABLE IF EXISTS t1; +STOP SLAVE; +RESET SLAVE; +CREATE TABLE t1 (a VARCHAR(100)); +CREATE TABLE t1 (a VARCHAR(2000)); +RESET MASTER; +INSERT INTO t1 VALUES ('This is a test.'); +START SLAVE; +SHOW SLAVE STATUS; +Slave_IO_State # +Master_Host 127.0.0.1 +Master_User root +Master_Port # +Connect_Retry 1 +Master_Log_File master-bin.000001 +Read_Master_Log_Pos # +Relay_Log_File # +Relay_Log_Pos # +Relay_Master_Log_File master-bin.000001 +Slave_IO_Running Yes +Slave_SQL_Running No +Replicate_Do_DB +Replicate_Ignore_DB +Replicate_Do_Table +Replicate_Ignore_Table # +Replicate_Wild_Do_Table +Replicate_Wild_Ignore_Table +Last_Errno 1532 +Last_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 2000, test.t1 on slave has size 100. Master's column size should be <= the slave's column size. +Skip_Counter 0 +Exec_Master_Log_Pos # +Relay_Log_Space # +Until_Condition None +Until_Log_File +Until_Log_Pos 0 +Master_SSL_Allowed No +Master_SSL_CA_File +Master_SSL_CA_Path +Master_SSL_Cert +Master_SSL_Cipher +Master_SSL_Key +Seconds_Behind_Master # +Master_SSL_Verify_Server_Cert No +Last_IO_Errno # +Last_IO_Error # +Last_SQL_Errno 1532 +Last_SQL_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 2000, test.t1 on slave has size 100. Master's column size should be <= the slave's column size. +SELECT COUNT(*) FROM t1; +COUNT(*) +0 +STOP SLAVE; +RESET SLAVE; +RESET MASTER; +START SLAVE; +DROP TABLE IF EXISTS t1; +STOP SLAVE; +RESET SLAVE; +CREATE TABLE t1 (a VARCHAR(10)); +CREATE TABLE t1 (a VARCHAR(200)); +RESET MASTER; +INSERT INTO t1 VALUES ('This is a test.'); +START SLAVE; +SHOW SLAVE STATUS; +Slave_IO_State # +Master_Host 127.0.0.1 +Master_User root +Master_Port # +Connect_Retry 1 +Master_Log_File master-bin.000001 +Read_Master_Log_Pos # +Relay_Log_File # +Relay_Log_Pos # +Relay_Master_Log_File master-bin.000001 +Slave_IO_Running Yes +Slave_SQL_Running No +Replicate_Do_DB +Replicate_Ignore_DB +Replicate_Do_Table +Replicate_Ignore_Table # +Replicate_Wild_Do_Table +Replicate_Wild_Ignore_Table +Last_Errno 1532 +Last_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 200, test.t1 on slave has size 10. Master's column size should be <= the slave's column size. +Skip_Counter 0 +Exec_Master_Log_Pos # +Relay_Log_Space # +Until_Condition None +Until_Log_File +Until_Log_Pos 0 +Master_SSL_Allowed No +Master_SSL_CA_File +Master_SSL_CA_Path +Master_SSL_Cert +Master_SSL_Cipher +Master_SSL_Key +Seconds_Behind_Master # +Master_SSL_Verify_Server_Cert No +Last_IO_Errno # +Last_IO_Error # +Last_SQL_Errno 1532 +Last_SQL_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 200, test.t1 on slave has size 10. Master's column size should be <= the slave's column size. +SELECT COUNT(*) FROM t1; +COUNT(*) +0 +STOP SLAVE; +RESET SLAVE; +RESET MASTER; +START SLAVE; +DROP TABLE IF EXISTS t1; +STOP SLAVE; +RESET SLAVE; +CREATE TABLE t1 (a VARCHAR(1000)); +CREATE TABLE t1 (a VARCHAR(2000)); +RESET MASTER; +INSERT INTO t1 VALUES ('This is a test.'); +START SLAVE; +SHOW SLAVE STATUS; +Slave_IO_State # +Master_Host 127.0.0.1 +Master_User root +Master_Port # +Connect_Retry 1 +Master_Log_File master-bin.000001 +Read_Master_Log_Pos # +Relay_Log_File # +Relay_Log_Pos # +Relay_Master_Log_File master-bin.000001 +Slave_IO_Running Yes +Slave_SQL_Running No +Replicate_Do_DB +Replicate_Ignore_DB +Replicate_Do_Table +Replicate_Ignore_Table # +Replicate_Wild_Do_Table +Replicate_Wild_Ignore_Table +Last_Errno 1532 +Last_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 2000, test.t1 on slave has size 1000. Master's column size should be <= the slave's column size. +Skip_Counter 0 +Exec_Master_Log_Pos # +Relay_Log_Space # +Until_Condition None +Until_Log_File +Until_Log_Pos 0 +Master_SSL_Allowed No +Master_SSL_CA_File +Master_SSL_CA_Path +Master_SSL_Cert +Master_SSL_Cipher +Master_SSL_Key +Seconds_Behind_Master # +Master_SSL_Verify_Server_Cert No +Last_IO_Errno # +Last_IO_Error # +Last_SQL_Errno 1532 +Last_SQL_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 2000, test.t1 on slave has size 1000. Master's column size should be <= the slave's column size. +SELECT COUNT(*) FROM t1; +COUNT(*) +0 +STOP SLAVE; +RESET SLAVE; +RESET MASTER; +START SLAVE; +Checking MYSQL_TYPE_BLOB fields +DROP TABLE IF EXISTS t1; +STOP SLAVE; +RESET SLAVE; +CREATE TABLE t1 (a TINYBLOB); +CREATE TABLE t1 (a LONGBLOB); +RESET MASTER; +INSERT INTO t1 VALUES ('This is a test.'); +START SLAVE; +SHOW SLAVE STATUS; +Slave_IO_State # +Master_Host 127.0.0.1 +Master_User root +Master_Port # +Connect_Retry 1 +Master_Log_File master-bin.000001 +Read_Master_Log_Pos # +Relay_Log_File # +Relay_Log_Pos # +Relay_Master_Log_File master-bin.000001 +Slave_IO_Running Yes +Slave_SQL_Running No +Replicate_Do_DB +Replicate_Ignore_DB +Replicate_Do_Table +Replicate_Ignore_Table # +Replicate_Wild_Do_Table +Replicate_Wild_Ignore_Table +Last_Errno 1532 +Last_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 4, test.t1 on slave has size 1. Master's column size should be <= the slave's column size. +Skip_Counter 0 +Exec_Master_Log_Pos # +Relay_Log_Space # +Until_Condition None +Until_Log_File +Until_Log_Pos 0 +Master_SSL_Allowed No +Master_SSL_CA_File +Master_SSL_CA_Path +Master_SSL_Cert +Master_SSL_Cipher +Master_SSL_Key +Seconds_Behind_Master # +Master_SSL_Verify_Server_Cert No +Last_IO_Errno # +Last_IO_Error # +Last_SQL_Errno 1532 +Last_SQL_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 4, test.t1 on slave has size 1. Master's column size should be <= the slave's column size. +SELECT COUNT(*) FROM t1; +COUNT(*) +0 +STOP SLAVE; +RESET SLAVE; +RESET MASTER; +START SLAVE; +*** Cleanup *** +DROP TABLE IF EXISTS t1; diff --git a/mysql-test/suite/rpl/t/rpl_row_colSize.test b/mysql-test/suite/rpl/t/rpl_row_colSize.test new file mode 100644 index 00000000000..078e6886ec7 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_row_colSize.test @@ -0,0 +1,168 @@ +################################################################## +# rpl_colSize # +# # +# This test is designed to test the changes included in WL#3228. # +# The changes include the ability to replicate with the master # +# having columns that are smaller (shorter) than the slave. # +################################################################## + +-- source include/master-slave.inc +-- source include/have_binlog_format_row.inc + +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings + + +--echo **** Testing WL#3228 changes. **** +--echo *** Create "wider" table on slave *** +sync_slave_with_master; + +# +# Check each column type to verify error 1532 fires (BUG#22086) +# This check covers only those fields that require additional +# metadata from the master to be replicated to the slave. These +# field types are: +# MYSQL_TYPE_NEWDECIMAL: +# MYSQL_TYPE_FLOAT: +# MYSQL_TYPE_BIT: +# MYSQL_TYPE_SET: +# MYSQL_TYPE_STRING: +# MYSQL_TYPE_ENUM: +# MYSQL_TYPE_VARCHAR: +# MYSQL_TYPE_BLOB: + +# +# Test: Checking MYSQL_TYPE_NEWDECIMAL fields +# +--echo Checking MYSQL_TYPE_NEWDECIMAL fields +let $test_table_master = CREATE TABLE t1 (a DECIMAL(20, 10)); +let $test_table_slave = CREATE TABLE t1 (a DECIMAL(5,2)); +let $test_insert = INSERT INTO t1 VALUES (901251.90125); +source include/test_fieldsize.inc; + +let $test_table_master = CREATE TABLE t1 (a DECIMAL(27, 18)); +let $test_table_slave = CREATE TABLE t1 (a DECIMAL(27, 9)); +let $test_insert = INSERT INTO t1 VALUES (901251.90125); +source include/test_fieldsize.inc; + +let $test_table_master = CREATE TABLE t1 (a NUMERIC(20, 10)); +let $test_table_slave = CREATE TABLE t1 (a NUMERIC(5,2)); +let $test_insert = INSERT INTO t1 VALUES (901251.90125); +source include/test_fieldsize.inc; + +# +# Test: Checking MYSQL_TYPE_FLOAT fields +# +--echo Checking MYSQL_TYPE_FLOAT fields +let $test_table_master = CREATE TABLE t1 (a FLOAT(47)); +let $test_table_slave = CREATE TABLE t1 (a FLOAT(20)); +let $test_insert = INSERT INTO t1 VALUES (901251.90125); +source include/test_fieldsize.inc; + +# +# Test: Checking MYSQL_TYPE_BIT fields +# +--echo Checking MYSQL_TYPE_BIT fields +let $test_table_master = CREATE TABLE t1 (a BIT(64)); +let $test_table_slave = CREATE TABLE t1 (a BIT(5)); +let $test_insert = INSERT INTO t1 VALUES (B'10101'); +source include/test_fieldsize.inc; + +let $test_table_master = CREATE TABLE t1 (a BIT(12)); +let $test_table_slave = CREATE TABLE t1 (a BIT(11)); +let $test_insert = INSERT INTO t1 VALUES (B'10101'); +source include/test_fieldsize.inc; + +# +# Test: Checking MYSQL_TYPE_SET fields +# +--echo Checking MYSQL_TYPE_SET fields +let $test_table_master = CREATE TABLE t1 (a SET('1','2','3','4','5','6','7','8','9')); +let $test_table_slave = CREATE TABLE t1 (a SET('4')); +let $test_insert = INSERT INTO t1 VALUES ('4'); +source include/test_fieldsize.inc; + +# +# Test: Checking MYSQL_TYPE_STRING fields +# +--echo Checking MYSQL_TYPE_STRING fields +let $test_table_master = CREATE TABLE t1 (a CHAR(20)); +let $test_table_slave = CREATE TABLE t1 (a CHAR(10)); +let $test_insert = INSERT INTO t1 VALUES ('This is a test.'); +source include/test_fieldsize.inc; + +# +# Test: Checking MYSQL_TYPE_ENUM fields +# +--echo Checking MYSQL_TYPE_ENUM fields +let $test_table_master = CREATE TABLE t1 (a ENUM( + '01','02','03','04','05','06','07','08','09', + '11','12','13','14','15','16','17','18','19', + '21','22','23','24','25','26','27','28','29', + '31','32','33','34','35','36','37','38','39', + '41','42','43','44','45','46','47','48','49', + '51','52','53','54','55','56','57','58','59', + '61','62','63','64','65','66','67','68','69', + '71','72','73','74','75','76','77','78','79', + '81','82','83','84','85','86','87','88','89', + '91','92','93','94','95','96','97','98','99', + '101','102','103','104','105','106','107','108','109', + '111','112','113','114','115','116','117','118','119', + '121','122','123','124','125','126','127','128','129', + '131','132','133','134','135','136','137','138','139', + '141','142','143','144','145','146','147','148','149', + '151','152','153','154','155','156','157','158','159', + '161','162','163','164','165','166','167','168','169', + '171','172','173','174','175','176','177','178','179', + '181','182','183','184','185','186','187','188','189', + '191','192','193','194','195','196','197','198','199', + '201','202','203','204','205','206','207','208','209', + '211','212','213','214','215','216','217','218','219', + '221','222','223','224','225','226','227','228','229', + '231','232','233','234','235','236','237','238','239', + '241','242','243','244','245','246','247','248','249', + '251','252','253','254','255','256','257','258','259', + '261','262','263','264','265','266','267','268','269', + '271','272','273','274','275','276','277','278','279', + '281','282','283','284','285','286','287','288','289', + '291','292','293','294','295','296','297','298','299' + )); +let $test_table_slave = CREATE TABLE t1 (a ENUM('44','54')); +let $test_insert = INSERT INTO t1 VALUES ('44'); +source include/test_fieldsize.inc; + +# +# Test: Checking MYSQL_TYPE_VARCHAR fields +# +--echo Checking MYSQL_TYPE_VARCHAR fields +let $test_table_master = CREATE TABLE t1 (a VARCHAR(2000)); +let $test_table_slave = CREATE TABLE t1 (a VARCHAR(100)); +let $test_insert = INSERT INTO t1 VALUES ('This is a test.'); +source include/test_fieldsize.inc; + +let $test_table_master = CREATE TABLE t1 (a VARCHAR(200)); +let $test_table_slave = CREATE TABLE t1 (a VARCHAR(10)); +let $test_insert = INSERT INTO t1 VALUES ('This is a test.'); +source include/test_fieldsize.inc; + +let $test_table_master = CREATE TABLE t1 (a VARCHAR(2000)); +let $test_table_slave = CREATE TABLE t1 (a VARCHAR(1000)); +let $test_insert = INSERT INTO t1 VALUES ('This is a test.'); +source include/test_fieldsize.inc; + +# +# Test: Checking MYSQL_TYPE_BLOB fields +# +--echo Checking MYSQL_TYPE_BLOB fields +let $test_table_master = CREATE TABLE t1 (a LONGBLOB); +let $test_table_slave = CREATE TABLE t1 (a TINYBLOB); +let $test_insert = INSERT INTO t1 VALUES ('This is a test.'); +source include/test_fieldsize.inc; + +--echo *** Cleanup *** +connection master; +DROP TABLE IF EXISTS t1; +sync_slave_with_master; +# END 5.1 Test Case + diff --git a/mysql-test/suite/rpl_ndb/r/rpl_ndb_extraCol.result b/mysql-test/suite/rpl_ndb/r/rpl_ndb_extraCol.result index edb4dfbf392..ce1e5d69898 100644 --- a/mysql-test/suite/rpl_ndb/r/rpl_ndb_extraCol.result +++ b/mysql-test/suite/rpl_ndb/r/rpl_ndb_extraCol.result @@ -33,6 +33,73 @@ a b c d e 3 4 QA NULL NULL *** Drop t1 *** DROP TABLE t1; +*** Create t2 on slave *** +STOP SLAVE; +RESET SLAVE; +CREATE TABLE t2 (a INT, b INT PRIMARY KEY, c CHAR(5), +d FLOAT DEFAULT '2.00', +e CHAR(5) DEFAULT 'TEST2') +ENGINE='NDB'; +*** Create t2 on Master *** +CREATE TABLE t2 (a INT PRIMARY KEY, b INT, c CHAR(10) +) ENGINE='NDB'; +RESET MASTER; +*** Master Data Insert *** +INSERT INTO t2 () VALUES(1,2,'Kyle, TEX'),(2,1,'JOE AUSTIN'),(3,4,'QA TESTING'); +SELECT * FROM t2 ORDER BY a; +a b c +1 2 Kyle, TEX +2 1 JOE AUSTIN +3 4 QA TESTING +*** Start Slave *** +START SLAVE; +SHOW SLAVE STATUS; +Slave_IO_State # +Master_Host 127.0.0.1 +Master_User root +Master_Port # +Connect_Retry 1 +Master_Log_File master-bin.000001 +Read_Master_Log_Pos # +Relay_Log_File # +Relay_Log_Pos # +Relay_Master_Log_File master-bin.000001 +Slave_IO_Running Yes +Slave_SQL_Running No +Replicate_Do_DB +Replicate_Ignore_DB +Replicate_Do_Table +Replicate_Ignore_Table # +Replicate_Wild_Do_Table +Replicate_Wild_Ignore_Table +Last_Errno 1532 +Last_Error Table definition on master and slave does not match: Column 2 size mismatch - master has size 10, test.t2 on slave has size 6. Master's column size should be <= the slave's column size. +Skip_Counter 0 +Exec_Master_Log_Pos # +Relay_Log_Space # +Until_Condition None +Until_Log_File +Until_Log_Pos 0 +Master_SSL_Allowed No +Master_SSL_CA_File +Master_SSL_CA_Path +Master_SSL_Cert +Master_SSL_Cipher +Master_SSL_Key +Seconds_Behind_Master # +Master_SSL_Verify_Server_Cert No +Last_IO_Errno # +Last_IO_Error # +Last_SQL_Errno 1532 +Last_SQL_Error Table definition on master and slave does not match: Column 2 size mismatch - master has size 10, test.t2 on slave has size 6. Master's column size should be <= the slave's column size. +STOP SLAVE; +RESET SLAVE; +SELECT * FROM t2 ORDER BY a; +a b c d e +RESET MASTER; +START SLAVE; +*** Drop t2 *** +DROP TABLE t2; *** Create t3 on slave *** STOP SLAVE; RESET SLAVE; @@ -57,7 +124,7 @@ SHOW SLAVE STATUS; Slave_IO_State # Master_Host 127.0.0.1 Master_User root -Master_Port MASTER_PORT +Master_Port # Connect_Retry 1 Master_Log_File master-bin.000001 Read_Master_Log_Pos # @@ -69,7 +136,7 @@ Slave_SQL_Running No Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table -Replicate_Ignore_Table +Replicate_Ignore_Table # Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno 1532 @@ -88,8 +155,8 @@ Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No -Last_IO_Errno 0 -Last_IO_Error +Last_IO_Errno # +Last_IO_Error # Last_SQL_Errno 1532 Last_SQL_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 252, test.t3 has type 3 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; @@ -119,7 +186,7 @@ SHOW SLAVE STATUS; Slave_IO_State # Master_Host 127.0.0.1 Master_User root -Master_Port MASTER_PORT +Master_Port # Connect_Retry 1 Master_Log_File master-bin.000001 Read_Master_Log_Pos # @@ -131,7 +198,7 @@ Slave_SQL_Running No Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table -Replicate_Ignore_Table +Replicate_Ignore_Table # Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno 1532 @@ -150,8 +217,8 @@ Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No -Last_IO_Errno 0 -Last_IO_Error +Last_IO_Errno # +Last_IO_Error # Last_SQL_Errno 1532 Last_SQL_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 246, test.t4 has type 3 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; @@ -181,7 +248,7 @@ SHOW SLAVE STATUS; Slave_IO_State # Master_Host 127.0.0.1 Master_User root -Master_Port MASTER_PORT +Master_Port # Connect_Retry 1 Master_Log_File master-bin.000001 Read_Master_Log_Pos # @@ -193,7 +260,7 @@ Slave_SQL_Running No Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table -Replicate_Ignore_Table +Replicate_Ignore_Table # Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno 1532 @@ -212,8 +279,8 @@ Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No -Last_IO_Errno 0 -Last_IO_Error +Last_IO_Errno # +Last_IO_Error # Last_SQL_Errno 1532 Last_SQL_Error Table definition on master and slave does not match: Column 5 type mismatch - received type 4, test.t5 has type 246 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; @@ -242,7 +309,7 @@ SHOW SLAVE STATUS; Slave_IO_State # Master_Host 127.0.0.1 Master_User root -Master_Port MASTER_PORT +Master_Port # Connect_Retry 1 Master_Log_File master-bin.000001 Read_Master_Log_Pos # @@ -254,7 +321,7 @@ Slave_SQL_Running No Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table -Replicate_Ignore_Table +Replicate_Ignore_Table # Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno 1532 @@ -273,8 +340,8 @@ Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No -Last_IO_Errno 0 -Last_IO_Error +Last_IO_Errno # +Last_IO_Error # Last_SQL_Errno 1532 Last_SQL_Error Table definition on master and slave does not match: Column 3 type mismatch - received type 16, test.t6 has type 3 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=3; @@ -354,7 +421,7 @@ SHOW SLAVE STATUS; Slave_IO_State # Master_Host 127.0.0.1 Master_User root -Master_Port MASTER_PORT +Master_Port # Connect_Retry 1 Master_Log_File master-bin.000001 Read_Master_Log_Pos # @@ -366,7 +433,7 @@ Slave_SQL_Running No Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table -Replicate_Ignore_Table +Replicate_Ignore_Table # Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno 1532 @@ -385,8 +452,8 @@ Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No -Last_IO_Errno 0 -Last_IO_Error +Last_IO_Errno # +Last_IO_Error # Last_SQL_Errno 1532 Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 254, test.t10 has type 5 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; @@ -415,7 +482,7 @@ SHOW SLAVE STATUS; Slave_IO_State # Master_Host 127.0.0.1 Master_User root -Master_Port MASTER_PORT +Master_Port # Connect_Retry 1 Master_Log_File master-bin.000001 Read_Master_Log_Pos # @@ -427,7 +494,7 @@ Slave_SQL_Running No Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table -Replicate_Ignore_Table +Replicate_Ignore_Table # Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno 1532 @@ -446,8 +513,8 @@ Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No -Last_IO_Errno 0 -Last_IO_Error +Last_IO_Errno # +Last_IO_Error # Last_SQL_Errno 1532 Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 15, test.t11 has type 252 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; @@ -605,7 +672,7 @@ SHOW SLAVE STATUS; Slave_IO_State # Master_Host 127.0.0.1 Master_User root -Master_Port MASTER_PORT +Master_Port # Connect_Retry 1 Master_Log_File master-bin.000001 Read_Master_Log_Pos # @@ -617,7 +684,7 @@ Slave_SQL_Running No Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table -Replicate_Ignore_Table +Replicate_Ignore_Table # Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno 1060 @@ -636,8 +703,8 @@ Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No -Last_IO_Errno 0 -Last_IO_Error +Last_IO_Errno # +Last_IO_Error # Last_SQL_Errno 1060 Last_SQL_Error Error 'Duplicate column name 'c6'' on query. Default database: 'test'. Query: 'ALTER TABLE t15 ADD COLUMN c6 INT AFTER c5' SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; @@ -741,7 +808,7 @@ SHOW SLAVE STATUS; Slave_IO_State # Master_Host 127.0.0.1 Master_User root -Master_Port MASTER_PORT +Master_Port # Connect_Retry 1 Master_Log_File master-bin.000001 Read_Master_Log_Pos # @@ -753,7 +820,7 @@ Slave_SQL_Running No Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table -Replicate_Ignore_Table +Replicate_Ignore_Table # Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno 1532 @@ -772,8 +839,8 @@ Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No -Last_IO_Errno 0 -Last_IO_Error +Last_IO_Errno # +Last_IO_Error # Last_SQL_Errno 1532 Last_SQL_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 8, test.t17 has type 2 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; diff --git a/sql/field.cc b/sql/field.cc index 49433deca74..af9624e9a43 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -1360,6 +1360,27 @@ bool Field::send_binary(Protocol *protocol) } +/** + Check to see if field size is compatible with destination. + + This method is used in row-based replication to verify that the slave's + field size is less than or equal to the master's field size. The + encoded field metadata (from the master or source) is decoded and compared + to the size of this field (the slave or destination). + + @param field_metadata Encoded size in field metadata + + @retval 0 if this field's size is < the source field's size + @retval 1 if this field's size is >= the source field's size +*/ +int Field::compatible_field_size(uint field_metadata) +{ + uint const source_size= pack_length_from_metadata(field_metadata); + uint const destination_size= row_pack_length(); + return (source_size <= destination_size); +} + + int Field::store(const char *to, uint length, CHARSET_INFO *cs, enum_check_fields check_level) { @@ -2690,6 +2711,76 @@ void Field_new_decimal::sql_type(String &str) const } +/** + Save the field metadata for new decimal fields. + + Saves the precision in the first byte and decimals() in the second + byte of the field metadata array at index of *metadata_ptr and + *(metadata_ptr + 1). + + @param metadata_ptr First byte of field metadata + + @returns number of bytes written to metadata_ptr +*/ +int Field_new_decimal::do_save_field_metadata(uchar *metadata_ptr) +{ + *metadata_ptr= precision; + *(metadata_ptr + 1)= decimals(); + return 2; +} + + +/** + Returns the number of bytes field uses in row-based replication + row packed size. + + This method is used in row-based replication to determine the number + of bytes that the field consumes in the row record format. This is + used to skip fields in the master that do not exist on the slave. + + @param field_metadata Encoded size in field metadata + + @returns The size of the field based on the field metadata. +*/ +uint Field_new_decimal::pack_length_from_metadata(uint field_metadata) +{ + uint const source_precision= (field_metadata >> 8U) & 0x00ff; + uint const source_decimal= field_metadata & 0x00ff; + uint const source_size= my_decimal_get_binary_size(source_precision, + source_decimal); + return (source_size); +} + + +/** + Check to see if field size is compatible with destination. + + This method is used in row-based replication to verify that the slave's + field size is less than or equal to the master's field size. The + encoded field metadata (from the master or source) is decoded and compared + to the size of this field (the slave or destination). + + @param field_metadata Encoded size in field metadata + + @retval 0 if this field's size is < the source field's size + @retval 1 if this field's size is >= the source field's size +*/ +int Field_new_decimal::compatible_field_size(uint field_metadata) +{ + int compatible= 0; + uint const source_precision= (field_metadata >> 8U) & 0x00ff; + uint const source_decimal= field_metadata & 0x00ff; + uint const source_size= my_decimal_get_binary_size(source_precision, + source_decimal); + uint const destination_size= row_pack_length(); + compatible= (source_size <= destination_size); + if (compatible) + compatible= (source_precision <= precision) && + (source_decimal <= decimals()); + return (compatible); +} + + uint Field_new_decimal::is_equal(Create_field *new_field) { return ((new_field->sql_type == real_type()) && @@ -2724,7 +2815,9 @@ const uchar *Field_new_decimal::unpack(uchar* to, uint from_pack_len= my_decimal_get_binary_size(from_precision, from_decimal); uint len= (param_data && (from_pack_len < length)) ? from_pack_len : length; - if (from_pack_len && (from_pack_len < length)) + if ((from_pack_len && (from_pack_len < length)) || + (from_precision < precision) || + (from_decimal < decimals())) { /* If the master's data is smaller than the slave, we need to convert @@ -4087,6 +4180,22 @@ bool Field_float::send_binary(Protocol *protocol) } +/** + Save the field metadata for float fields. + + Saves the pack length in the first byte. + + @param metadata_ptr First byte of field metadata + + @returns number of bytes written to metadata_ptr +*/ +int Field_float::do_save_field_metadata(uchar *metadata_ptr) +{ + *metadata_ptr= pack_length(); + return 1; +} + + void Field_float::sql_type(String &res) const { if (dec == NOT_FIXED_DEC) @@ -4404,6 +4513,23 @@ void Field_double::sort_string(uchar *to,uint length __attribute__((unused))) } +/** + Save the field metadata for double fields. + + Saves the pack length in the first byte of the field metadata array + at index of *metadata_ptr. + + @param metadata_ptr First byte of field metadata + + @returns number of bytes written to metadata_ptr +*/ +int Field_double::do_save_field_metadata(uchar *metadata_ptr) +{ + *metadata_ptr= pack_length(); + return 1; +} + + void Field_double::sql_type(String &res) const { CHARSET_INFO *cs=res.charset(); @@ -6445,6 +6571,25 @@ const uchar *Field_string::unpack(uchar *to, const uchar *from) } +/** + Save the field metadata for string fields. + + Saves the real type in the first byte and the field length in the + second byte of the field metadata array at index of *metadata_ptr and + *(metadata_ptr + 1). + + @param metadata_ptr First byte of field metadata + + @returns number of bytes written to metadata_ptr +*/ +int Field_string::do_save_field_metadata(uchar *metadata_ptr) +{ + *metadata_ptr= real_type(); + *(metadata_ptr + 1)= field_length; + return 2; +} + + /* Compare two packed keys @@ -6597,6 +6742,24 @@ Field *Field_string::new_field(MEM_ROOT *root, struct st_table *new_table, const uint Field_varstring::MAX_SIZE= UINT_MAX16; +/** + Save the field metadata for varstring fields. + + Saves the field length in the first byte. Note: may consume + 2 bytes. Caller must ensure second byte is contiguous with + first byte (e.g. array index 0,1). + + @param metadata_ptr First byte of field metadata + + @returns number of bytes written to metadata_ptr +*/ +int Field_varstring::do_save_field_metadata(uchar *metadata_ptr) +{ + char *ptr= (char *)metadata_ptr; + int2store(ptr, field_length); + return 2; +} + int Field_varstring::store(const char *from,uint length,CHARSET_INFO *cs) { ASSERT_COLUMN_MARKED_FOR_WRITE; @@ -7560,6 +7723,23 @@ int Field_blob::key_cmp(const uchar *a,const uchar *b) } +/** + Save the field metadata for blob fields. + + Saves the pack length in the first byte of the field metadata array + at index of *metadata_ptr. + + @param metadata_ptr First byte of field metadata + + @returns number of bytes written to metadata_ptr +*/ +int Field_blob::do_save_field_metadata(uchar *metadata_ptr) +{ + *metadata_ptr= pack_length_no_ptr(); + return 1; +} + + uint32 Field_blob::sort_length() const { return (uint32) (current_thd->variables.max_sort_length + @@ -8145,6 +8325,25 @@ longlong Field_enum::val_int(void) } +/** + Save the field metadata for enum fields. + + Saves the real type in the first byte and the pack length in the + second byte of the field metadata array at index of *metadata_ptr and + *(metadata_ptr + 1). + + @param metadata_ptr First byte of field metadata + + @returns number of bytes written to metadata_ptr +*/ +int Field_enum::do_save_field_metadata(uchar *metadata_ptr) +{ + *metadata_ptr= real_type(); + *(metadata_ptr + 1)= pack_length(); + return 2; +} + + String *Field_enum::val_str(String *val_buffer __attribute__((unused)), String *val_ptr) { @@ -8681,6 +8880,77 @@ uint Field_bit::get_key_image(uchar *buff, uint length, imagetype type_arg) } +/** + Save the field metadata for bit fields. + + Saves the bit length in the first byte and bytes in record in the + second byte of the field metadata array at index of *metadata_ptr and + *(metadata_ptr + 1). + + @param metadata_ptr First byte of field metadata + + @returns number of bytes written to metadata_ptr +*/ +int Field_bit::do_save_field_metadata(uchar *metadata_ptr) +{ + *metadata_ptr= bit_len; + *(metadata_ptr + 1)= bytes_in_rec; + return 2; +} + + +/** + Returns the number of bytes field uses in row-based replication + row packed size. + + This method is used in row-based replication to determine the number + of bytes that the field consumes in the row record format. This is + used to skip fields in the master that do not exist on the slave. + + @param field_metadata Encoded size in field metadata + + @returns The size of the field based on the field metadata. +*/ +uint Field_bit::pack_length_from_metadata(uint field_metadata) +{ + uint const from_len= (field_metadata >> 8U) & 0x00ff; + uint const from_bit_len= field_metadata & 0x00ff; + uint const source_size= from_len + ((from_bit_len > 0) ? 1 : 0); + return (source_size); +} + + +/** + Check to see if field size is compatible with destination. + + This method is used in row-based replication to verify that the slave's + field size is less than or equal to the master's field size. The + encoded field metadata (from the master or source) is decoded and compared + to the size of this field (the slave or destination). + + @param field_metadata Encoded size in field metadata + + @retval 0 if this field's size is < the source field's size + @retval 1 if this field's size is >= the source field's size +*/ +int Field_bit::compatible_field_size(uint field_metadata) +{ + int compatible= 0; + uint const source_size= pack_length_from_metadata(field_metadata); + uint const destination_size= row_pack_length(); + uint const from_bit_len= field_metadata & 0x00ff; + uint const from_len= (field_metadata >> 8U) & 0x00ff; + if ((bit_len == 0) || (from_bit_len == 0)) + compatible= (source_size <= destination_size); + else if (from_bit_len > bit_len) + compatible= (from_len < bytes_in_rec); + else + compatible= ((from_bit_len <= bit_len) && (from_len <= bytes_in_rec)); + return (compatible); +} + + + void Field_bit::sql_type(String &res) const { CHARSET_INFO *cs= res.charset(); diff --git a/sql/field.h b/sql/field.h index c1130d53569..b1899874d83 100644 --- a/sql/field.h +++ b/sql/field.h @@ -151,6 +151,24 @@ public: table, which is located on disk). */ virtual uint32 pack_length_in_rec() const { return pack_length(); } + virtual int compatible_field_size(uint field_metadata); + virtual uint pack_length_from_metadata(uint field_metadata) + { return field_metadata; } + /* + This method is used to return the size of the data in a row-based + replication row record. The default implementation of returning 0 is + designed to allow fields that do not use metadata to return TRUE (1) + from compatible_field_size() which uses this function in the comparison. + The default value for field metadata for fields that do not have + metadata is 0. Thus, 0 == 0 means the fields are compatible in size. + + Note: While most classes that override this method return pack_length(), + the classes Field_string, Field_varstring, and Field_blob return + field_length + 1, field_length, and pack_length_no_ptr() respectfully. + */ + virtual uint row_pack_length() { return 0; } + virtual int save_field_metadata(uchar *first_byte) + { return do_save_field_metadata(first_byte); } /* data_length() return the "real size" of the data in memory. @@ -463,6 +481,19 @@ private: overridden by subclasses. */ virtual size_t do_last_null_byte() const; + +/** + Retrieve the field metadata for fields. + + This default implementation returns 0 and saves 0 in the metadata_ptr + value. + + @param metadata_ptr First byte of field metadata + + @returns 0 no bytes written. +*/ + virtual int do_save_field_metadata(uchar *metadata_ptr) + { return 0; } }; @@ -589,6 +620,8 @@ public: /* New decimal/numeric field which use fixed point arithmetic */ class Field_new_decimal :public Field_num { +private: + int do_save_field_metadata(uchar *first_byte); public: /* The maximum number of decimal digits can be stored */ uint precision; @@ -628,6 +661,9 @@ public: uint32 max_display_length() { return field_length; } uint size_of() const { return sizeof(*this); } uint32 pack_length() const { return (uint32) bin_size; } + uint pack_length_from_metadata(uint field_metadata); + uint row_pack_length() { return pack_length(); } + int compatible_field_size(uint field_metadata); uint is_equal(Create_field *new_field); virtual const uchar *unpack(uchar* to, const uchar *from, uint param_data); }; @@ -834,7 +870,10 @@ public: int cmp(const uchar *,const uchar *); void sort_string(uchar *buff,uint length); uint32 pack_length() const { return sizeof(float); } + uint row_pack_length() { return pack_length(); } void sql_type(String &str) const; +private: + int do_save_field_metadata(uchar *first_byte); }; @@ -871,7 +910,10 @@ public: int cmp(const uchar *,const uchar *); void sort_string(uchar *buff,uint length); uint32 pack_length() const { return sizeof(double); } + uint row_pack_length() { return pack_length(); } void sql_type(String &str) const; +private: + int do_save_field_metadata(uchar *first_byte); }; @@ -1168,6 +1210,9 @@ public: uchar *pack(uchar *to, const uchar *from, uint max_length=~(uint) 0); virtual const uchar *unpack(uchar* to, const uchar *from, uint param_data); const uchar *unpack(uchar* to, const uchar *from); + uint pack_length_from_metadata(uint field_metadata) + { return (field_metadata & 0x00ff); } + uint row_pack_length() { return (field_length + 1); } int pack_cmp(const uchar *a,const uchar *b,uint key_length, my_bool insert_or_update); int pack_cmp(const uchar *b,uint key_length,my_bool insert_or_update); @@ -1179,6 +1224,8 @@ public: { return charset() == &my_charset_bin ? FALSE : TRUE; } Field *new_field(MEM_ROOT *root, struct st_table *new_table, bool keep_type); virtual uint get_key_image(uchar *buff,uint length, imagetype type); +private: + int do_save_field_metadata(uchar *first_byte); }; @@ -1214,6 +1261,7 @@ public: enum_field_types type() const { return MYSQL_TYPE_VARCHAR; } enum ha_base_keytype key_type() const; + uint row_pack_length() { return field_length; } bool zero_pack() const { return 0; } int reset(void) { bzero(ptr,field_length+length_bytes); return 0; } uint32 pack_length() const { return (uint32) field_length+length_bytes; } @@ -1265,6 +1313,8 @@ public: uint new_null_bit); uint is_equal(Create_field *new_field); void hash(ulong *nr, ulong *nr2); +private: + int do_save_field_metadata(uchar *first_byte); }; @@ -1330,10 +1380,11 @@ public: This is used to determine the size of the actual data in the row buffer. - @retval The length of the raw data itself without the pointer. + @returns The length of the raw data itself without the pointer. */ uint32 pack_length_no_ptr() const { return (uint32) (packlength); } + uint row_pack_length() { return pack_length_no_ptr(); } uint32 sort_length() const; inline uint32 max_data_length() const { @@ -1356,7 +1407,7 @@ public: This is used to determine the size of the data plus the packed length portion in the row data. - @retval The length in the row plus the size of the data. + @returns The length in the row plus the size of the data. */ uint32 get_packed_size(const uchar *ptr) {return packlength + get_length((const uchar *)ptr);} @@ -1424,6 +1475,8 @@ public: { return charset() == &my_charset_bin ? FALSE : TRUE; } uint32 max_display_length(); uint is_equal(Create_field *new_field); +private: + int do_save_field_metadata(uchar *first_byte); }; @@ -1493,12 +1546,17 @@ public: void sql_type(String &str) const; uint size_of() const { return sizeof(*this); } enum_field_types real_type() const { return MYSQL_TYPE_ENUM; } + uint pack_length_from_metadata(uint field_metadata) + { return (field_metadata & 0x00ff); } + uint row_pack_length() { return pack_length(); } virtual bool zero_pack() const { return 0; } bool optimize_range(uint idx, uint part) { return 0; } bool eq_def(Field *field); bool has_charset(void) const { return TRUE; } /* enum and set are sorted as integers */ CHARSET_INFO *sort_charset(void) const { return &my_charset_bin; } +private: + int do_save_field_metadata(uchar *first_byte); }; @@ -1519,6 +1577,7 @@ public: int store(const char *to,uint length,CHARSET_INFO *charset); int store(double nr) { return Field_set::store((longlong) nr, FALSE); } int store(longlong nr, bool unsigned_val); + virtual bool zero_pack() const { return 1; } String *val_str(String*,String *); void sql_type(String &str) const; @@ -1582,6 +1641,10 @@ public: { get_key_image(buff, length, itRAW); } uint32 pack_length() const { return (uint32) (field_length + 7) / 8; } uint32 pack_length_in_rec() const { return bytes_in_rec; } + uint pack_length_from_metadata(uint field_metadata); + uint row_pack_length() + { return (bytes_in_rec + ((bit_len > 0) ? 1 : 0)); } + int compatible_field_size(uint field_metadata); void sql_type(String &str) const; uchar *pack(uchar *to, const uchar *from, uint max_length=~(uint) 0); virtual const uchar *unpack(uchar *to, const uchar *from, uint param_data); @@ -1612,6 +1675,7 @@ public: private: virtual size_t do_last_null_byte() const; + int do_save_field_metadata(uchar *first_byte); }; diff --git a/sql/log_event.cc b/sql/log_event.cc index 6f63d8bf718..aa474335d89 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -6382,64 +6382,19 @@ void Rows_log_event::print_helper(FILE *file, Table_map_log_event member functions and support functions **************************************************************************/ -/** - * Calculate field metadata size based on the real_type of the field. - * - * @returns int Size of field metadata. - */ -#if !defined(MYSQL_CLIENT) -const int Table_map_log_event::calc_field_metadata_size() -{ - DBUG_ENTER("Table_map_log_event::calc_field_metadata_size"); - int size= 0; - for (unsigned int i= 0 ; i < m_table->s->fields ; i++) - { - switch (m_table->s->field[i]->real_type()) { - case MYSQL_TYPE_TINY_BLOB: - case MYSQL_TYPE_BLOB: - case MYSQL_TYPE_MEDIUM_BLOB: - case MYSQL_TYPE_LONG_BLOB: - case MYSQL_TYPE_DOUBLE: - case MYSQL_TYPE_FLOAT: - { - size++; // Store one byte here. - break; - } - case MYSQL_TYPE_BIT: - case MYSQL_TYPE_NEWDECIMAL: - case MYSQL_TYPE_ENUM: - case MYSQL_TYPE_STRING: - case MYSQL_TYPE_VARCHAR: - case MYSQL_TYPE_SET: - { - size= size + 2; // Store short int here. - break; - } - default: - break; - } - } - m_field_metadata_size= size; - DBUG_PRINT("info", ("Table_map_log_event: %d bytes in field metadata.", - (int)m_field_metadata_size)); - DBUG_RETURN(m_field_metadata_size); -} -#endif /* !defined(MYSQL_CLIENT) */ - /** @page How replication of field metadata works. When a table map is created, the master first calls - Table_map_log_event::get_field_metadata_size() which calculates how many + Table_map_log_event::save_field_metadata() which calculates how many values will be in the field metadata. Only those fields that require the - extra data are added (see table above). The master then loops through all - of the fields in the table calling the method - Table_map_log_event::get_field_metadata() which returns the values for the - field that will be saved in the metadata and replicated to the slave. Once - all fields have been processed, the table map is written to the binlog - adding the size of the field metadata and the field metadata to the end of - the body of the table map. - + extra data are added. The method also loops through all of the fields in + the table calling the method Field::save_field_metadata() which returns the + values for the field that will be saved in the metadata and replicated to + the slave. Once all fields have been processed, the table map is written to + the binlog adding the size of the field metadata and the field metadata to + the end of the body of the table map. + When a table map is read on the slave, the field metadata is read from the table map and passed to the table_def class constructor which saves the field metadata from the table map into an array based on the type of the @@ -6478,64 +6433,8 @@ int Table_map_log_event::save_field_metadata() DBUG_ENTER("Table_map_log_event::save_field_metadata"); int index= 0; for (unsigned int i= 0 ; i < m_table->s->fields ; i++) - { - switch (m_table->s->field[i]->real_type()) { - case MYSQL_TYPE_NEWDECIMAL: - { - m_field_metadata[index++]= - (uchar)((Field_new_decimal *)m_table->s->field[i])->precision; - m_field_metadata[index++]= - (uchar)((Field_new_decimal *)m_table->s->field[i])->decimals(); - break; - } - case MYSQL_TYPE_TINY_BLOB: - case MYSQL_TYPE_BLOB: - case MYSQL_TYPE_MEDIUM_BLOB: - case MYSQL_TYPE_LONG_BLOB: - { - m_field_metadata[index++]= - (uchar)((Field_blob *)m_table->s->field[i])->pack_length_no_ptr(); - break; - } - case MYSQL_TYPE_DOUBLE: - case MYSQL_TYPE_FLOAT: - { - m_field_metadata[index++]= (uchar)m_table->s->field[i]->pack_length(); - break; - } - case MYSQL_TYPE_BIT: - { - m_field_metadata[index++]= - (uchar)((Field_bit *)m_table->s->field[i])->bit_len; - m_field_metadata[index++]= - (uchar)((Field_bit *)m_table->s->field[i])->bytes_in_rec; - break; - } - case MYSQL_TYPE_VARCHAR: - { - char *ptr= (char *)&m_field_metadata[index]; - int2store(ptr, m_table->s->field[i]->field_length); - index= index + 2; - break; - } - case MYSQL_TYPE_STRING: - { - m_field_metadata[index++]= (uchar)m_table->s->field[i]->real_type(); - m_field_metadata[index++]= m_table->s->field[i]->field_length; - break; - } - case MYSQL_TYPE_ENUM: - case MYSQL_TYPE_SET: - { - m_field_metadata[index++]= (uchar)m_table->s->field[i]->real_type(); - m_field_metadata[index++]= m_table->s->field[i]->pack_length(); - break; - } - default: - break; - } - } - DBUG_RETURN(0); + index+= m_table->s->field[i]->save_field_metadata(&m_field_metadata[index]); + DBUG_RETURN(index); } #endif /* !defined(MYSQL_CLIENT) */ @@ -6573,16 +6472,6 @@ Table_map_log_event::Table_map_log_event(THD *thd, TABLE *tbl, ulong tid, m_data_size+= m_dblen + 2; // Include length and terminating \0 m_data_size+= m_tbllen + 2; // Include length and terminating \0 m_data_size+= 1 + m_colcnt; // COLCNT and column types - m_field_metadata_size= calc_field_metadata_size(); - - /* - Now set the size of the data to the size of the field metadata array - plus one or two bytes for number of elements in the field metadata array. - */ - if (m_field_metadata_size > 255) - m_data_size+= m_field_metadata_size + 2; - else - m_data_size+= m_field_metadata_size + 1; /* If malloc fails, catched in is_valid() */ if ((m_memory= (uchar*) my_malloc(m_colcnt, MYF(MY_WME)))) @@ -6602,17 +6491,31 @@ Table_map_log_event::Table_map_log_event(THD *thd, TABLE *tbl, ulong tid, m_data_size+= num_null_bytes; m_meta_memory= (uchar *)my_multi_malloc(MYF(MY_WME), &m_null_bits, num_null_bytes, - &m_field_metadata, m_field_metadata_size, + &m_field_metadata, (m_colcnt * 2), NULL); + + bzero(m_field_metadata, (m_colcnt * 2)); + + /* + Create an array for the field metadata and store it. + */ + m_field_metadata_size= save_field_metadata(); + DBUG_ASSERT(m_field_metadata_size <= (m_colcnt * 2)); + + /* + Now set the size of the data to the size of the field metadata array + plus one or two bytes for number of elements in the field metadata array. + */ + if (m_field_metadata_size > 255) + m_data_size+= m_field_metadata_size + 2; + else + m_data_size+= m_field_metadata_size + 1; + bzero(m_null_bits, num_null_bytes); for (unsigned int i= 0 ; i < m_table->s->fields ; ++i) if (m_table->field[i]->maybe_null()) m_null_bits[(i / 8)]+= 1 << (i % 8); - /* - Create an array for the field metadata and store it. - */ - save_field_metadata(); } #endif /* !defined(MYSQL_CLIENT) */ diff --git a/sql/log_event.h b/sql/log_event.h index e22a9785736..fa22c875c48 100644 --- a/sql/log_event.h +++ b/sql/log_event.h @@ -2049,7 +2049,6 @@ public: virtual int get_data_size() { return m_data_size; } #ifndef MYSQL_CLIENT - virtual const int calc_field_metadata_size(); virtual int save_field_metadata(); virtual bool write_data_header(IO_CACHE *file); virtual bool write_data_body(IO_CACHE *file); @@ -2090,7 +2089,7 @@ private: uchar *m_field_metadata; // buffer for field metadata /* - The size of field metadata buffer set by calling calc_field_metadata_size() + The size of field metadata buffer set by calling save_field_metadata() */ ulong m_field_metadata_size; uchar *m_null_bits; diff --git a/sql/rpl_utility.cc b/sql/rpl_utility.cc index 40937e98b27..7ea94fda39f 100644 --- a/sql/rpl_utility.cc +++ b/sql/rpl_utility.cc @@ -156,6 +156,25 @@ table_def::compatible_with(RELAY_LOG_INFO const *rli_arg, TABLE *table) rli->report(ERROR_LEVEL, ER_BINLOG_ROW_WRONG_TABLE_DEF, ER(ER_BINLOG_ROW_WRONG_TABLE_DEF), buf); } + /* + Check the slave's field size against that of the master. + */ + if (!error && + !table->field[col]->compatible_field_size(field_metadata(col))) + { + error= 1; + char buf[256]; + my_snprintf(buf, sizeof(buf), "Column %d size mismatch - " + "master has size %d, %s.%s on slave has size %d." + " Master's column size should be <= the slave's " + "column size.", col, + table->field[col]->pack_length_from_metadata( + m_field_metadata[col]), + tsh->db.str, tsh->table_name.str, + table->field[col]->row_pack_length()); + rli->report(ERROR_LEVEL, ER_BINLOG_ROW_WRONG_TABLE_DEF, + ER(ER_BINLOG_ROW_WRONG_TABLE_DEF), buf); + } } return error; diff --git a/sql/rpl_utility.h b/sql/rpl_utility.h index 034b6e084af..c0c233477cb 100644 --- a/sql/rpl_utility.h +++ b/sql/rpl_utility.h @@ -61,7 +61,7 @@ public: */ table_def(field_type *types, ulong size, uchar *field_metadata, int metadata_size, uchar *null_bitmap) - : m_size(size), m_type(0), + : m_size(size), m_type(0), m_field_metadata_size(metadata_size), m_field_metadata(0), m_null_bits(0), m_memory(NULL) { m_memory= (uchar *)my_multi_malloc(MYF(MY_WME), @@ -190,7 +190,7 @@ public: uint16 field_metadata(uint index) const { DBUG_ASSERT(index < m_size); - if (m_field_metadata) + if (m_field_metadata_size) return m_field_metadata[index]; else return 0; @@ -239,6 +239,7 @@ private: ulong m_size; // Number of elements in the types array field_type *m_type; // Array of type descriptors uint16 *m_field_metadata; + uint m_field_metadata_size; uchar *m_null_bits; uchar *m_memory; }; From d30181e16c8af19341c2f4a53811dc1c3798eb04 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 11 Aug 2007 00:07:11 +0200 Subject: [PATCH 056/194] rpl_packet.test: Changed patch to Mats suggestion from review. Patch is for Bug#30209 .del-wait_for_slave_running_off.inc: Delete: mysql-test/include/wait_for_slave_running_off.inc BitKeeper/deleted/.del-wait_for_slave_running_off.inc: Delete: mysql-test/include/wait_for_slave_running_off.inc mysql-test/suite/rpl/t/rpl_packet.test: Changed patch to Mats suggestion --- .../include/wait_for_slave_running_off.inc | 35 ------------------- mysql-test/suite/rpl/t/rpl_packet.test | 2 +- 2 files changed, 1 insertion(+), 36 deletions(-) delete mode 100755 mysql-test/include/wait_for_slave_running_off.inc diff --git a/mysql-test/include/wait_for_slave_running_off.inc b/mysql-test/include/wait_for_slave_running_off.inc deleted file mode 100755 index 0f675291ec1..00000000000 --- a/mysql-test/include/wait_for_slave_running_off.inc +++ /dev/null @@ -1,35 +0,0 @@ -################################################### -#Author: Jeb -#Date: 2007-08-09 -#Purpose: This is to address timing issue recorded -# in bug 30209. This function with wait -# until "SHOW STATUS LIKE 'Slave_running'" -# returns 'OFF' -#Details: -# 1) Fill in and setup variable -# 2) loop through looking OFF -# 3) If loops too long die. -#################################################### -connection slave; -let $row_number= 1; -let $run= 1; -let $counter= 300; - -while ($run) -{ - let $running_result= query_get_value(SHOW STATUS LIKE 'Slave_running', Value, $row_number); - if (`SELECT '$running_result' = 'OFF'`){ - let $run= 0; - } - sleep 0.1; - if (!$counter){ - --echo "Failed while waiting for slave to stop" - --replace_result $MASTER_MYPORT MASTER_PORT - --replace_column 1 # 7 # 8 # 9 # 22 # 23 # 33 # - query_vertical SHOW SLAVE STATUS; - exit; - } - dec $counter; -} - - diff --git a/mysql-test/suite/rpl/t/rpl_packet.test b/mysql-test/suite/rpl/t/rpl_packet.test index c147878e0c7..316278cb75d 100644 --- a/mysql-test/suite/rpl/t/rpl_packet.test +++ b/mysql-test/suite/rpl/t/rpl_packet.test @@ -68,7 +68,7 @@ INSERT INTO `t1`(`f1`) VALUES ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa # The slave I/O thread must stop after trying to read the above event connection slave; sleep 2; ---source include/wait_for_slave_running_off.inc +--source include/wait_for_slave_io_to_stop.inc SHOW STATUS LIKE 'Slave_running'; # cleanup From b35cad86d43b26a2236c715645bf2737af20c890 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 13 Aug 2007 09:46:09 +0200 Subject: [PATCH 057/194] Bug#29804 UDF parameters don't contain correct string length - Export 'check_const_len_init' from udf_example.dll sql/udf_example.def: - Export 'check_const_len_init' from udf_example.dll --- sql/udf_example.def | 1 + 1 file changed, 1 insertion(+) diff --git a/sql/udf_example.def b/sql/udf_example.def index 7c69b681f8b..3d569941cc8 100644 --- a/sql/udf_example.def +++ b/sql/udf_example.def @@ -24,3 +24,4 @@ EXPORTS is_const is_const_init check_const_len + check_const_len_init From 65fa527a27df355d9e06a812dea02459566a0b35 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 13 Aug 2007 15:46:11 +0200 Subject: [PATCH 058/194] Improve error messages Write test results to var/log Add test for "source" and variable expansion client/mysqltest.c: Improve error messages Write .reject file to the location specified by --logdir mysql-test/mysql-test-run.pl: Pass logdir to mysqltest, to get test results written to var/log mysql-test/r/mysqltest.result: Update test results mysql-test/t/mysqltest.test: Add test for "source" and variable expansion Update test after writing result in var/log --- client/mysqltest.c | 36 ++++++++++++++++++++--------------- mysql-test/mysql-test-run.pl | 1 + mysql-test/r/mysqltest.result | 8 +++++--- mysql-test/t/mysqltest.test | 17 +++++++++++++++-- 4 files changed, 42 insertions(+), 20 deletions(-) diff --git a/client/mysqltest.c b/client/mysqltest.c index 1ce52cd8527..693c6d0fb65 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -1125,7 +1125,7 @@ void cat_file(DYNAMIC_STRING* ds, const char* filename) char buff[512]; if ((fd= my_open(filename, O_RDONLY, MYF(0))) < 0) - die("Failed to open file %s", filename); + die("Failed to open file '%s'", filename); while((len= my_read(fd, (byte*)&buff, sizeof(buff), MYF(0))) > 0) { @@ -1364,7 +1364,7 @@ int compare_files2(File fd, const char* filename2) if ((fd2= my_open(filename2, O_RDONLY, MYF(0))) < 0) { my_close(fd, MYF(0)); - die("Failed to open second file: %s", filename2); + die("Failed to open second file: '%s'", filename2); } while((len= my_read(fd, (byte*)&buff, sizeof(buff), MYF(0))) > 0) @@ -1421,7 +1421,7 @@ int compare_files(const char* filename1, const char* filename2) int error; if ((fd= my_open(filename1, O_RDONLY, MYF(0))) < 0) - die("Failed to open first file: %s", filename1); + die("Failed to open first file: '%s'", filename1); error= compare_files2(fd, filename2); @@ -1447,12 +1447,12 @@ int dyn_string_cmp(DYNAMIC_STRING* ds, const char *fname) { int error; File fd; - char ds_temp_file_path[FN_REFLEN]; + char temp_file_path[FN_REFLEN]; DBUG_ENTER("dyn_string_cmp"); DBUG_PRINT("enter", ("fname: %s", fname)); - if ((fd= create_temp_file(ds_temp_file_path, NULL, + if ((fd= create_temp_file(temp_file_path, NULL, "tmp", O_CREAT | O_SHARE | O_RDWR, MYF(MY_WME))) < 0) die("Failed to create temporary file for ds"); @@ -1464,15 +1464,15 @@ int dyn_string_cmp(DYNAMIC_STRING* ds, const char *fname) { my_close(fd, MYF(0)); /* Remove the temporary file */ - my_delete(ds_temp_file_path, MYF(0)); - die("Failed to write to '%s'", ds_temp_file_path); + my_delete(temp_file_path, MYF(0)); + die("Failed to write file '%s'", temp_file_path); } error= compare_files2(fd, fname); my_close(fd, MYF(0)); /* Remove the temporary file */ - my_delete(ds_temp_file_path, MYF(0)); + my_delete(temp_file_path, MYF(0)); DBUG_RETURN(error); } @@ -1498,6 +1498,9 @@ void check_result(DYNAMIC_STRING* ds) DBUG_ASSERT(result_file_name); DBUG_PRINT("enter", ("result_file_name: %s", result_file_name)); + if (access(result_file_name, F_OK) != 0) + die("The specified result file does not exist: '%s'", result_file_name); + switch (dyn_string_cmp(ds, result_file_name)) { case RESULT_OK: @@ -1507,12 +1510,15 @@ void check_result(DYNAMIC_STRING* ds) /* Fallthrough */ case RESULT_CONTENT_MISMATCH: { - /* Result mismatched, dump results to .reject file and then show the diff */ + /* + Result mismatched, dump results to .reject file + and then show the diff + */ char reject_file[FN_REFLEN]; - fn_format(reject_file, result_file_name, "", ".reject", - MY_REPLACE_EXT); - DBUG_PRINT("enter", ("reject_file_name: %s", reject_file)); - str_to_file(reject_file, ds->str, ds->length); + str_to_file(fn_format(reject_file, result_file_name, opt_logdir, ".reject", + *opt_logdir ? MY_REPLACE_DIR | MY_REPLACE_EXT : + MY_REPLACE_EXT), + ds->str, ds->length); dynstr_set(ds, NULL); /* Don't create a .log file */ @@ -2121,7 +2127,7 @@ int open_file(const char *name) if (!(cur_file->file = my_fopen(buff, O_RDONLY | FILE_BINARY, MYF(0)))) { cur_file--; - die("Could not open file %s", buff); + die("Could not open file '%s'", buff); } cur_file->file_name= my_strdup(buff, MYF(MY_FAE)); cur_file->lineno=1; @@ -4980,7 +4986,7 @@ void read_embedded_server_arguments(const char *name) embedded_server_args[0]= (char*) ""; /* Progname */ } if (!(file=my_fopen(buff, O_RDONLY | FILE_BINARY, MYF(MY_WME)))) - die("Failed to open file %s", buff); + die("Failed to open file '%s'", buff); while (embedded_server_arg_count < MAX_EMBEDDED_SERVER_ARGS && (str=fgets(argument,sizeof(argument), file))) diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 8030238b7ec..f0adfe4d468 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -4677,6 +4677,7 @@ sub run_mysqltest ($) { mtr_add_arg($args, "--skip-safemalloc"); mtr_add_arg($args, "--tmpdir=%s", $opt_tmpdir); mtr_add_arg($args, "--character-sets-dir=%s", $path_charsetsdir); + mtr_add_arg($args, "--logdir=%s/log", $opt_vardir); # Log line number and time for each line in .test file mtr_add_arg($args, "--mark-progress") diff --git a/mysql-test/r/mysqltest.result b/mysql-test/r/mysqltest.result index ba62936999e..d03e21b1bb0 100644 --- a/mysql-test/r/mysqltest.result +++ b/mysql-test/r/mysqltest.result @@ -293,7 +293,7 @@ var5 from query that returns no row failing query in let mysqltest: At line 1: Error running query 'failing query': 1064 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 'failing query' at line 1 mysqltest: At line 1: Missing required argument 'filename' to command 'source' -mysqltest: At line 1: Could not open file ./non_existingFile +mysqltest: At line 1: Could not open file './non_existingFile' mysqltest: In included file "MYSQLTEST_VARDIR/tmp/recursive.sql": At line 1: Source directives are nesting too deep mysqltest: In included file "MYSQLTEST_VARDIR/tmp/error.sql": At line 1: query 'garbage ' failed: 1064: 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 'garbage' at line 1 @@ -352,6 +352,8 @@ here is the sourced script In loop here is the sourced script here is the sourced script +"hello" +"hello" mysqltest: At line 1: Missing argument to sleep mysqltest: At line 1: Missing argument to real_sleep mysqltest: At line 1: Invalid argument to sleep "abc" @@ -485,7 +487,7 @@ insert into t1 values (1); select 'select-me'; insertz 'error query'' failed: 1064: 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 'insertz 'error query'' at line 1 -More results from queries before failure can be found in MYSQLTEST_VARDIR/tmp/bug11731.log +More results from queries before failure can be found in MYSQLTEST_VARDIR/log/bug11731.log drop table t1; Multi statement using expected error create table t1 (a int primary key); @@ -538,7 +540,7 @@ mysqltest: At line 1: File already exist: 'MYSQLTEST_VARDIR/tmp/test_file1.tmp' Some data for cat_file command of mysqltest -mysqltest: At line 1: Failed to open file non_existing_file +mysqltest: At line 1: Failed to open file 'non_existing_file' mysqltest: At line 1: Missing required argument 'filename' to command 'file_exists' mysqltest: At line 1: Missing required argument 'from_file' to command 'copy_file' mysqltest: At line 1: Missing required argument 'to_file' to command 'copy_file' diff --git a/mysql-test/t/mysqltest.test b/mysql-test/t/mysqltest.test index 70d5e2ee1ee..8a38972c00f 100644 --- a/mysql-test/t/mysqltest.test +++ b/mysql-test/t/mysqltest.test @@ -854,6 +854,19 @@ while ($num) --remove_file $MYSQLTEST_VARDIR/tmp/sourced.inc +--write_file $MYSQLTEST_VARDIR/tmp/sourced.inc +echo "hello"; +EOF + +let $x= sourced; +source $MYSQLTEST_VARDIR/tmp/$x.inc; + +let $x= $MYSQLTEST_VARDIR; +source $x/tmp/sourced.inc; + +--remove_file $MYSQLTEST_VARDIR/tmp/sourced.inc + + # ---------------------------------------------------------------------------- # Test sleep command # ---------------------------------------------------------------------------- @@ -1422,7 +1435,7 @@ select "this will be executed"; --exec $MYSQL_TEST -x $MYSQLTEST_VARDIR/tmp/query.sql -R $MYSQLTEST_VARDIR/tmp/zero_length_file.result > /dev/null 2>&1 remove_file $MYSQLTEST_VARDIR/tmp/zero_length_file.result; -remove_file $MYSQLTEST_VARDIR/tmp/zero_length_file.reject; +remove_file $MYSQLTEST_VARDIR/log/zero_length_file.reject; # # Test that a test file that does not generate any output fails. @@ -1490,7 +1503,7 @@ drop table t1; --exec test -s $MYSQLTEST_VARDIR/tmp/bug11731.out drop table t1; remove_file $MYSQLTEST_VARDIR/tmp/bug11731.out; -remove_file $MYSQLTEST_VARDIR/tmp/bug11731.log; +remove_file $MYSQLTEST_VARDIR/log/bug11731.log; remove_file $MYSQLTEST_VARDIR/tmp/bug11731.sql; # From e56a1eacc8f46cb95282ccb8b0162de3df3a4dcf Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 14 Aug 2007 00:03:05 +0200 Subject: [PATCH 059/194] make_win_src_distribution_old.sh: Rename: scripts/make_win_src_distribution.sh -> scripts/make_win_src_distribution_old.sh Makefile.am, make_win_src_distribution_old.sh: Rename and put in note not to be used scripts/make_win_src_distribution_old.sh: Rename and put in note not to be used scripts/Makefile.am: Rename and put in note not to be used --- scripts/Makefile.am | 6 +++--- ...c_distribution.sh => make_win_src_distribution_old.sh} | 8 ++++++++ 2 files changed, 11 insertions(+), 3 deletions(-) rename scripts/{make_win_src_distribution.sh => make_win_src_distribution_old.sh} (96%) diff --git a/scripts/Makefile.am b/scripts/Makefile.am index d4944962884..161c8a54df2 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -41,11 +41,11 @@ bin_SCRIPTS = @server_scripts@ \ noinst_SCRIPTS = make_binary_distribution \ make_sharedlib_distribution \ - make_win_src_distribution + make_win_src_distribution_old EXTRA_SCRIPTS = make_binary_distribution.sh \ make_sharedlib_distribution.sh \ - make_win_src_distribution.sh \ + make_win_src_distribution_old.sh \ msql2mysql.sh \ mysql_config.sh \ mysql_fix_privilege_tables.sh \ @@ -99,7 +99,7 @@ CLEANFILES = @server_scripts@ \ mysql_tableinfo \ mysql_upgrade_shell \ mysqld_multi \ - make_win_src_distribution + make_win_src_distribution_old # mysqlbug should be distributed built so that people can report build # failures with it. diff --git a/scripts/make_win_src_distribution.sh b/scripts/make_win_src_distribution_old.sh similarity index 96% rename from scripts/make_win_src_distribution.sh rename to scripts/make_win_src_distribution_old.sh index d6109772060..dfb43585a21 100644 --- a/scripts/make_win_src_distribution.sh +++ b/scripts/make_win_src_distribution_old.sh @@ -14,6 +14,14 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# NOTE: This script creates a source TAR and ZIP to be used when +# building using Visual Studio 2003 .Net. To gain more flexibility, a +# new CMake build was added. The new build obsoletes this script, Unix +# and Windows share the same source TAR/ZIP. +# Also note that the old build from source created by this script is +# no longer tested by MySQL AB and may not work. Please use the new +# CMake based build. + # Terminate loudly on error, we don't want partial package set -e trap "echo '*** script failed ***'" 0 From 53587e3e64507e119b2fc267f7d8ce85cb719a0a Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 14 Aug 2007 11:05:42 +0200 Subject: [PATCH 060/194] Remove unused variables --- mysql-test/mysql-test-run.pl | 3 --- 1 file changed, 3 deletions(-) diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index f0adfe4d468..656536edcfb 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -276,9 +276,6 @@ our $opt_stress_test_duration= 0; our $opt_stress_init_file= ""; our $opt_stress_test_file= ""; -our $opt_wait_for_master; -our $opt_wait_for_slave; - our $opt_warnings; our $opt_skip_ndbcluster= 0; From 80aa720a8911bfa14bd52c0a4a3b06a7ff3ae4aa Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 14 Aug 2007 11:10:23 +0200 Subject: [PATCH 061/194] Remove unused variable --- mysql-test/mysql-test-run.pl | 1 - 1 file changed, 1 deletion(-) diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 656536edcfb..8e7c3e6693f 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -233,7 +233,6 @@ my $opt_report_features; our $opt_check_testcases; our $opt_mark_progress; -our $opt_skip; our $opt_skip_rpl; our $max_slave_num= 0; our $max_master_num= 1; From e34aa82da9eca8b219a88bc255938f2c7094567a Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 14 Aug 2007 17:28:51 +0400 Subject: [PATCH 062/194] Bug#29948: Unchecked NULL pointer caused server crash. The cli_read_binary_rows function is used to fetch data from the server after a prepared statement execution. It accepts a statement handler and gets the connection handler from it. But when the auto-reconnect option is set the connection handler is reset to NULL after reconnection because the prepared statement is lost and the handler became useless. This case wasn't checked in the cli_read_binary_rows function and caused server crash. Now the cli_read_binary_rows function checks the connection handler to be not NULL and returns an error if it is. tests/mysql_client_test.c: Added a test case for the bug#29948: Unchecked NULL pointer caused server crash. libmysql/libmysql.c: Bug#29948: Unchecked NULL pointer caused server crash. Now the cli_read_binary_rows function checks the connection handler to be not NULL and returns an error if it is. --- libmysql/libmysql.c | 10 +++++- tests/mysql_client_test.c | 75 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+), 1 deletion(-) diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index 1a0aae414ed..85c56a7ea40 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -4679,9 +4679,17 @@ int cli_read_binary_rows(MYSQL_STMT *stmt) MYSQL *mysql= stmt->mysql; MYSQL_DATA *result= &stmt->result; MYSQL_ROWS *cur, **prev_ptr= &result->data; - NET *net = &mysql->net; + NET *net; + + if (!mysql) + { + set_stmt_error(stmt, CR_SERVER_LOST, unknown_sqlstate); + return 1; + } + DBUG_ENTER("cli_read_binary_rows"); + net = &mysql->net; mysql= mysql->last_used_con; while ((pkt_len= cli_safe_read(mysql)) != packet_error) diff --git a/tests/mysql_client_test.c b/tests/mysql_client_test.c index 75c86902972..ca76270d8b8 100644 --- a/tests/mysql_client_test.c +++ b/tests/mysql_client_test.c @@ -15735,6 +15735,80 @@ static void test_bug27592() } +static void test_bug29948() +{ + MYSQL *dbc=NULL; + MYSQL_STMT *stmt=NULL; + MYSQL_BIND bind; + + int res=0; + my_bool auto_reconnect=1, error=0, is_null=0; + char kill_buf[20]; + const char *query; + int buf; + unsigned long length; + + dbc = mysql_init(NULL); + DIE_UNLESS(dbc); + + mysql_options(dbc, MYSQL_OPT_RECONNECT, (char*)&auto_reconnect); + if (!mysql_real_connect(dbc, opt_host, opt_user, + opt_password, current_db, opt_port, + opt_unix_socket, + (CLIENT_FOUND_ROWS | CLIENT_MULTI_STATEMENTS | + CLIENT_MULTI_RESULTS))) + { + printf("connection failed: %s (%d)", mysql_error(dbc), + mysql_errno(dbc)); + exit(1); + } + + bind.buffer_type= MYSQL_TYPE_LONG; + bind.buffer= (char *)&buf; + bind.is_null= &is_null; + bind.error= &error; + bind.length= &length; + + res= mysql_query(dbc, "DROP TABLE IF EXISTS t1"); + myquery(res); + res= mysql_query(dbc, "CREATE TABLE t1 (a INT)"); + myquery(res); + res= mysql_query(dbc, "INSERT INTO t1 VALUES(1)"); + myquery(res); + + stmt= mysql_stmt_init(dbc); + check_stmt(stmt); + + buf= CURSOR_TYPE_READ_ONLY; + res= mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, (void *)&buf); + myquery(res); + + query= "SELECT * from t1 where a=?"; + res= mysql_stmt_prepare(stmt, query, strlen(query)); + myquery(res); + + res= mysql_stmt_bind_param(stmt, &bind); + myquery(res); + + res= mysql_stmt_execute(stmt); + check_execute(stmt, res); + + res= mysql_stmt_bind_result(stmt,&bind); + check_execute(stmt, res); + + sprintf(kill_buf, "kill %ld", dbc->thread_id); + mysql_query(dbc, kill_buf); + + res= mysql_stmt_store_result(stmt); + DIE_UNLESS(res); + + mysql_stmt_free_result(stmt); + mysql_stmt_close(stmt); + mysql_query(dbc, "DROP TABLE t1"); + mysql_close(dbc); +} + + /* Read and parse arguments and MySQL options from my.cnf */ @@ -16019,6 +16093,7 @@ static struct my_tests_st my_tests[]= { { "test_bug28505", test_bug28505 }, { "test_bug28934", test_bug28934 }, { "test_bug27592", test_bug27592 }, + { "test_bug29948", test_bug29948 }, { 0, 0 } }; From 3925c3feee67aaf1efeb08610b68b5c360b955b7 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 14 Aug 2007 15:35:19 -0600 Subject: [PATCH 063/194] Updates to allow innodb.test to be run with --embedded-server, including a small change to build_table_filename(). mysql-test/mysql-test-run.pl: Remove unused bad merge bitrot code. This chunk of code is a repeat copy of an earlier chunk, and should never have been here. mysql-test/r/innodb.result: Updates to allow innodb.test to be run with --embedded-server mysql-test/suite/binlog/r/binlog_innodb.result: Updates to allow innodb.test to be run with --embedded-server mysql-test/suite/binlog/t/binlog_innodb.test: Updates to allow innodb.test to be run with --embedded-server mysql-test/t/innodb.test: Updates to allow innodb.test to be run with --embedded-server sql/sql_table.cc: build_table_filename(): Don't add FN_ROOTDIR to mysql_data_home if it's already there. This is done to make it easier to write tests which check the output of various error messages, and work with both the embedded server (mysql_data_home is full path, including trailing FN_ROOTDIR) and normal server (mysql_data_home is just "."). --- mysql-test/mysql-test-run.pl | 20 ------ mysql-test/r/innodb.result | 39 +----------- .../suite/binlog/r/binlog_innodb.result | 33 ++++++++++ mysql-test/suite/binlog/t/binlog_innodb.test | 39 ++++++++++++ mysql-test/t/innodb.test | 63 ++++--------------- sql/sql_table.cc | 18 ++++-- 6 files changed, 100 insertions(+), 112 deletions(-) diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 22b9499c37a..fcfb634bda2 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -933,26 +933,6 @@ sub command_line_setup () { mtr_error("Will not run in record mode without a specific test case"); } - # -------------------------------------------------------------------------- - # Embedded server flag - # -------------------------------------------------------------------------- - if ( $opt_embedded_server ) - { - $glob_use_embedded_server= 1; - push(@glob_test_mode, "embedded"); - $opt_skip_rpl= 1; # We never run replication with embedded - $opt_skip_ndbcluster= 1; # Turn off use of NDB cluster - $opt_skip_ssl= 1; # Turn off use of SSL - - # Turn off use of bin log - push(@opt_extra_mysqld_opt, "--skip-log-bin"); - - if ( $opt_extern ) - { - mtr_error("Can't use --extern with --embedded-server"); - } - } - # -------------------------------------------------------------------------- # ps protcol flag diff --git a/mysql-test/r/innodb.result b/mysql-test/r/innodb.result index 804c4b81c17..a35a5121a5f 100644 --- a/mysql-test/r/innodb.result +++ b/mysql-test/r/innodb.result @@ -1086,39 +1086,6 @@ n d 1 30 2 20 drop table t1,t2; -CREATE TABLE `t1` ( -`a` int(11) NOT NULL auto_increment, -`b` int(11) default NULL, -PRIMARY KEY (`a`) -) ENGINE=MyISAM DEFAULT CHARSET=latin1 ; -CREATE TABLE `t2` ( -`a` int(11) NOT NULL auto_increment, -`b` int(11) default NULL, -PRIMARY KEY (`a`) -) ENGINE=INNODB DEFAULT CHARSET=latin1 ; -insert into t1 values (1,1),(2,2); -insert into t2 values (1,1),(4,4); -reset master; -UPDATE t2,t1 SET t2.a=t1.a+2; -ERROR 23000: Duplicate entry '3' for key 'PRIMARY' -select * from t2 /* must be (3,1), (4,4) */; -a b -1 1 -4 4 -show master status /* there must no UPDATE in binlog */; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 106 -delete from t1; -delete from t2; -insert into t1 values (1,2),(3,4),(4,4); -insert into t2 values (1,2),(3,4),(4,4); -reset master; -UPDATE t2,t1 SET t2.a=t2.b where t2.a=t1.a; -ERROR 23000: Duplicate entry '4' for key 'PRIMARY' -show master status /* there must be no UPDATE query event */; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 106 -drop table t1, t2; create table t1 (a int, b int) engine=innodb; insert into t1 values(20,null); select t2.b, ifnull(t2.b,"this is null") from t1 as t2 left join t1 as t3 on @@ -1784,13 +1751,13 @@ Variable_name Value Innodb_page_size 16384 show status like "Innodb_rows_deleted"; Variable_name Value -Innodb_rows_deleted 72 +Innodb_rows_deleted 70 show status like "Innodb_rows_inserted"; Variable_name Value -Innodb_rows_inserted 1088 +Innodb_rows_inserted 1083 show status like "Innodb_rows_updated"; Variable_name Value -Innodb_rows_updated 888 +Innodb_rows_updated 886 show status like "Innodb_row_lock_waits"; Variable_name Value Innodb_row_lock_waits 0 diff --git a/mysql-test/suite/binlog/r/binlog_innodb.result b/mysql-test/suite/binlog/r/binlog_innodb.result index 9dfb6544811..34538eb5215 100644 --- a/mysql-test/suite/binlog/r/binlog_innodb.result +++ b/mysql-test/suite/binlog/r/binlog_innodb.result @@ -135,4 +135,37 @@ show status like "binlog_cache_disk_use"; Variable_name Value Binlog_cache_disk_use 1 drop table t1; +CREATE TABLE `t1` ( +`a` int(11) NOT NULL auto_increment, +`b` int(11) default NULL, +PRIMARY KEY (`a`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 ; +CREATE TABLE `t2` ( +`a` int(11) NOT NULL auto_increment, +`b` int(11) default NULL, +PRIMARY KEY (`a`) +) ENGINE=INNODB DEFAULT CHARSET=latin1 ; +insert into t1 values (1,1),(2,2); +insert into t2 values (1,1),(4,4); +reset master; +UPDATE t2,t1 SET t2.a=t1.a+2; +ERROR 23000: Duplicate entry '3' for key 'PRIMARY' +select * from t2 /* must be (3,1), (4,4) */; +a b +1 1 +4 4 +show master status /* there must no UPDATE in binlog */; +File Position Binlog_Do_DB Binlog_Ignore_DB +master-bin.000001 106 +delete from t1; +delete from t2; +insert into t1 values (1,2),(3,4),(4,4); +insert into t2 values (1,2),(3,4),(4,4); +reset master; +UPDATE t2,t1 SET t2.a=t2.b where t2.a=t1.a; +ERROR 23000: Duplicate entry '4' for key 'PRIMARY' +show master status /* there must be no UPDATE query event */; +File Position Binlog_Do_DB Binlog_Ignore_DB +master-bin.000001 106 +drop table t1, t2; End of tests diff --git a/mysql-test/suite/binlog/t/binlog_innodb.test b/mysql-test/suite/binlog/t/binlog_innodb.test index 3bad61db23a..df99e3786ee 100644 --- a/mysql-test/suite/binlog/t/binlog_innodb.test +++ b/mysql-test/suite/binlog/t/binlog_innodb.test @@ -130,4 +130,43 @@ show status like "binlog_cache_use"; show status like "binlog_cache_disk_use"; drop table t1; +# +# Bug#27716 multi-update did partially and has not binlogged +# + +CREATE TABLE `t1` ( + `a` int(11) NOT NULL auto_increment, + `b` int(11) default NULL, + PRIMARY KEY (`a`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 ; + +CREATE TABLE `t2` ( + `a` int(11) NOT NULL auto_increment, + `b` int(11) default NULL, + PRIMARY KEY (`a`) +) ENGINE=INNODB DEFAULT CHARSET=latin1 ; + +# A. testing multi_update::send_eof() execution branch +insert into t1 values (1,1),(2,2); +insert into t2 values (1,1),(4,4); +reset master; +--error ER_DUP_ENTRY +UPDATE t2,t1 SET t2.a=t1.a+2; +# check +select * from t2 /* must be (3,1), (4,4) */; +show master status /* there must no UPDATE in binlog */; + +# B. testing multi_update::send_error() execution branch +delete from t1; +delete from t2; +insert into t1 values (1,2),(3,4),(4,4); +insert into t2 values (1,2),(3,4),(4,4); +reset master; +--error ER_DUP_ENTRY +UPDATE t2,t1 SET t2.a=t2.b where t2.a=t1.a; +show master status /* there must be no UPDATE query event */; + +# cleanup bug#27716 +drop table t1, t2; + --echo End of tests diff --git a/mysql-test/t/innodb.test b/mysql-test/t/innodb.test index 140aac3b9c3..cc1ef6f9730 100644 --- a/mysql-test/t/innodb.test +++ b/mysql-test/t/innodb.test @@ -11,13 +11,7 @@ # # ####################################################################### --- source include/not_embedded.inc -- source include/have_innodb.inc --- source include/have_log_bin.inc - -# Disabling it temporarily for statement-based logging since some -# tests are not safe while binlog is on. --- source include/have_binlog_format_mixed_or_row.inc # # Small basic test with ignore @@ -759,45 +753,6 @@ select * from t1; select * from t2; drop table t1,t2; -# -# Bug#27716 multi-update did partially and has not binlogged -# - -CREATE TABLE `t1` ( - `a` int(11) NOT NULL auto_increment, - `b` int(11) default NULL, - PRIMARY KEY (`a`) -) ENGINE=MyISAM DEFAULT CHARSET=latin1 ; - -CREATE TABLE `t2` ( - `a` int(11) NOT NULL auto_increment, - `b` int(11) default NULL, - PRIMARY KEY (`a`) -) ENGINE=INNODB DEFAULT CHARSET=latin1 ; - -# A. testing multi_update::send_eof() execution branch -insert into t1 values (1,1),(2,2); -insert into t2 values (1,1),(4,4); -reset master; ---error ER_DUP_ENTRY -UPDATE t2,t1 SET t2.a=t1.a+2; -# check -select * from t2 /* must be (3,1), (4,4) */; -show master status /* there must no UPDATE in binlog */; - -# B. testing multi_update::send_error() execution branch -delete from t1; -delete from t2; -insert into t1 values (1,2),(3,4),(4,4); -insert into t2 values (1,2),(3,4),(4,4); -reset master; ---error ER_DUP_ENTRY -UPDATE t2,t1 SET t2.a=t2.b where t2.a=t1.a; -show master status /* there must be no UPDATE query event */; - -# cleanup bug#27716 -drop table t1, t2; - # # Testing of IFNULL # @@ -1175,9 +1130,8 @@ drop table t2; # Test error handling -# Clean up filename -- embedded server reports whole path without .frm, -# regular server reports relative path with .frm (argh!) ---replace_result \\ / $MYSQL_TEST_DIR . /var/master-data/ / t2.frm t2 +# Embedded server doesn't chdir to data directory +--replace_result $MYSQLTEST_VARDIR . master-data/ '' --error ER_WRONG_FK_DEF create table t2 (id int(11) not null, id2 int(11) not null, constraint t1_id_fk foreign key (id2,id) references t1 (id)) engine = innodb; @@ -1369,9 +1323,8 @@ source include/varchar.inc; # Some errors/warnings on create # -# Clean up filename -- embedded server reports whole path without .frm, -# regular server reports relative path with .frm (argh!) ---replace_result \\ / $MYSQL_TEST_DIR . /var/master-data/ / t1.frm t1 +# Embedded server doesn't chdir to data directory +--replace_result $MYSQLTEST_VARDIR . master-data/ '' create table t1 (v varchar(65530), key(v)); drop table t1; create table t1 (v varchar(65536)); @@ -1645,6 +1598,7 @@ disconnect b; set foreign_key_checks=0; create table t2 (a int primary key, b int, foreign key (b) references t1(a)) engine = innodb; +# Embedded server doesn't chdir to data directory --replace_result $MYSQLTEST_VARDIR . master-data/ '' -- error 1005 create table t1(a char(10) primary key, b varchar(20)) engine = innodb; @@ -1656,6 +1610,7 @@ drop table t2; set foreign_key_checks=0; create table t1(a varchar(10) primary key) engine = innodb DEFAULT CHARSET=latin1; +# Embedded server doesn't chdir to data directory --replace_result $MYSQLTEST_VARDIR . master-data/ '' -- error 1005 create table t2 (a varchar(10), foreign key (a) references t1(a)) engine = innodb DEFAULT CHARSET=utf8; @@ -1686,6 +1641,7 @@ drop table t2,t1; set foreign_key_checks=0; create table t2 (a varchar(10), foreign key (a) references t1(a)) engine = innodb DEFAULT CHARSET=latin1; create table t3(a varchar(10) primary key) engine = innodb DEFAULT CHARSET=utf8; +# Embedded server doesn't chdir to data directory --replace_result $MYSQLTEST_VARDIR . master-data/ '' -- error 1025 rename table t3 to t1; @@ -2311,7 +2267,10 @@ CREATE TABLE t2 (a INT, INDEX(a)) ENGINE=InnoDB; INSERT INTO t1 VALUES (1); INSERT INTO t2 VALUES (1); ALTER TABLE t2 ADD FOREIGN KEY (a) REFERENCES t1 (a) ON DELETE SET NULL; ---replace_regex /'\.\/test\/#sql-[0-9a-f_]*'/'#sql-temporary'/ +# mysqltest first does replace_regex, then replace_result +--replace_regex /'[^']*test\/#sql-[0-9a-f_]*'/'#sql-temporary'/ +# Embedded server doesn't chdir to data directory +--replace_result $MYSQLTEST_VARDIR . master-data/ '' --error 1025 ALTER TABLE t2 MODIFY a INT NOT NULL; DELETE FROM t1; diff --git a/sql/sql_table.cc b/sql/sql_table.cc index eb81e7647eb..17544b8ccde 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -157,6 +157,7 @@ uint tablename_to_filename(const char *from, char *to, uint to_length) SYNOPSIS build_table_filename() buff Where to write result in my_charset_filename. + This may be the same as table_name. bufflen buff size db Database name in system_charset_info. table_name Table name in system_charset_info. @@ -186,10 +187,11 @@ uint tablename_to_filename(const char *from, char *to, uint to_length) uint build_table_filename(char *buff, size_t bufflen, const char *db, const char *table_name, const char *ext, uint flags) { - uint length; char dbbuff[FN_REFLEN]; char tbbuff[FN_REFLEN]; DBUG_ENTER("build_table_filename"); + DBUG_PRINT("enter", ("db: '%s' table_name: '%s' ext: '%s' flags: %x", + db, table_name, ext, flags)); if (flags & FN_IS_TMP) // FN_FROM_IS_TMP | FN_TO_IS_TMP strnmov(tbbuff, table_name, sizeof(tbbuff)); @@ -197,10 +199,18 @@ uint build_table_filename(char *buff, size_t bufflen, const char *db, VOID(tablename_to_filename(table_name, tbbuff, sizeof(tbbuff))); VOID(tablename_to_filename(db, dbbuff, sizeof(dbbuff))); - length= strxnmov(buff, bufflen, mysql_data_home, FN_ROOTDIR, dbbuff, - FN_ROOTDIR, tbbuff, ext, NullS) - buff; + + char *end = buff + bufflen; + /* Don't add FN_ROOTDIR if mysql_data_home already includes it */ + char *pos = strnmov(buff, mysql_data_home, bufflen); + int rootdir_len= strlen(FN_ROOTDIR); + if (pos - rootdir_len >= buff && + memcmp(pos - rootdir_len, FN_ROOTDIR, rootdir_len) != 0) + pos= strnmov(pos, FN_ROOTDIR, end - pos); + pos= strxnmov(pos, end - pos, dbbuff, FN_ROOTDIR, tbbuff, ext, NullS); + DBUG_PRINT("exit", ("buff: '%s'", buff)); - DBUG_RETURN(length); + DBUG_RETURN(pos - buff); } From 2c4c558106d63de953d41d77f1a97b87b675e786 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 14 Aug 2007 20:31:06 -0600 Subject: [PATCH 064/194] Changed whitespace and indentation only, no logic change. --- sql/sql_yacc.yy | 13549 ++++++++++++++++++++++++---------------------- 1 file changed, 7002 insertions(+), 6547 deletions(-) diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index ddd63da9adb..3bbb3abaa54 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -16,7 +16,7 @@ /* sql_yacc.yy */ %{ -/* thd is passed as an arg to yyparse(), and subsequently to yylex(). +/* thd is passed as an argument to yyparse(), and subsequently to yylex(). ** The type will be void*, so it must be cast to (THD*) when used. ** Use the YYTHD macro for this. */ @@ -43,15 +43,27 @@ int yylex(void *yylval, void *yythd); -const LEX_STRING null_lex_str={0,0}; +const LEX_STRING null_lex_str= {0,0}; -#define yyoverflow(A,B,C,D,E,F) {ulong val= *(F); if (my_yyoverflow((B), (D), &val)) { yyerror((char*) (A)); return 2; } else { *(F)= (YYSIZE_T)val; }} +#define yyoverflow(A,B,C,D,E,F) \ + { \ + ulong val= *(F); \ + if (my_yyoverflow((B), (D), &val)) \ + { \ + yyerror((char*) (A)); \ + return 2; \ + } \ + else \ + { \ + *(F)= (YYSIZE_T)val; \ + } \ + } #define MYSQL_YYABORT \ do \ - { \ + { \ LEX::cleanup_lex_after_parse_error(YYTHD);\ - YYABORT; \ + YYABORT; \ } while (0) #define MYSQL_YYABORT_UNLESS(A) \ @@ -1072,43 +1084,43 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); /* A dummy token to force the priority of table_ref production in a join. */ %left TABLE_REF_PRIORITY %left SET_VAR -%left OR_OR_SYM OR_SYM OR2_SYM XOR -%left AND_SYM AND_AND_SYM -%left BETWEEN_SYM CASE_SYM WHEN_SYM THEN_SYM ELSE -%left EQ EQUAL_SYM GE GT_SYM LE LT NE IS LIKE REGEXP IN_SYM -%left '|' -%left '&' -%left SHIFT_LEFT SHIFT_RIGHT -%left '-' '+' -%left '*' '/' '%' DIV_SYM MOD_SYM +%left OR_OR_SYM OR_SYM OR2_SYM XOR +%left AND_SYM AND_AND_SYM +%left BETWEEN_SYM CASE_SYM WHEN_SYM THEN_SYM ELSE +%left EQ EQUAL_SYM GE GT_SYM LE LT NE IS LIKE REGEXP IN_SYM +%left '|' +%left '&' +%left SHIFT_LEFT SHIFT_RIGHT +%left '-' '+' +%left '*' '/' '%' DIV_SYM MOD_SYM %left '^' -%left NEG '~' -%right NOT_SYM NOT2_SYM -%right BINARY COLLATE_SYM +%left NEG '~' +%right NOT_SYM NOT2_SYM +%right BINARY COLLATE_SYM %type IDENT IDENT_QUOTED TEXT_STRING DECIMAL_NUM FLOAT_NUM NUM LONG_NUM HEX_NUM - LEX_HOSTNAME ULONGLONG_NUM field_ident select_alias ident ident_or_text + LEX_HOSTNAME ULONGLONG_NUM field_ident select_alias ident ident_or_text IDENT_sys TEXT_STRING_sys TEXT_STRING_literal - NCHAR_STRING opt_component key_cache_name + NCHAR_STRING opt_component key_cache_name sp_opt_label BIN_NUM label_ident TEXT_STRING_filesystem ident_or_empty %type - opt_table_alias + opt_table_alias %type
- table_ident table_ident_nodb references xid + table_ident table_ident_nodb references xid %type - remember_name remember_end opt_ident opt_db text_or_password - opt_constraint constraint + remember_name remember_end opt_ident opt_db text_or_password + opt_constraint constraint %type - text_string opt_gconcat_separator + text_string opt_gconcat_separator %type - type int_type real_type order_dir lock_option - udf_type if_exists opt_local opt_table_options table_options + type int_type real_type order_dir lock_option + udf_type if_exists opt_local opt_table_options table_options table_option opt_if_not_exists opt_no_write_to_binlog delete_option opt_temporary all_or_any opt_distinct opt_ignore_leaves fulltext_options spatial_type union_option @@ -1119,28 +1131,28 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); ev_alter_on_schedule_completion opt_ev_rename_to opt_ev_sql_stmt %type - ulong_num real_ulong_num merge_insert_types + ulong_num real_ulong_num merge_insert_types %type - ulonglong_num real_ulonglong_num size_number + ulonglong_num real_ulonglong_num size_number %type part_bit_expr %type - replace_lock_option opt_low_priority insert_lock_option load_data_lock + replace_lock_option opt_low_priority insert_lock_option load_data_lock %type - literal text_literal insert_ident order_ident - simple_ident select_item2 expr opt_expr opt_else sum_expr in_sum_expr - variable variable_aux bool_term bool_factor bool_test bool_pri - predicate bit_expr bit_term bit_factor value_expr term factor - table_wild simple_expr udf_expr - expr_or_default set_expr_or_default interval_expr - param_marker geometry_function - signed_literal now_or_signed_literal opt_escape - sp_opt_default - simple_ident_nospvar simple_ident_q + literal text_literal insert_ident order_ident + simple_ident select_item2 expr opt_expr opt_else sum_expr in_sum_expr + variable variable_aux bool_term bool_factor bool_test bool_pri + predicate bit_expr bit_term bit_factor value_expr term factor + table_wild simple_expr udf_expr + expr_or_default set_expr_or_default interval_expr + param_marker geometry_function + signed_literal now_or_signed_literal opt_escape + sp_opt_default + simple_ident_nospvar simple_ident_q field_or_var limit_option part_func_expr function_call_keyword @@ -1149,29 +1161,29 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); function_call_conflict %type - NUM_literal + NUM_literal %type - expr_list udf_expr_list udf_expr_list2 when_list - ident_list ident_list_arg opt_expr_list + expr_list udf_expr_list udf_expr_list2 when_list + ident_list ident_list_arg opt_expr_list %type option_type opt_var_type opt_var_ident_type %type - key_type opt_unique_or_fulltext constraint_key_type + key_type opt_unique_or_fulltext constraint_key_type %type - btree_or_rtree + btree_or_rtree %type - using_list + using_list %type - key_part + key_part %type - join_table_list join_table + join_table_list join_table table_factor table_ref select_derived derived_table_list @@ -1197,58 +1209,58 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); %type user grant_user %type - opt_collate - charset_name - charset_name_or_default - old_or_new_charset_name - old_or_new_charset_name_or_default - collation_name - collation_name_or_default - opt_load_data_charset + opt_collate + charset_name + charset_name_or_default + old_or_new_charset_name + old_or_new_charset_name_or_default + collation_name + collation_name_or_default + opt_load_data_charset UNDERSCORE_CHARSET %type internal_variable_name %type subselect subselect_init - get_select_lex + get_select_lex %type comp_op %type - query verb_clause create change select do drop insert replace insert2 - insert_values update delete truncate rename - show describe load alter optimize keycache preload flush - reset purge begin commit rollback savepoint release - slave master_def master_defs master_file_def slave_until_opts - repair restore backup analyze check start checksum - field_list field_list_item field_spec kill column_def key_def - keycache_list assign_to_keycache preload_list preload_keys - select_item_list select_item values_list no_braces - opt_limit_clause delete_limit_clause fields opt_values values - procedure_list procedure_list2 procedure_item - expr_list2 udf_expr_list3 handler - opt_precision opt_ignore opt_column opt_restrict - grant revoke set lock unlock string_list field_options field_option - field_opt_list opt_binary table_lock_list table_lock - ref_list opt_on_delete opt_on_delete_list opt_on_delete_item use - opt_delete_options opt_delete_option varchar nchar nvarchar - opt_outer table_list table_name opt_option opt_place - opt_attribute opt_attribute_list attribute column_list column_list_id - opt_column_list grant_privileges grant_ident grant_list grant_option - object_privilege object_privilege_list user_list rename_list - clear_privileges flush_options flush_option - equal optional_braces - opt_mi_check_type opt_to mi_check_types normal_join - db_to_db table_to_table_list table_to_table opt_table_list opt_as - handler_rkey_function handler_read_or_scan - single_multi table_wild_list table_wild_one opt_wild - union_clause union_list - precision subselect_start opt_and charset - subselect_end select_var_list select_var_list_init help opt_len - opt_extended_describe + query verb_clause create change select do drop insert replace insert2 + insert_values update delete truncate rename + show describe load alter optimize keycache preload flush + reset purge begin commit rollback savepoint release + slave master_def master_defs master_file_def slave_until_opts + repair restore backup analyze check start checksum + field_list field_list_item field_spec kill column_def key_def + keycache_list assign_to_keycache preload_list preload_keys + select_item_list select_item values_list no_braces + opt_limit_clause delete_limit_clause fields opt_values values + procedure_list procedure_list2 procedure_item + expr_list2 udf_expr_list3 handler + opt_precision opt_ignore opt_column opt_restrict + grant revoke set lock unlock string_list field_options field_option + field_opt_list opt_binary table_lock_list table_lock + ref_list opt_on_delete opt_on_delete_list opt_on_delete_item use + opt_delete_options opt_delete_option varchar nchar nvarchar + opt_outer table_list table_name opt_option opt_place + opt_attribute opt_attribute_list attribute column_list column_list_id + opt_column_list grant_privileges grant_ident grant_list grant_option + object_privilege object_privilege_list user_list rename_list + clear_privileges flush_options flush_option + equal optional_braces + opt_mi_check_type opt_to mi_check_types normal_join + db_to_db table_to_table_list table_to_table opt_table_list opt_as + handler_rkey_function handler_read_or_scan + single_multi table_wild_list table_wild_one opt_wild + union_clause union_list + precision subselect_start opt_and charset + subselect_end select_var_list select_var_list_init help opt_len + opt_extended_describe prepare prepare_src execute deallocate - statement sp_suid - sp_c_chistics sp_a_chistics sp_chistic sp_c_chistic xa + statement sp_suid + sp_c_chistics sp_a_chistics sp_chistic sp_c_chistic xa load_data opt_field_or_var_spec fields_or_vars opt_load_data_set_spec definer view_replace_or_algorithm view_replace view_algorithm view_or_trigger_or_sp_or_event @@ -1256,7 +1268,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); view_suid view_tail view_list_opt view_list view_select view_check_option trigger_tail sp_tail install uninstall partition_entry binlog_base64_event - init_key_options key_options key_opts key_opt key_using_alg + init_key_options key_options key_opts key_opt key_using_alg server_def server_options_list server_option END_OF_INPUT @@ -1277,376 +1289,396 @@ END_OF_INPUT %type index_hint_clause %type - '-' '+' '*' '/' '%' '(' ')' - ',' '!' '{' '}' '&' '|' AND_SYM OR_SYM OR_OR_SYM BETWEEN_SYM CASE_SYM - THEN_SYM WHEN_SYM DIV_SYM MOD_SYM OR2_SYM AND_AND_SYM + '-' '+' '*' '/' '%' '(' ')' + ',' '!' '{' '}' '&' '|' AND_SYM OR_SYM OR_OR_SYM BETWEEN_SYM CASE_SYM + THEN_SYM WHEN_SYM DIV_SYM MOD_SYM OR2_SYM AND_AND_SYM %% +/* + Indentation of grammar rules: + +rule: <-- starts at col 1 + rule1a rule1b rule1c <-- starts at col 11 + { <-- starts at col 11 + code <-- starts at col 13, indentation is 2 spaces + } + | rule2a rule2b + { + code + } + ; <-- on a line by itself, starts at col 9 + +Also, please do not use any , but spaces. +Having a uniform indentation in this file helps +code reviews, patches, merges, and make maintenance easier. +Thanks. +*/ query: - END_OF_INPUT - { - THD *thd= YYTHD; - if (!thd->bootstrap && - (!(thd->lex->select_lex.options & OPTION_FOUND_COMMENT))) - { - my_message(ER_EMPTY_QUERY, ER(ER_EMPTY_QUERY), MYF(0)); - MYSQL_YYABORT; - } - else - { - thd->lex->sql_command= SQLCOM_EMPTY_QUERY; - } - } - | verb_clause END_OF_INPUT {}; + END_OF_INPUT + { + THD *thd= YYTHD; + if (!thd->bootstrap && + (!(thd->lex->select_lex.options & OPTION_FOUND_COMMENT))) + { + my_message(ER_EMPTY_QUERY, ER(ER_EMPTY_QUERY), MYF(0)); + MYSQL_YYABORT; + } + else + { + thd->lex->sql_command= SQLCOM_EMPTY_QUERY; + } + } + | verb_clause END_OF_INPUT {} + ; verb_clause: - statement - | begin - ; + statement + | begin + ; /* Verb clauses, except begin */ statement: - alter - | analyze - | backup - | binlog_base64_event - | call - | change - | check - | checksum - | commit - | create + alter + | analyze + | backup + | binlog_base64_event + | call + | change + | check + | checksum + | commit + | create | deallocate - | delete - | describe - | do - | drop + | delete + | describe + | do + | drop | execute - | flush - | grant - | handler - | help - | insert + | flush + | grant + | handler + | help + | insert | install - | kill - | load - | lock - | optimize + | kill + | load + | lock + | optimize | keycache | partition_entry - | preload + | preload | prepare - | purge - | release - | rename - | repair - | replace - | reset - | restore - | revoke - | rollback - | savepoint - | select - | set - | show - | slave - | start - | truncate + | purge + | release + | rename + | repair + | replace + | reset + | restore + | revoke + | rollback + | savepoint + | select + | set + | show + | slave + | start + | truncate | uninstall - | unlock - | update - | use - | xa + | unlock + | update + | use + | xa ; deallocate: - deallocate_or_drop PREPARE_SYM ident - { - THD *thd= YYTHD; - LEX *lex= thd->lex; - lex->sql_command= SQLCOM_DEALLOCATE_PREPARE; - lex->prepared_stmt_name= $3; - }; + deallocate_or_drop PREPARE_SYM ident + { + THD *thd= YYTHD; + LEX *lex= thd->lex; + lex->sql_command= SQLCOM_DEALLOCATE_PREPARE; + lex->prepared_stmt_name= $3; + } + ; deallocate_or_drop: - DEALLOCATE_SYM | - DROP - ; - + DEALLOCATE_SYM + | DROP + ; prepare: - PREPARE_SYM ident FROM prepare_src - { - THD *thd= YYTHD; - LEX *lex= thd->lex; - lex->sql_command= SQLCOM_PREPARE; - lex->prepared_stmt_name= $2; - }; + PREPARE_SYM ident FROM prepare_src + { + THD *thd= YYTHD; + LEX *lex= thd->lex; + lex->sql_command= SQLCOM_PREPARE; + lex->prepared_stmt_name= $2; + } + ; prepare_src: - TEXT_STRING_sys - { - THD *thd= YYTHD; - LEX *lex= thd->lex; - lex->prepared_stmt_code= $1; - lex->prepared_stmt_code_is_varref= FALSE; - } + TEXT_STRING_sys + { + THD *thd= YYTHD; + LEX *lex= thd->lex; + lex->prepared_stmt_code= $1; + lex->prepared_stmt_code_is_varref= FALSE; + } | '@' ident_or_text - { - THD *thd= YYTHD; - LEX *lex= thd->lex; - lex->prepared_stmt_code= $2; - lex->prepared_stmt_code_is_varref= TRUE; - }; + { + THD *thd= YYTHD; + LEX *lex= thd->lex; + lex->prepared_stmt_code= $2; + lex->prepared_stmt_code_is_varref= TRUE; + } + ; execute: - EXECUTE_SYM ident - { - THD *thd= YYTHD; - LEX *lex= thd->lex; - lex->sql_command= SQLCOM_EXECUTE; - lex->prepared_stmt_name= $2; - } - execute_using - {} + EXECUTE_SYM ident + { + THD *thd= YYTHD; + LEX *lex= thd->lex; + lex->sql_command= SQLCOM_EXECUTE; + lex->prepared_stmt_name= $2; + } + execute_using + {} ; execute_using: - /* nothing */ + /* nothing */ | USING execute_var_list ; execute_var_list: - execute_var_list ',' execute_var_ident + execute_var_list ',' execute_var_ident | execute_var_ident ; -execute_var_ident: '@' ident_or_text - { - LEX *lex=Lex; - LEX_STRING *lexstr= (LEX_STRING*)sql_memdup(&$2, sizeof(LEX_STRING)); - if (!lexstr || lex->prepared_stmt_params.push_back(lexstr)) +execute_var_ident: + '@' ident_or_text + { + LEX *lex=Lex; + LEX_STRING *lexstr= (LEX_STRING*)sql_memdup(&$2, sizeof(LEX_STRING)); + if (!lexstr || lex->prepared_stmt_params.push_back(lexstr)) MYSQL_YYABORT; - } + } ; /* help */ help: - HELP_SYM - { - if (Lex->sphead) - { - my_error(ER_SP_BADSTATEMENT, MYF(0), "HELP"); - MYSQL_YYABORT; - } - } - ident_or_text - { - LEX *lex= Lex; - lex->sql_command= SQLCOM_HELP; - lex->help_arg= $3.str; - }; + HELP_SYM + { + if (Lex->sphead) + { + my_error(ER_SP_BADSTATEMENT, MYF(0), "HELP"); + MYSQL_YYABORT; + } + } + ident_or_text + { + LEX *lex= Lex; + lex->sql_command= SQLCOM_HELP; + lex->help_arg= $3.str; + } + ; /* change master */ change: - CHANGE MASTER_SYM TO_SYM - { - LEX *lex = Lex; - lex->sql_command = SQLCOM_CHANGE_MASTER; - bzero((char*) &lex->mi, sizeof(lex->mi)); - } - master_defs - {} - ; + CHANGE MASTER_SYM TO_SYM + { + LEX *lex = Lex; + lex->sql_command = SQLCOM_CHANGE_MASTER; + bzero((char*) &lex->mi, sizeof(lex->mi)); + } + master_defs + {} + ; master_defs: - master_def - | master_defs ',' master_def; + master_def + | master_defs ',' master_def + ; master_def: - MASTER_HOST_SYM EQ TEXT_STRING_sys - { - Lex->mi.host = $3.str; - } - | - MASTER_USER_SYM EQ TEXT_STRING_sys - { - Lex->mi.user = $3.str; - } - | - MASTER_PASSWORD_SYM EQ TEXT_STRING_sys - { - Lex->mi.password = $3.str; - } - | - MASTER_PORT_SYM EQ ulong_num - { - Lex->mi.port = $3; - } - | - MASTER_CONNECT_RETRY_SYM EQ ulong_num - { - Lex->mi.connect_retry = $3; - } - | MASTER_SSL_SYM EQ ulong_num - { - Lex->mi.ssl= $3 ? - LEX_MASTER_INFO::SSL_ENABLE : LEX_MASTER_INFO::SSL_DISABLE; - } - | MASTER_SSL_CA_SYM EQ TEXT_STRING_sys - { - Lex->mi.ssl_ca= $3.str; - } - | MASTER_SSL_CAPATH_SYM EQ TEXT_STRING_sys - { - Lex->mi.ssl_capath= $3.str; - } - | MASTER_SSL_CERT_SYM EQ TEXT_STRING_sys - { - Lex->mi.ssl_cert= $3.str; - } - | MASTER_SSL_CIPHER_SYM EQ TEXT_STRING_sys - { - Lex->mi.ssl_cipher= $3.str; - } - | MASTER_SSL_KEY_SYM EQ TEXT_STRING_sys - { - Lex->mi.ssl_key= $3.str; - } - | MASTER_SSL_VERIFY_SERVER_CERT_SYM EQ ulong_num - { - Lex->mi.ssl_verify_server_cert= $3 ? - LEX_MASTER_INFO::SSL_ENABLE : LEX_MASTER_INFO::SSL_DISABLE; - } - | - master_file_def - ; + MASTER_HOST_SYM EQ TEXT_STRING_sys + { + Lex->mi.host = $3.str; + } + | MASTER_USER_SYM EQ TEXT_STRING_sys + { + Lex->mi.user = $3.str; + } + | MASTER_PASSWORD_SYM EQ TEXT_STRING_sys + { + Lex->mi.password = $3.str; + } + | MASTER_PORT_SYM EQ ulong_num + { + Lex->mi.port = $3; + } + | MASTER_CONNECT_RETRY_SYM EQ ulong_num + { + Lex->mi.connect_retry = $3; + } + | MASTER_SSL_SYM EQ ulong_num + { + Lex->mi.ssl= $3 ? + LEX_MASTER_INFO::SSL_ENABLE : LEX_MASTER_INFO::SSL_DISABLE; + } + | MASTER_SSL_CA_SYM EQ TEXT_STRING_sys + { + Lex->mi.ssl_ca= $3.str; + } + | MASTER_SSL_CAPATH_SYM EQ TEXT_STRING_sys + { + Lex->mi.ssl_capath= $3.str; + } + | MASTER_SSL_CERT_SYM EQ TEXT_STRING_sys + { + Lex->mi.ssl_cert= $3.str; + } + | MASTER_SSL_CIPHER_SYM EQ TEXT_STRING_sys + { + Lex->mi.ssl_cipher= $3.str; + } + | MASTER_SSL_KEY_SYM EQ TEXT_STRING_sys + { + Lex->mi.ssl_key= $3.str; + } + | MASTER_SSL_VERIFY_SERVER_CERT_SYM EQ ulong_num + { + Lex->mi.ssl_verify_server_cert= $3 ? + LEX_MASTER_INFO::SSL_ENABLE : LEX_MASTER_INFO::SSL_DISABLE; + } + | master_file_def + ; master_file_def: - MASTER_LOG_FILE_SYM EQ TEXT_STRING_sys - { - Lex->mi.log_file_name = $3.str; - } - | MASTER_LOG_POS_SYM EQ ulonglong_num - { - Lex->mi.pos = $3; - /* - If the user specified a value < BIN_LOG_HEADER_SIZE, adjust it - instead of causing subsequent errors. - We need to do it in this file, because only there we know that - MASTER_LOG_POS has been explicitely specified. On the contrary - in change_master() (sql_repl.cc) we cannot distinguish between 0 - (MASTER_LOG_POS explicitely specified as 0) and 0 (unspecified), - whereas we want to distinguish (specified 0 means "read the binlog - from 0" (4 in fact), unspecified means "don't change the position - (keep the preceding value)"). - */ - Lex->mi.pos = max(BIN_LOG_HEADER_SIZE, Lex->mi.pos); - } - | RELAY_LOG_FILE_SYM EQ TEXT_STRING_sys - { - Lex->mi.relay_log_name = $3.str; - } - | RELAY_LOG_POS_SYM EQ ulong_num - { - Lex->mi.relay_log_pos = $3; - /* Adjust if < BIN_LOG_HEADER_SIZE (same comment as Lex->mi.pos) */ - Lex->mi.relay_log_pos = max(BIN_LOG_HEADER_SIZE, Lex->mi.relay_log_pos); - } - ; + MASTER_LOG_FILE_SYM EQ TEXT_STRING_sys + { + Lex->mi.log_file_name = $3.str; + } + | MASTER_LOG_POS_SYM EQ ulonglong_num + { + Lex->mi.pos = $3; + /* + If the user specified a value < BIN_LOG_HEADER_SIZE, adjust it + instead of causing subsequent errors. + We need to do it in this file, because only there we know that + MASTER_LOG_POS has been explicitely specified. On the contrary + in change_master() (sql_repl.cc) we cannot distinguish between 0 + (MASTER_LOG_POS explicitely specified as 0) and 0 (unspecified), + whereas we want to distinguish (specified 0 means "read the binlog + from 0" (4 in fact), unspecified means "don't change the position + (keep the preceding value)"). + */ + Lex->mi.pos = max(BIN_LOG_HEADER_SIZE, Lex->mi.pos); + } + | RELAY_LOG_FILE_SYM EQ TEXT_STRING_sys + { + Lex->mi.relay_log_name = $3.str; + } + | RELAY_LOG_POS_SYM EQ ulong_num + { + Lex->mi.relay_log_pos = $3; + /* Adjust if < BIN_LOG_HEADER_SIZE (same comment as Lex->mi.pos) */ + Lex->mi.relay_log_pos = max(BIN_LOG_HEADER_SIZE, Lex->mi.relay_log_pos); + } + ; /* create a table */ create: - CREATE opt_table_options TABLE_SYM opt_if_not_exists table_ident - { - THD *thd= YYTHD; - LEX *lex= thd->lex; - lex->sql_command= SQLCOM_CREATE_TABLE; - if (!lex->select_lex.add_table_to_list(thd, $5, NULL, - TL_OPTION_UPDATING, - TL_WRITE)) - MYSQL_YYABORT; - lex->alter_info.reset(); - lex->col_list.empty(); - lex->change=NullS; - bzero((char*) &lex->create_info,sizeof(lex->create_info)); - lex->create_info.options=$2 | $4; - lex->create_info.db_type= ha_default_handlerton(thd); - lex->create_info.default_table_charset= NULL; - lex->name.str= 0; - lex->name.length= 0; - } - create2 - { - LEX *lex= YYTHD->lex; - lex->current_select= &lex->select_lex; - if (!lex->create_info.db_type) + CREATE opt_table_options TABLE_SYM opt_if_not_exists table_ident { - lex->create_info.db_type= ha_default_handlerton(YYTHD); - push_warning_printf(YYTHD, MYSQL_ERROR::WARN_LEVEL_WARN, - ER_WARN_USING_OTHER_HANDLER, - ER(ER_WARN_USING_OTHER_HANDLER), - ha_resolve_storage_engine_name(lex->create_info.db_type), - $5->table.str); + THD *thd= YYTHD; + LEX *lex= thd->lex; + lex->sql_command= SQLCOM_CREATE_TABLE; + if (!lex->select_lex.add_table_to_list(thd, $5, NULL, + TL_OPTION_UPDATING, + TL_WRITE)) + MYSQL_YYABORT; + lex->alter_info.reset(); + lex->col_list.empty(); + lex->change=NullS; + bzero((char*) &lex->create_info,sizeof(lex->create_info)); + lex->create_info.options=$2 | $4; + lex->create_info.db_type= ha_default_handlerton(thd); + lex->create_info.default_table_charset= NULL; + lex->name.str= 0; + lex->name.length= 0; } - } - | CREATE opt_unique_or_fulltext INDEX_SYM ident key_alg ON - table_ident - { - LEX *lex=Lex; - lex->sql_command= SQLCOM_CREATE_INDEX; - if (!lex->current_select->add_table_to_list(lex->thd, $7, - NULL, - TL_OPTION_UPDATING)) - MYSQL_YYABORT; + create2 + { + LEX *lex= YYTHD->lex; + lex->current_select= &lex->select_lex; + if (!lex->create_info.db_type) + { + lex->create_info.db_type= ha_default_handlerton(YYTHD); + push_warning_printf(YYTHD, MYSQL_ERROR::WARN_LEVEL_WARN, + ER_WARN_USING_OTHER_HANDLER, + ER(ER_WARN_USING_OTHER_HANDLER), + ha_resolve_storage_engine_name(lex->create_info.db_type), + $5->table.str); + } + } + | CREATE opt_unique_or_fulltext INDEX_SYM ident key_alg ON + table_ident + { + LEX *lex=Lex; + lex->sql_command= SQLCOM_CREATE_INDEX; + if (!lex->current_select->add_table_to_list(lex->thd, $7, + NULL, + TL_OPTION_UPDATING)) + MYSQL_YYABORT; lex->alter_info.reset(); lex->alter_info.flags= ALTER_ADD_INDEX; - lex->col_list.empty(); - lex->change=NullS; - } - '(' key_list ')' key_options - { - LEX *lex=Lex; + lex->col_list.empty(); + lex->change=NullS; + } + '(' key_list ')' key_options + { + LEX *lex=Lex; Key *key; - if ($2 != Key::FULLTEXT && lex->key_create_info.parser_name.str) - { - my_parse_error(ER(ER_SYNTAX_ERROR)); - MYSQL_YYABORT; - } + if ($2 != Key::FULLTEXT && lex->key_create_info.parser_name.str) + { + my_parse_error(ER(ER_SYNTAX_ERROR)); + MYSQL_YYABORT; + } key= new Key($2, $4.str, &lex->key_create_info, 0, lex->col_list); lex->alter_info.key_list.push_back(key); - lex->col_list.empty(); - } - | CREATE DATABASE opt_if_not_exists ident - { - Lex->create_info.default_table_charset= NULL; - Lex->create_info.used_fields= 0; + lex->col_list.empty(); } - opt_create_database_options - { - LEX *lex=Lex; - lex->sql_command=SQLCOM_CREATE_DB; - lex->name= $4; + | CREATE DATABASE opt_if_not_exists ident + { + Lex->create_info.default_table_charset= NULL; + Lex->create_info.used_fields= 0; + } + opt_create_database_options + { + LEX *lex=Lex; + lex->sql_command=SQLCOM_CREATE_DB; + lex->name= $4; lex->create_info.options=$3; - } - | CREATE - { + } + | CREATE + { Lex->create_view_mode= VIEW_CREATE_NEW; Lex->create_view_algorithm= VIEW_ALGORITHM_UNDEFINED; Lex->create_view_suid= TRUE; - } - view_or_trigger_or_sp_or_event - {} - | CREATE USER clear_privileges grant_list - { - Lex->sql_command = SQLCOM_CREATE_USER; } - | CREATE LOGFILE_SYM GROUP_SYM logfile_group_info + view_or_trigger_or_sp_or_event + {} + | CREATE USER clear_privileges grant_list + { + Lex->sql_command = SQLCOM_CREATE_USER; + } + | CREATE LOGFILE_SYM GROUP_SYM logfile_group_info { Lex->alter_tablespace_info->ts_cmd_type= CREATE_LOGFILE_GROUP; } @@ -1654,67 +1686,66 @@ create: { Lex->alter_tablespace_info->ts_cmd_type= CREATE_TABLESPACE; } - | CREATE server_def - { - Lex->sql_command= SQLCOM_CREATE_SERVER; + | CREATE server_def + { + Lex->sql_command= SQLCOM_CREATE_SERVER; } - ; + ; + server_def: - SERVER_SYM ident_or_text FOREIGN DATA_SYM WRAPPER_SYM ident_or_text OPTIONS_SYM '(' server_options_list ')' - { - Lex->server_options.server_name= $2.str; - Lex->server_options.server_name_length= $2.length; - Lex->server_options.scheme= $6.str; - } + SERVER_SYM + ident_or_text + FOREIGN DATA_SYM WRAPPER_SYM + ident_or_text + OPTIONS_SYM '(' server_options_list ')' + { + Lex->server_options.server_name= $2.str; + Lex->server_options.server_name_length= $2.length; + Lex->server_options.scheme= $6.str; + } ; server_options_list: - server_option + server_option | server_options_list ',' server_option ; server_option: - USER TEXT_STRING_sys - { - Lex->server_options.username= $2.str; - } - | - HOST_SYM TEXT_STRING_sys - { - Lex->server_options.host= $2.str; - } - | - DATABASE TEXT_STRING_sys - { - Lex->server_options.db= $2.str; - } - | - OWNER_SYM TEXT_STRING_sys - { - Lex->server_options.owner= $2.str; - } - | - PASSWORD TEXT_STRING_sys - { - Lex->server_options.password= $2.str; - } - | - SOCKET_SYM TEXT_STRING_sys - { - Lex->server_options.socket= $2.str; - } - | - PORT_SYM ulong_num - { - Lex->server_options.port= $2; - } + USER TEXT_STRING_sys + { + Lex->server_options.username= $2.str; + } + | HOST_SYM TEXT_STRING_sys + { + Lex->server_options.host= $2.str; + } + | DATABASE TEXT_STRING_sys + { + Lex->server_options.db= $2.str; + } + | OWNER_SYM TEXT_STRING_sys + { + Lex->server_options.owner= $2.str; + } + | PASSWORD TEXT_STRING_sys + { + Lex->server_options.password= $2.str; + } + | SOCKET_SYM TEXT_STRING_sys + { + Lex->server_options.socket= $2.str; + } + | PORT_SYM ulong_num + { + Lex->server_options.port= $2; + } ; event_tail: EVENT_SYM opt_if_not_exists sp_name /* - BE CAREFUL when you add a new rule to update the block where - YYTHD->client_capabilities is set back to original value + BE CAREFUL when you add a new rule to update the block where + YYTHD->client_capabilities is set back to original value */ { THD *thd= YYTHD; @@ -1758,10 +1789,11 @@ event_tail: */ Lex->sql_command= SQLCOM_CREATE_EVENT; } - ; + ; -ev_schedule_time: EVERY_SYM expr interval - { +ev_schedule_time: + EVERY_SYM expr interval + { Lex->event_parse_data->item_expression= $2; Lex->event_parse_data->interval= $3; } @@ -1773,7 +1805,8 @@ ev_schedule_time: EVERY_SYM expr interval } ; -opt_ev_status: /* empty */ { $$= 0; } +opt_ev_status: + /* empty */ { $$= 0; } | ENABLE_SYM { Lex->event_parse_data->status= Event_basic::ENABLED; @@ -1789,9 +1822,10 @@ opt_ev_status: /* empty */ { $$= 0; } Lex->event_parse_data->status= Event_basic::DISABLED; $$= 1; } - ; + ; -ev_starts: /* empty */ +ev_starts: + /* empty */ { Lex->event_parse_data->item_starts= new Item_func_now_local(); } @@ -1799,18 +1833,20 @@ ev_starts: /* empty */ { Lex->event_parse_data->item_starts= $2; } - ; + ; -ev_ends: /* empty */ +ev_ends: + /* empty */ | ENDS_SYM expr { Lex->event_parse_data->item_ends= $2; } - ; + ; -opt_ev_on_completion: /* empty */ { $$= 0; } +opt_ev_on_completion: + /* empty */ { $$= 0; } | ev_on_completion - ; + ; ev_on_completion: ON COMPLETION_SYM PRESERVE_SYM @@ -1825,15 +1861,16 @@ ev_on_completion: Event_basic::ON_COMPLETION_DROP; $$= 1; } - ; + ; -opt_ev_comment: /* empty */ { $$= 0; } +opt_ev_comment: + /* empty */ { $$= 0; } | COMMENT_SYM TEXT_STRING_sys { Lex->comment= Lex->event_parse_data->comment= $2; $$= 1; } - ; + ; ev_sql_stmt: { @@ -1869,7 +1906,7 @@ ev_sql_stmt: lex->sphead->reset_thd_mem_root(thd); lex->sphead->init(lex); - lex->sphead->init_sp_name(thd, lex->event_parse_data->identifier); + lex->sphead->init_sp_name(thd, lex->event_parse_data->identifier); lex->sphead->m_type= TYPE_ENUM_PROCEDURE; @@ -1891,7 +1928,7 @@ ev_sql_stmt: lex->event_parse_data->body_changed= TRUE; } - ; + ; ev_sql_stmt_inner: sp_proc_stmt_statement @@ -1905,61 +1942,60 @@ ev_sql_stmt_inner: | sp_proc_stmt_open | sp_proc_stmt_fetch | sp_proc_stmt_close - ; - + ; clear_privileges: - /* Nothing */ - { - LEX *lex=Lex; - lex->users_list.empty(); - lex->columns.empty(); - lex->grant= lex->grant_tot_col= 0; - lex->all_privileges= 0; - lex->select_lex.db= 0; - lex->ssl_type= SSL_TYPE_NOT_SPECIFIED; - lex->ssl_cipher= lex->x509_subject= lex->x509_issuer= 0; - bzero((char *)&(lex->mqh),sizeof(lex->mqh)); - } + /* Nothing */ + { + LEX *lex=Lex; + lex->users_list.empty(); + lex->columns.empty(); + lex->grant= lex->grant_tot_col= 0; + lex->all_privileges= 0; + lex->select_lex.db= 0; + lex->ssl_type= SSL_TYPE_NOT_SPECIFIED; + lex->ssl_cipher= lex->x509_subject= lex->x509_issuer= 0; + bzero((char *)&(lex->mqh),sizeof(lex->mqh)); + } ; sp_name: - ident '.' ident - { + ident '.' ident + { if (!$1.str || check_db_name(&$1)) { - my_error(ER_WRONG_DB_NAME, MYF(0), $1.str); - MYSQL_YYABORT; - } - if (check_routine_name(&$3)) + my_error(ER_WRONG_DB_NAME, MYF(0), $1.str); + MYSQL_YYABORT; + } + if (check_routine_name(&$3)) { - MYSQL_YYABORT; - } - $$= new sp_name($1, $3, true); - $$->init_qname(YYTHD); - } - | ident - { + MYSQL_YYABORT; + } + $$= new sp_name($1, $3, true); + $$->init_qname(YYTHD); + } + | ident + { THD *thd= YYTHD; LEX *lex= thd->lex; LEX_STRING db; - if (check_routine_name(&$1)) + if (check_routine_name(&$1)) { - MYSQL_YYABORT; - } + MYSQL_YYABORT; + } if (lex->copy_db_to(&db.str, &db.length)) MYSQL_YYABORT; - $$= new sp_name(db, $1, false); + $$= new sp_name(db, $1, false); if ($$) - $$->init_qname(thd); - } - ; + $$->init_qname(thd); + } + ; create_function_tail: - RETURNS_SYM udf_type SONAME_SYM TEXT_STRING_sys - { + RETURNS_SYM udf_type SONAME_SYM TEXT_STRING_sys + { THD *thd= YYTHD; - LEX *lex= thd->lex; + LEX *lex= thd->lex; if (lex->definer != NULL) { /* @@ -1968,7 +2004,7 @@ create_function_tail: Using DEFINER with UDF has therefore no semantic, and is considered a parsing error. */ - my_error(ER_WRONG_USAGE, MYF(0), "SONAME", "DEFINER"); + my_error(ER_WRONG_USAGE, MYF(0), "SONAME", "DEFINER"); MYSQL_YYABORT; } if (is_native_function(thd, & lex->spname->m_name)) @@ -1977,17 +2013,17 @@ create_function_tail: lex->spname->m_name.str); MYSQL_YYABORT; } - lex->sql_command = SQLCOM_CREATE_FUNCTION; - lex->udf.name = lex->spname->m_name; - lex->udf.returns=(Item_result) $2; - lex->udf.dl=$4.str; - } - | '(' - { + lex->sql_command = SQLCOM_CREATE_FUNCTION; + lex->udf.name = lex->spname->m_name; + lex->udf.returns=(Item_result) $2; + lex->udf.dl=$4.str; + } + | '(' + { THD *thd= YYTHD; LEX *lex= thd->lex; Lex_input_stream *lip= thd->m_lip; - sp_head *sp; + sp_head *sp; const char* tmp_param_begin; /* @@ -2000,51 +2036,51 @@ create_function_tail: MYSQL_YYABORT; } - if (lex->sphead) - { - my_error(ER_SP_NO_RECURSIVE_CREATE, MYF(0), "FUNCTION"); - MYSQL_YYABORT; - } - /* Order is important here: new - reset - init */ - sp= new sp_head(); - sp->reset_thd_mem_root(thd); - sp->init(lex); + if (lex->sphead) + { + my_error(ER_SP_NO_RECURSIVE_CREATE, MYF(0), "FUNCTION"); + MYSQL_YYABORT; + } + /* Order is important here: new - reset - init */ + sp= new sp_head(); + sp->reset_thd_mem_root(thd); + sp->init(lex); sp->init_sp_name(thd, lex->spname); - sp->m_type= TYPE_ENUM_FUNCTION; - lex->sphead= sp; - /* - We have to turn off CLIENT_MULTI_QUERIES while parsing a - stored procedure, otherwise yylex will chop it into pieces - at each ';'. - */ + sp->m_type= TYPE_ENUM_FUNCTION; + lex->sphead= sp; + /* + We have to turn off CLIENT_MULTI_QUERIES while parsing a + stored procedure, otherwise yylex will chop it into pieces + at each ';'. + */ $$= thd->client_capabilities & CLIENT_MULTI_QUERIES; - thd->client_capabilities &= ~CLIENT_MULTI_QUERIES; + thd->client_capabilities &= ~CLIENT_MULTI_QUERIES; tmp_param_begin= lip->get_cpp_tok_start(); tmp_param_begin++; lex->sphead->m_param_begin= tmp_param_begin; - } + } sp_fdparam_list ')' - { + { THD *thd= YYTHD; LEX *lex= thd->lex; Lex_input_stream *lip= thd->m_lip; lex->sphead->m_param_end= lip->get_cpp_tok_start(); - } - RETURNS_SYM - { - LEX *lex= Lex; - lex->charset= NULL; - lex->length= lex->dec= NULL; - lex->interval_list.empty(); - lex->type= 0; - } - type - { - LEX *lex= Lex; - sp_head *sp= lex->sphead; + } + RETURNS_SYM + { + LEX *lex= Lex; + lex->charset= NULL; + lex->length= lex->dec= NULL; + lex->interval_list.empty(); + lex->type= 0; + } + type + { + LEX *lex= Lex; + sp_head *sp= lex->sphead; /* This was disabled in 5.1.12. See bug #20701 When collation support in SP is implemented, then this test @@ -2062,28 +2098,28 @@ create_function_tail: &sp->m_return_field_def)) MYSQL_YYABORT; - bzero((char *)&lex->sp_chistics, sizeof(st_sp_chistics)); - } - sp_c_chistics - { + bzero((char *)&lex->sp_chistics, sizeof(st_sp_chistics)); + } + sp_c_chistics + { THD *thd= YYTHD; LEX *lex= thd->lex; Lex_input_stream *lip= thd->m_lip; - lex->sphead->m_chistics= &lex->sp_chistics; + lex->sphead->m_chistics= &lex->sp_chistics; lex->sphead->set_body_start(thd, lip->get_cpp_tok_start()); - } - sp_proc_stmt - { + } + sp_proc_stmt + { THD *thd= YYTHD; - LEX *lex= thd->lex; - sp_head *sp= lex->sphead; + LEX *lex= thd->lex; + sp_head *sp= lex->sphead; if (sp->is_not_allowed_in_function("function")) MYSQL_YYABORT; - lex->sql_command= SQLCOM_CREATE_SPFUNCTION; - sp->set_stmt_end(thd); + lex->sql_command= SQLCOM_CREATE_SPFUNCTION; + sp->set_stmt_end(thd); if (!(sp->m_flags & sp_head::HAS_RETURN)) { my_error(ER_SP_NORETURN, MYF(0), sp->m_qname.str); @@ -2124,76 +2160,76 @@ create_function_tail: ER(ER_NATIVE_FCT_NAME_COLLISION), sp->m_name.str); } - /* Restore flag if it was cleared above */ - thd->client_capabilities |= $2; - sp->restore_thd_mem_root(thd); - } - ; + /* Restore flag if it was cleared above */ + thd->client_capabilities |= $2; + sp->restore_thd_mem_root(thd); + } + ; sp_a_chistics: - /* Empty */ {} - | sp_a_chistics sp_chistic {} - ; + /* Empty */ {} + | sp_a_chistics sp_chistic {} + ; sp_c_chistics: - /* Empty */ {} - | sp_c_chistics sp_c_chistic {} - ; + /* Empty */ {} + | sp_c_chistics sp_c_chistic {} + ; /* Characteristics for both create and alter */ sp_chistic: - COMMENT_SYM TEXT_STRING_sys - { Lex->sp_chistics.comment= $2; } - | LANGUAGE_SYM SQL_SYM - { /* Just parse it, we only have one language for now. */ } - | NO_SYM SQL_SYM - { Lex->sp_chistics.daccess= SP_NO_SQL; } - | CONTAINS_SYM SQL_SYM - { Lex->sp_chistics.daccess= SP_CONTAINS_SQL; } - | READS_SYM SQL_SYM DATA_SYM - { Lex->sp_chistics.daccess= SP_READS_SQL_DATA; } - | MODIFIES_SYM SQL_SYM DATA_SYM - { Lex->sp_chistics.daccess= SP_MODIFIES_SQL_DATA; } - | sp_suid - { } - ; + COMMENT_SYM TEXT_STRING_sys + { Lex->sp_chistics.comment= $2; } + | LANGUAGE_SYM SQL_SYM + { /* Just parse it, we only have one language for now. */ } + | NO_SYM SQL_SYM + { Lex->sp_chistics.daccess= SP_NO_SQL; } + | CONTAINS_SYM SQL_SYM + { Lex->sp_chistics.daccess= SP_CONTAINS_SQL; } + | READS_SYM SQL_SYM DATA_SYM + { Lex->sp_chistics.daccess= SP_READS_SQL_DATA; } + | MODIFIES_SYM SQL_SYM DATA_SYM + { Lex->sp_chistics.daccess= SP_MODIFIES_SQL_DATA; } + | sp_suid + {} + ; /* Create characteristics */ sp_c_chistic: - sp_chistic { } - | DETERMINISTIC_SYM { Lex->sp_chistics.detistic= TRUE; } - | not DETERMINISTIC_SYM { Lex->sp_chistics.detistic= FALSE; } - ; + sp_chistic { } + | DETERMINISTIC_SYM { Lex->sp_chistics.detistic= TRUE; } + | not DETERMINISTIC_SYM { Lex->sp_chistics.detistic= FALSE; } + ; sp_suid: - SQL_SYM SECURITY_SYM DEFINER_SYM - { - Lex->sp_chistics.suid= SP_IS_SUID; - } - | SQL_SYM SECURITY_SYM INVOKER_SYM - { - Lex->sp_chistics.suid= SP_IS_NOT_SUID; - } - ; + SQL_SYM SECURITY_SYM DEFINER_SYM + { + Lex->sp_chistics.suid= SP_IS_SUID; + } + | SQL_SYM SECURITY_SYM INVOKER_SYM + { + Lex->sp_chistics.suid= SP_IS_NOT_SUID; + } + ; call: - CALL_SYM sp_name - { - LEX *lex = Lex; + CALL_SYM sp_name + { + LEX *lex = Lex; - lex->sql_command= SQLCOM_CALL; - lex->spname= $2; - lex->value_list.empty(); - sp_add_used_routine(lex, YYTHD, $2, TYPE_ENUM_PROCEDURE); - } + lex->sql_command= SQLCOM_CALL; + lex->spname= $2; + lex->value_list.empty(); + sp_add_used_routine(lex, YYTHD, $2, TYPE_ENUM_PROCEDURE); + } opt_sp_cparam_list {} - ; + ; /* CALL parameters */ opt_sp_cparam_list: - /* Empty */ - | '(' opt_sp_cparams ')' - ; + /* Empty */ + | '(' opt_sp_cparams ')' + ; opt_sp_cparams: /* Empty */ @@ -2201,58 +2237,58 @@ opt_sp_cparams: ; sp_cparams: - sp_cparams ',' expr - { - Lex->value_list.push_back($3); - } - | expr - { - Lex->value_list.push_back($1); - } - ; + sp_cparams ',' expr + { + Lex->value_list.push_back($3); + } + | expr + { + Lex->value_list.push_back($1); + } + ; /* Stored FUNCTION parameter declaration list */ sp_fdparam_list: - /* Empty */ - | sp_fdparams - ; + /* Empty */ + | sp_fdparams + ; sp_fdparams: - sp_fdparams ',' sp_fdparam - | sp_fdparam - ; + sp_fdparams ',' sp_fdparam + | sp_fdparam + ; sp_init_param: - /* Empty */ - { - LEX *lex= Lex; + /* Empty */ + { + LEX *lex= Lex; - lex->length= 0; - lex->dec= 0; - lex->type= 0; - - lex->default_value= 0; - lex->on_update_value= 0; - - lex->comment= null_lex_str; - lex->charset= NULL; - - lex->interval_list.empty(); - lex->uint_geom_type= 0; - } - ; + lex->length= 0; + lex->dec= 0; + lex->type= 0; + + lex->default_value= 0; + lex->on_update_value= 0; + + lex->comment= null_lex_str; + lex->charset= NULL; + + lex->interval_list.empty(); + lex->uint_geom_type= 0; + } + ; sp_fdparam: - ident sp_init_param type - { - LEX *lex= Lex; - sp_pcontext *spc= lex->spcont; + ident sp_init_param type + { + LEX *lex= Lex; + sp_pcontext *spc= lex->spcont; - if (spc->find_variable(&$1, TRUE)) - { - my_error(ER_SP_DUP_PARAM, MYF(0), $1.str); - MYSQL_YYABORT; - } + if (spc->find_variable(&$1, TRUE)) + { + my_error(ER_SP_DUP_PARAM, MYF(0), $1.str); + MYSQL_YYABORT; + } sp_variable_t *spvar= spc->push_variable(&$1, (enum enum_field_types)$3, sp_param_in); @@ -2265,31 +2301,31 @@ sp_fdparam: } spvar->field_def.field_name= spvar->name.str; spvar->field_def.pack_flag |= FIELDFLAG_MAYBE_NULL; - } - ; + } + ; /* Stored PROCEDURE parameter declaration list */ sp_pdparam_list: - /* Empty */ - | sp_pdparams - ; + /* Empty */ + | sp_pdparams + ; sp_pdparams: - sp_pdparams ',' sp_pdparam - | sp_pdparam - ; + sp_pdparams ',' sp_pdparam + | sp_pdparam + ; sp_pdparam: - sp_opt_inout sp_init_param ident type - { - LEX *lex= Lex; - sp_pcontext *spc= lex->spcont; + sp_opt_inout sp_init_param ident type + { + LEX *lex= Lex; + sp_pcontext *spc= lex->spcont; - if (spc->find_variable(&$3, TRUE)) - { - my_error(ER_SP_DUP_PARAM, MYF(0), $3.str); - MYSQL_YYABORT; - } + if (spc->find_variable(&$3, TRUE)) + { + my_error(ER_SP_DUP_PARAM, MYF(0), $3.str); + MYSQL_YYABORT; + } sp_variable_t *spvar= spc->push_variable(&$3, (enum enum_field_types)$4, (sp_param_mode_t)$1); @@ -2302,55 +2338,55 @@ sp_pdparam: } spvar->field_def.field_name= spvar->name.str; spvar->field_def.pack_flag |= FIELDFLAG_MAYBE_NULL; - } - ; + } + ; sp_opt_inout: - /* Empty */ { $$= sp_param_in; } - | IN_SYM { $$= sp_param_in; } - | OUT_SYM { $$= sp_param_out; } - | INOUT_SYM { $$= sp_param_inout; } - ; + /* Empty */ { $$= sp_param_in; } + | IN_SYM { $$= sp_param_in; } + | OUT_SYM { $$= sp_param_out; } + | INOUT_SYM { $$= sp_param_inout; } + ; sp_proc_stmts: - /* Empty */ {} - | sp_proc_stmts sp_proc_stmt ';' - ; + /* Empty */ {} + | sp_proc_stmts sp_proc_stmt ';' + ; sp_proc_stmts1: - sp_proc_stmt ';' {} - | sp_proc_stmts1 sp_proc_stmt ';' - ; + sp_proc_stmt ';' {} + | sp_proc_stmts1 sp_proc_stmt ';' + ; sp_decls: - /* Empty */ - { - $$.vars= $$.conds= $$.hndlrs= $$.curs= 0; - } - | sp_decls sp_decl ';' - { - /* We check for declarations out of (standard) order this way - because letting the grammar rules reflect it caused tricky - shift/reduce conflicts with the wrong result. (And we get - better error handling this way.) */ - if (($2.vars || $2.conds) && ($1.curs || $1.hndlrs)) - { /* Variable or condition following cursor or handler */ - my_message(ER_SP_VARCOND_AFTER_CURSHNDLR, + /* Empty */ + { + $$.vars= $$.conds= $$.hndlrs= $$.curs= 0; + } + | sp_decls sp_decl ';' + { + /* We check for declarations out of (standard) order this way + because letting the grammar rules reflect it caused tricky + shift/reduce conflicts with the wrong result. (And we get + better error handling this way.) */ + if (($2.vars || $2.conds) && ($1.curs || $1.hndlrs)) + { /* Variable or condition following cursor or handler */ + my_message(ER_SP_VARCOND_AFTER_CURSHNDLR, ER(ER_SP_VARCOND_AFTER_CURSHNDLR), MYF(0)); - MYSQL_YYABORT; - } - if ($2.curs && $1.hndlrs) - { /* Cursor following handler */ - my_message(ER_SP_CURSOR_AFTER_HANDLER, + MYSQL_YYABORT; + } + if ($2.curs && $1.hndlrs) + { /* Cursor following handler */ + my_message(ER_SP_CURSOR_AFTER_HANDLER, ER(ER_SP_CURSOR_AFTER_HANDLER), MYF(0)); - MYSQL_YYABORT; - } - $$.vars= $1.vars + $2.vars; - $$.conds= $1.conds + $2.conds; - $$.hndlrs= $1.hndlrs + $2.hndlrs; - $$.curs= $1.curs + $2.curs; - } - ; + MYSQL_YYABORT; + } + $$.vars= $1.vars + $2.vars; + $$.conds= $1.conds + $2.conds; + $$.hndlrs= $1.hndlrs + $2.hndlrs; + $$.curs= $1.curs + $2.curs; + } + ; sp_decl: DECLARE_SYM sp_decl_idents @@ -2409,126 +2445,126 @@ sp_decl: $$.vars= $2; $$.conds= $$.hndlrs= $$.curs= 0; } - | DECLARE_SYM ident CONDITION_SYM FOR_SYM sp_cond - { - LEX *lex= Lex; - sp_pcontext *spc= lex->spcont; + | DECLARE_SYM ident CONDITION_SYM FOR_SYM sp_cond + { + LEX *lex= Lex; + sp_pcontext *spc= lex->spcont; - if (spc->find_cond(&$2, TRUE)) - { - my_error(ER_SP_DUP_COND, MYF(0), $2.str); - MYSQL_YYABORT; - } - YYTHD->lex->spcont->push_cond(&$2, $5); - $$.vars= $$.hndlrs= $$.curs= 0; - $$.conds= 1; - } - | DECLARE_SYM sp_handler_type HANDLER_SYM FOR_SYM - { - LEX *lex= Lex; - sp_head *sp= lex->sphead; + if (spc->find_cond(&$2, TRUE)) + { + my_error(ER_SP_DUP_COND, MYF(0), $2.str); + MYSQL_YYABORT; + } + YYTHD->lex->spcont->push_cond(&$2, $5); + $$.vars= $$.hndlrs= $$.curs= 0; + $$.conds= 1; + } + | DECLARE_SYM sp_handler_type HANDLER_SYM FOR_SYM + { + LEX *lex= Lex; + sp_head *sp= lex->sphead; lex->spcont= lex->spcont->push_context(LABEL_HANDLER_SCOPE); - sp_pcontext *ctx= lex->spcont; - sp_instr_hpush_jump *i= + sp_pcontext *ctx= lex->spcont; + sp_instr_hpush_jump *i= new sp_instr_hpush_jump(sp->instructions(), ctx, $2, - ctx->current_var_count()); + ctx->current_var_count()); - sp->add_instr(i); - sp->push_backpatch(i, ctx->push_label((char *)"", 0)); - } - sp_hcond_list sp_proc_stmt - { - LEX *lex= Lex; - sp_head *sp= lex->sphead; - sp_pcontext *ctx= lex->spcont; - sp_label_t *hlab= lex->spcont->pop_label(); /* After this hdlr */ - sp_instr_hreturn *i; + sp->add_instr(i); + sp->push_backpatch(i, ctx->push_label((char *)"", 0)); + } + sp_hcond_list sp_proc_stmt + { + LEX *lex= Lex; + sp_head *sp= lex->sphead; + sp_pcontext *ctx= lex->spcont; + sp_label_t *hlab= lex->spcont->pop_label(); /* After this hdlr */ + sp_instr_hreturn *i; - if ($2 == SP_HANDLER_CONTINUE) - { - i= new sp_instr_hreturn(sp->instructions(), ctx, - ctx->current_var_count()); - sp->add_instr(i); - } - else - { /* EXIT or UNDO handler, just jump to the end of the block */ - i= new sp_instr_hreturn(sp->instructions(), ctx, 0); + if ($2 == SP_HANDLER_CONTINUE) + { + i= new sp_instr_hreturn(sp->instructions(), ctx, + ctx->current_var_count()); + sp->add_instr(i); + } + else + { /* EXIT or UNDO handler, just jump to the end of the block */ + i= new sp_instr_hreturn(sp->instructions(), ctx, 0); - sp->add_instr(i); - sp->push_backpatch(i, lex->spcont->last_label()); /* Block end */ - } - lex->sphead->backpatch(hlab); + sp->add_instr(i); + sp->push_backpatch(i, lex->spcont->last_label()); /* Block end */ + } + lex->sphead->backpatch(hlab); lex->spcont= ctx->pop_context(); - $$.vars= $$.conds= $$.curs= 0; - $$.hndlrs= $6; - lex->spcont->add_handlers($6); - } - | DECLARE_SYM ident CURSOR_SYM FOR_SYM sp_cursor_stmt - { - LEX *lex= Lex; - sp_head *sp= lex->sphead; - sp_pcontext *ctx= lex->spcont; - uint offp; - sp_instr_cpush *i; + $$.vars= $$.conds= $$.curs= 0; + $$.hndlrs= $6; + lex->spcont->add_handlers($6); + } + | DECLARE_SYM ident CURSOR_SYM FOR_SYM sp_cursor_stmt + { + LEX *lex= Lex; + sp_head *sp= lex->sphead; + sp_pcontext *ctx= lex->spcont; + uint offp; + sp_instr_cpush *i; - if (ctx->find_cursor(&$2, &offp, TRUE)) - { - my_error(ER_SP_DUP_CURS, MYF(0), $2.str); - delete $5; - MYSQL_YYABORT; - } + if (ctx->find_cursor(&$2, &offp, TRUE)) + { + my_error(ER_SP_DUP_CURS, MYF(0), $2.str); + delete $5; + MYSQL_YYABORT; + } i= new sp_instr_cpush(sp->instructions(), ctx, $5, ctx->current_cursor_count()); - sp->add_instr(i); - ctx->push_cursor(&$2); - $$.vars= $$.conds= $$.hndlrs= 0; - $$.curs= 1; - } - ; + sp->add_instr(i); + ctx->push_cursor(&$2); + $$.vars= $$.conds= $$.hndlrs= 0; + $$.curs= 1; + } + ; sp_cursor_stmt: - { - Lex->sphead->reset_lex(YYTHD); + { + Lex->sphead->reset_lex(YYTHD); - /* - We use statement here just be able to get a better - error message. Using 'select' works too, but will then - result in a generic "syntax error" if a non-select - statement is given. - */ - } - statement - { - LEX *lex= Lex; + /* + We use statement here just be able to get a better + error message. Using 'select' works too, but will then + result in a generic "syntax error" if a non-select + statement is given. + */ + } + statement + { + LEX *lex= Lex; - if (lex->sql_command != SQLCOM_SELECT && - !(sql_command_flags[lex->sql_command] & CF_STATUS_COMMAND)) - { - my_message(ER_SP_BAD_CURSOR_QUERY, ER(ER_SP_BAD_CURSOR_QUERY), + if (lex->sql_command != SQLCOM_SELECT && + !(sql_command_flags[lex->sql_command] & CF_STATUS_COMMAND)) + { + my_message(ER_SP_BAD_CURSOR_QUERY, ER(ER_SP_BAD_CURSOR_QUERY), MYF(0)); - MYSQL_YYABORT; - } - if (lex->result) - { - my_message(ER_SP_BAD_CURSOR_SELECT, ER(ER_SP_BAD_CURSOR_SELECT), + MYSQL_YYABORT; + } + if (lex->result) + { + my_message(ER_SP_BAD_CURSOR_SELECT, ER(ER_SP_BAD_CURSOR_SELECT), MYF(0)); - MYSQL_YYABORT; - } - lex->sp_lex_in_use= TRUE; - $$= lex; - lex->sphead->restore_lex(YYTHD); - } - ; + MYSQL_YYABORT; + } + lex->sp_lex_in_use= TRUE; + $$= lex; + lex->sphead->restore_lex(YYTHD); + } + ; sp_handler_type: - EXIT_SYM { $$= SP_HANDLER_EXIT; } - | CONTINUE_SYM { $$= SP_HANDLER_CONTINUE; } -/* | UNDO_SYM { QQ No yet } */ - ; + EXIT_SYM { $$= SP_HANDLER_EXIT; } + | CONTINUE_SYM { $$= SP_HANDLER_CONTINUE; } + /*| UNDO_SYM { QQ No yet } */ + ; sp_hcond_list: sp_hcond_element @@ -2538,174 +2574,175 @@ sp_hcond_list: ; sp_hcond_element: - sp_hcond - { - LEX *lex= Lex; - sp_head *sp= lex->sphead; - sp_pcontext *ctx= lex->spcont->parent_context(); + sp_hcond + { + LEX *lex= Lex; + sp_head *sp= lex->sphead; + sp_pcontext *ctx= lex->spcont->parent_context(); - if (ctx->find_handler($1)) - { - my_message(ER_SP_DUP_HANDLER, ER(ER_SP_DUP_HANDLER), MYF(0)); - MYSQL_YYABORT; - } - else - { - sp_instr_hpush_jump *i= + if (ctx->find_handler($1)) + { + my_message(ER_SP_DUP_HANDLER, ER(ER_SP_DUP_HANDLER), MYF(0)); + MYSQL_YYABORT; + } + else + { + sp_instr_hpush_jump *i= (sp_instr_hpush_jump *)sp->last_instruction(); - i->add_condition($1); - ctx->push_handler($1); - } - } - ; + i->add_condition($1); + ctx->push_handler($1); + } + } + ; sp_cond: - ulong_num - { /* mysql errno */ - $$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t)); - $$->type= sp_cond_type_t::number; - $$->mysqlerr= $1; - } - | SQLSTATE_SYM opt_value TEXT_STRING_literal - { /* SQLSTATE */ - if (!sp_cond_check(&$3)) - { - my_error(ER_SP_BAD_SQLSTATE, MYF(0), $3.str); - MYSQL_YYABORT; - } - $$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t)); - $$->type= sp_cond_type_t::state; - memcpy($$->sqlstate, $3.str, 5); - $$->sqlstate[5]= '\0'; - } - ; + ulong_num + { /* mysql errno */ + $$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t)); + $$->type= sp_cond_type_t::number; + $$->mysqlerr= $1; + } + | SQLSTATE_SYM opt_value TEXT_STRING_literal + { /* SQLSTATE */ + if (!sp_cond_check(&$3)) + { + my_error(ER_SP_BAD_SQLSTATE, MYF(0), $3.str); + MYSQL_YYABORT; + } + $$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t)); + $$->type= sp_cond_type_t::state; + memcpy($$->sqlstate, $3.str, 5); + $$->sqlstate[5]= '\0'; + } + ; opt_value: - /* Empty */ {} - | VALUE_SYM {} - ; + /* Empty */ {} + | VALUE_SYM {} + ; sp_hcond: - sp_cond - { - $$= $1; - } - | ident /* CONDITION name */ - { - $$= Lex->spcont->find_cond(&$1); - if ($$ == NULL) - { - my_error(ER_SP_COND_MISMATCH, MYF(0), $1.str); - MYSQL_YYABORT; - } - } - | SQLWARNING_SYM /* SQLSTATEs 01??? */ - { - $$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t)); - $$->type= sp_cond_type_t::warning; - } - | not FOUND_SYM /* SQLSTATEs 02??? */ - { - $$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t)); - $$->type= sp_cond_type_t::notfound; - } - | SQLEXCEPTION_SYM /* All other SQLSTATEs */ - { - $$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t)); - $$->type= sp_cond_type_t::exception; - } - ; + sp_cond + { + $$= $1; + } + | ident /* CONDITION name */ + { + $$= Lex->spcont->find_cond(&$1); + if ($$ == NULL) + { + my_error(ER_SP_COND_MISMATCH, MYF(0), $1.str); + MYSQL_YYABORT; + } + } + | SQLWARNING_SYM /* SQLSTATEs 01??? */ + { + $$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t)); + $$->type= sp_cond_type_t::warning; + } + | not FOUND_SYM /* SQLSTATEs 02??? */ + { + $$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t)); + $$->type= sp_cond_type_t::notfound; + } + | SQLEXCEPTION_SYM /* All other SQLSTATEs */ + { + $$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t)); + $$->type= sp_cond_type_t::exception; + } + ; sp_decl_idents: - ident - { + ident + { /* NOTE: field definition is filled in sp_decl section. */ - LEX *lex= Lex; - sp_pcontext *spc= lex->spcont; + LEX *lex= Lex; + sp_pcontext *spc= lex->spcont; - if (spc->find_variable(&$1, TRUE)) - { - my_error(ER_SP_DUP_VAR, MYF(0), $1.str); - MYSQL_YYABORT; - } - spc->push_variable(&$1, (enum_field_types)0, sp_param_in); - $$= 1; - } - | sp_decl_idents ',' ident - { + if (spc->find_variable(&$1, TRUE)) + { + my_error(ER_SP_DUP_VAR, MYF(0), $1.str); + MYSQL_YYABORT; + } + spc->push_variable(&$1, (enum_field_types)0, sp_param_in); + $$= 1; + } + | sp_decl_idents ',' ident + { /* NOTE: field definition is filled in sp_decl section. */ - LEX *lex= Lex; - sp_pcontext *spc= lex->spcont; + LEX *lex= Lex; + sp_pcontext *spc= lex->spcont; - if (spc->find_variable(&$3, TRUE)) - { - my_error(ER_SP_DUP_VAR, MYF(0), $3.str); - MYSQL_YYABORT; - } - spc->push_variable(&$3, (enum_field_types)0, sp_param_in); - $$= $1 + 1; - } - ; + if (spc->find_variable(&$3, TRUE)) + { + my_error(ER_SP_DUP_VAR, MYF(0), $3.str); + MYSQL_YYABORT; + } + spc->push_variable(&$3, (enum_field_types)0, sp_param_in); + $$= $1 + 1; + } + ; sp_opt_default: - /* Empty */ { $$ = NULL; } + /* Empty */ { $$ = NULL; } | DEFAULT expr { $$ = $2; } - ; + ; sp_proc_stmt: - sp_proc_stmt_statement + sp_proc_stmt_statement | sp_proc_stmt_return - | sp_proc_stmt_if - | case_stmt_specification - | sp_labeled_control - | sp_proc_stmt_unlabeled - | sp_proc_stmt_leave - | sp_proc_stmt_iterate - | sp_proc_stmt_open - | sp_proc_stmt_fetch + | sp_proc_stmt_if + | case_stmt_specification + | sp_labeled_control + | sp_proc_stmt_unlabeled + | sp_proc_stmt_leave + | sp_proc_stmt_iterate + | sp_proc_stmt_open + | sp_proc_stmt_fetch | sp_proc_stmt_close ; sp_proc_stmt_if: - IF { Lex->sphead->new_cont_backpatch(NULL); } - sp_if END IF - { Lex->sphead->do_cont_backpatch(); } + IF + { Lex->sphead->new_cont_backpatch(NULL); } + sp_if END IF + { Lex->sphead->do_cont_backpatch(); } ; sp_proc_stmt_statement: - { + { THD *thd= YYTHD; LEX *lex= thd->lex; Lex_input_stream *lip= thd->m_lip; - lex->sphead->reset_lex(thd); + lex->sphead->reset_lex(thd); lex->sphead->m_tmp_query= lip->get_tok_start(); - } - statement - { + } + statement + { THD *thd= YYTHD; LEX *lex= thd->lex; Lex_input_stream *lip= thd->m_lip; - sp_head *sp= lex->sphead; + sp_head *sp= lex->sphead; sp->m_flags|= sp_get_flags_for_command(lex); - if (lex->sql_command == SQLCOM_CHANGE_DB) - { /* "USE db" doesn't work in a procedure */ - my_error(ER_SP_BADSTATEMENT, MYF(0), "USE"); - MYSQL_YYABORT; - } - /* + if (lex->sql_command == SQLCOM_CHANGE_DB) + { /* "USE db" doesn't work in a procedure */ + my_error(ER_SP_BADSTATEMENT, MYF(0), "USE"); + MYSQL_YYABORT; + } + /* Don't add an instruction for SET statements, since all instructions for them were already added during processing of "set" rule. - */ + */ DBUG_ASSERT(lex->sql_command != SQLCOM_SET_OPTION || lex->var_list.is_empty()); if (lex->sql_command != SQLCOM_SET_OPTION) - { + { sp_instr_stmt *i=new sp_instr_stmt(sp->instructions(), lex->spcont, lex); @@ -2723,259 +2760,258 @@ sp_proc_stmt_statement: i->m_query.length); sp->add_instr(i); } - sp->restore_lex(thd); + sp->restore_lex(thd); } ; sp_proc_stmt_return: - RETURN_SYM + RETURN_SYM { Lex->sphead->reset_lex(YYTHD); } expr - { - LEX *lex= Lex; - sp_head *sp= lex->sphead; + { + LEX *lex= Lex; + sp_head *sp= lex->sphead; - if (sp->m_type != TYPE_ENUM_FUNCTION) - { - my_message(ER_SP_BADRETURN, ER(ER_SP_BADRETURN), MYF(0)); - MYSQL_YYABORT; - } - else - { - sp_instr_freturn *i; + if (sp->m_type != TYPE_ENUM_FUNCTION) + { + my_message(ER_SP_BADRETURN, ER(ER_SP_BADRETURN), MYF(0)); + MYSQL_YYABORT; + } + else + { + sp_instr_freturn *i; - i= new sp_instr_freturn(sp->instructions(), lex->spcont, $3, + i= new sp_instr_freturn(sp->instructions(), lex->spcont, $3, sp->m_return_field_def.sql_type, lex); - sp->add_instr(i); - sp->m_flags|= sp_head::HAS_RETURN; - } - sp->restore_lex(YYTHD); - } + sp->add_instr(i); + sp->m_flags|= sp_head::HAS_RETURN; + } + sp->restore_lex(YYTHD); + } ; sp_proc_stmt_unlabeled: - { /* Unlabeled controls get a secret label. */ - LEX *lex= Lex; + { /* Unlabeled controls get a secret label. */ + LEX *lex= Lex; - lex->spcont->push_label((char *)"", lex->sphead->instructions()); - } - sp_unlabeled_control - { - LEX *lex= Lex; + lex->spcont->push_label((char *)"", lex->sphead->instructions()); + } + sp_unlabeled_control + { + LEX *lex= Lex; - lex->sphead->backpatch(lex->spcont->pop_label()); - } + lex->sphead->backpatch(lex->spcont->pop_label()); + } ; sp_proc_stmt_leave: - LEAVE_SYM label_ident - { - LEX *lex= Lex; - sp_head *sp = lex->sphead; - sp_pcontext *ctx= lex->spcont; - sp_label_t *lab= ctx->find_label($2.str); + LEAVE_SYM label_ident + { + LEX *lex= Lex; + sp_head *sp = lex->sphead; + sp_pcontext *ctx= lex->spcont; + sp_label_t *lab= ctx->find_label($2.str); - if (! lab) - { - my_error(ER_SP_LILABEL_MISMATCH, MYF(0), "LEAVE", $2.str); - MYSQL_YYABORT; - } - else - { - sp_instr_jump *i; - uint ip= sp->instructions(); - uint n; + if (! lab) + { + my_error(ER_SP_LILABEL_MISMATCH, MYF(0), "LEAVE", $2.str); + MYSQL_YYABORT; + } + else + { + sp_instr_jump *i; + uint ip= sp->instructions(); + uint n; - n= ctx->diff_handlers(lab->ctx, TRUE); /* Exclusive the dest. */ - if (n) - sp->add_instr(new sp_instr_hpop(ip++, ctx, n)); - n= ctx->diff_cursors(lab->ctx, TRUE); /* Exclusive the dest. */ - if (n) - sp->add_instr(new sp_instr_cpop(ip++, ctx, n)); - i= new sp_instr_jump(ip, ctx); - sp->push_backpatch(i, lab); /* Jumping forward */ + n= ctx->diff_handlers(lab->ctx, TRUE); /* Exclusive the dest. */ + if (n) + sp->add_instr(new sp_instr_hpop(ip++, ctx, n)); + n= ctx->diff_cursors(lab->ctx, TRUE); /* Exclusive the dest. */ + if (n) + sp->add_instr(new sp_instr_cpop(ip++, ctx, n)); + i= new sp_instr_jump(ip, ctx); + sp->push_backpatch(i, lab); /* Jumping forward */ sp->add_instr(i); - } - } + } + } ; sp_proc_stmt_iterate: - ITERATE_SYM label_ident - { - LEX *lex= Lex; - sp_head *sp= lex->sphead; - sp_pcontext *ctx= lex->spcont; - sp_label_t *lab= ctx->find_label($2.str); + ITERATE_SYM label_ident + { + LEX *lex= Lex; + sp_head *sp= lex->sphead; + sp_pcontext *ctx= lex->spcont; + sp_label_t *lab= ctx->find_label($2.str); - if (! lab || lab->type != SP_LAB_ITER) - { - my_error(ER_SP_LILABEL_MISMATCH, MYF(0), "ITERATE", $2.str); - MYSQL_YYABORT; - } - else - { - sp_instr_jump *i; - uint ip= sp->instructions(); - uint n; + if (! lab || lab->type != SP_LAB_ITER) + { + my_error(ER_SP_LILABEL_MISMATCH, MYF(0), "ITERATE", $2.str); + MYSQL_YYABORT; + } + else + { + sp_instr_jump *i; + uint ip= sp->instructions(); + uint n; - n= ctx->diff_handlers(lab->ctx, FALSE); /* Inclusive the dest. */ - if (n) - sp->add_instr(new sp_instr_hpop(ip++, ctx, n)); - n= ctx->diff_cursors(lab->ctx, FALSE); /* Inclusive the dest. */ - if (n) - sp->add_instr(new sp_instr_cpop(ip++, ctx, n)); - i= new sp_instr_jump(ip, ctx, lab->ip); /* Jump back */ + n= ctx->diff_handlers(lab->ctx, FALSE); /* Inclusive the dest. */ + if (n) + sp->add_instr(new sp_instr_hpop(ip++, ctx, n)); + n= ctx->diff_cursors(lab->ctx, FALSE); /* Inclusive the dest. */ + if (n) + sp->add_instr(new sp_instr_cpop(ip++, ctx, n)); + i= new sp_instr_jump(ip, ctx, lab->ip); /* Jump back */ sp->add_instr(i); - } - } + } + } ; sp_proc_stmt_open: - OPEN_SYM ident - { - LEX *lex= Lex; - sp_head *sp= lex->sphead; - uint offset; - sp_instr_copen *i; + OPEN_SYM ident + { + LEX *lex= Lex; + sp_head *sp= lex->sphead; + uint offset; + sp_instr_copen *i; - if (! lex->spcont->find_cursor(&$2, &offset)) - { - my_error(ER_SP_CURSOR_MISMATCH, MYF(0), $2.str); - MYSQL_YYABORT; - } - i= new sp_instr_copen(sp->instructions(), lex->spcont, offset); - sp->add_instr(i); - } + if (! lex->spcont->find_cursor(&$2, &offset)) + { + my_error(ER_SP_CURSOR_MISMATCH, MYF(0), $2.str); + MYSQL_YYABORT; + } + i= new sp_instr_copen(sp->instructions(), lex->spcont, offset); + sp->add_instr(i); + } ; sp_proc_stmt_fetch: - FETCH_SYM sp_opt_fetch_noise ident INTO - { - LEX *lex= Lex; - sp_head *sp= lex->sphead; - uint offset; - sp_instr_cfetch *i; + FETCH_SYM sp_opt_fetch_noise ident INTO + { + LEX *lex= Lex; + sp_head *sp= lex->sphead; + uint offset; + sp_instr_cfetch *i; - if (! lex->spcont->find_cursor(&$3, &offset)) - { - my_error(ER_SP_CURSOR_MISMATCH, MYF(0), $3.str); - MYSQL_YYABORT; - } - i= new sp_instr_cfetch(sp->instructions(), lex->spcont, offset); - sp->add_instr(i); - } - sp_fetch_list - { } + if (! lex->spcont->find_cursor(&$3, &offset)) + { + my_error(ER_SP_CURSOR_MISMATCH, MYF(0), $3.str); + MYSQL_YYABORT; + } + i= new sp_instr_cfetch(sp->instructions(), lex->spcont, offset); + sp->add_instr(i); + } + sp_fetch_list + {} ; sp_proc_stmt_close: - CLOSE_SYM ident - { - LEX *lex= Lex; - sp_head *sp= lex->sphead; - uint offset; - sp_instr_cclose *i; + CLOSE_SYM ident + { + LEX *lex= Lex; + sp_head *sp= lex->sphead; + uint offset; + sp_instr_cclose *i; - if (! lex->spcont->find_cursor(&$2, &offset)) - { - my_error(ER_SP_CURSOR_MISMATCH, MYF(0), $2.str); - MYSQL_YYABORT; - } - i= new sp_instr_cclose(sp->instructions(), lex->spcont, offset); - sp->add_instr(i); - } - ; + if (! lex->spcont->find_cursor(&$2, &offset)) + { + my_error(ER_SP_CURSOR_MISMATCH, MYF(0), $2.str); + MYSQL_YYABORT; + } + i= new sp_instr_cclose(sp->instructions(), lex->spcont, offset); + sp->add_instr(i); + } + ; sp_opt_fetch_noise: - /* Empty */ - | NEXT_SYM FROM - | FROM - ; + /* Empty */ + | NEXT_SYM FROM + | FROM + ; sp_fetch_list: - ident - { - LEX *lex= Lex; - sp_head *sp= lex->sphead; - sp_pcontext *spc= lex->spcont; - sp_variable_t *spv; + ident + { + LEX *lex= Lex; + sp_head *sp= lex->sphead; + sp_pcontext *spc= lex->spcont; + sp_variable_t *spv; - if (!spc || !(spv = spc->find_variable(&$1))) - { - my_error(ER_SP_UNDECLARED_VAR, MYF(0), $1.str); - MYSQL_YYABORT; - } - else - { - /* An SP local variable */ - sp_instr_cfetch *i= (sp_instr_cfetch *)sp->last_instruction(); + if (!spc || !(spv = spc->find_variable(&$1))) + { + my_error(ER_SP_UNDECLARED_VAR, MYF(0), $1.str); + MYSQL_YYABORT; + } + else + { + /* An SP local variable */ + sp_instr_cfetch *i= (sp_instr_cfetch *)sp->last_instruction(); - i->add_to_varlist(spv); - } - } - | - sp_fetch_list ',' ident - { - LEX *lex= Lex; - sp_head *sp= lex->sphead; - sp_pcontext *spc= lex->spcont; - sp_variable_t *spv; + i->add_to_varlist(spv); + } + } + | sp_fetch_list ',' ident + { + LEX *lex= Lex; + sp_head *sp= lex->sphead; + sp_pcontext *spc= lex->spcont; + sp_variable_t *spv; - if (!spc || !(spv = spc->find_variable(&$3))) - { - my_error(ER_SP_UNDECLARED_VAR, MYF(0), $3.str); - MYSQL_YYABORT; - } - else - { - /* An SP local variable */ - sp_instr_cfetch *i= (sp_instr_cfetch *)sp->last_instruction(); + if (!spc || !(spv = spc->find_variable(&$3))) + { + my_error(ER_SP_UNDECLARED_VAR, MYF(0), $3.str); + MYSQL_YYABORT; + } + else + { + /* An SP local variable */ + sp_instr_cfetch *i= (sp_instr_cfetch *)sp->last_instruction(); - i->add_to_varlist(spv); - } - } - ; + i->add_to_varlist(spv); + } + } + ; sp_if: { Lex->sphead->reset_lex(YYTHD); } expr THEN_SYM - { - LEX *lex= Lex; - sp_head *sp= lex->sphead; - sp_pcontext *ctx= lex->spcont; - uint ip= sp->instructions(); - sp_instr_jump_if_not *i = new sp_instr_jump_if_not(ip, ctx, + { + LEX *lex= Lex; + sp_head *sp= lex->sphead; + sp_pcontext *ctx= lex->spcont; + uint ip= sp->instructions(); + sp_instr_jump_if_not *i = new sp_instr_jump_if_not(ip, ctx, $2, lex); - sp->push_backpatch(i, ctx->push_label((char *)"", 0)); + sp->push_backpatch(i, ctx->push_label((char *)"", 0)); sp->add_cont_backpatch(i); sp->add_instr(i); sp->restore_lex(YYTHD); - } - sp_proc_stmts1 - { - sp_head *sp= Lex->sphead; - sp_pcontext *ctx= Lex->spcont; - uint ip= sp->instructions(); - sp_instr_jump *i = new sp_instr_jump(ip, ctx); + } + sp_proc_stmts1 + { + sp_head *sp= Lex->sphead; + sp_pcontext *ctx= Lex->spcont; + uint ip= sp->instructions(); + sp_instr_jump *i = new sp_instr_jump(ip, ctx); - sp->add_instr(i); - sp->backpatch(ctx->pop_label()); - sp->push_backpatch(i, ctx->push_label((char *)"", 0)); - } - sp_elseifs - { - LEX *lex= Lex; + sp->add_instr(i); + sp->backpatch(ctx->pop_label()); + sp->push_backpatch(i, ctx->push_label((char *)"", 0)); + } + sp_elseifs + { + LEX *lex= Lex; - lex->sphead->backpatch(lex->spcont->pop_label()); - } - ; + lex->sphead->backpatch(lex->spcont->pop_label()); + } + ; sp_elseifs: - /* Empty */ - | ELSEIF_SYM sp_if - | ELSE sp_proc_stmts1 - ; + /* Empty */ + | ELSEIF_SYM sp_if + | ELSE sp_proc_stmts1 + ; case_stmt_specification: simple_case_stmt @@ -3087,138 +3123,138 @@ else_clause_opt: ; sp_labeled_control: - label_ident ':' - { - LEX *lex= Lex; - sp_pcontext *ctx= lex->spcont; - sp_label_t *lab= ctx->find_label($1.str); + label_ident ':' + { + LEX *lex= Lex; + sp_pcontext *ctx= lex->spcont; + sp_label_t *lab= ctx->find_label($1.str); - if (lab) - { - my_error(ER_SP_LABEL_REDEFINE, MYF(0), $1.str); - MYSQL_YYABORT; - } - else - { - lab= lex->spcont->push_label($1.str, - lex->sphead->instructions()); - lab->type= SP_LAB_ITER; - } - } - sp_unlabeled_control sp_opt_label - { - LEX *lex= Lex; + if (lab) + { + my_error(ER_SP_LABEL_REDEFINE, MYF(0), $1.str); + MYSQL_YYABORT; + } + else + { + lab= lex->spcont->push_label($1.str, + lex->sphead->instructions()); + lab->type= SP_LAB_ITER; + } + } + sp_unlabeled_control sp_opt_label + { + LEX *lex= Lex; - if ($5.str) - { - sp_label_t *lab= lex->spcont->find_label($5.str); + if ($5.str) + { + sp_label_t *lab= lex->spcont->find_label($5.str); - if (!lab || - my_strcasecmp(system_charset_info, $5.str, lab->name) != 0) - { - my_error(ER_SP_LABEL_MISMATCH, MYF(0), $5.str); - MYSQL_YYABORT; - } - } - lex->sphead->backpatch(lex->spcont->pop_label()); - } - ; + if (!lab || + my_strcasecmp(system_charset_info, $5.str, lab->name) != 0) + { + my_error(ER_SP_LABEL_MISMATCH, MYF(0), $5.str); + MYSQL_YYABORT; + } + } + lex->sphead->backpatch(lex->spcont->pop_label()); + } + ; sp_opt_label: - /* Empty */ { $$= null_lex_str; } + /* Empty */ { $$= null_lex_str; } | label_ident { $$= $1; } - ; + ; sp_unlabeled_control: - BEGIN_SYM - { /* QQ This is just a dummy for grouping declarations and statements - together. No [[NOT] ATOMIC] yet, and we need to figure out how - make it coexist with the existing BEGIN COMMIT/ROLLBACK. */ - LEX *lex= Lex; - sp_label_t *lab= lex->spcont->last_label(); + BEGIN_SYM + { /* QQ This is just a dummy for grouping declarations and statements + together. No [[NOT] ATOMIC] yet, and we need to figure out how + make it coexist with the existing BEGIN COMMIT/ROLLBACK. */ + LEX *lex= Lex; + sp_label_t *lab= lex->spcont->last_label(); - lab->type= SP_LAB_BEGIN; - lex->spcont= lex->spcont->push_context(LABEL_DEFAULT_SCOPE); - } - sp_decls - sp_proc_stmts - END - { - LEX *lex= Lex; - sp_head *sp= lex->sphead; - sp_pcontext *ctx= lex->spcont; + lab->type= SP_LAB_BEGIN; + lex->spcont= lex->spcont->push_context(LABEL_DEFAULT_SCOPE); + } + sp_decls + sp_proc_stmts + END + { + LEX *lex= Lex; + sp_head *sp= lex->sphead; + sp_pcontext *ctx= lex->spcont; - sp->backpatch(ctx->last_label()); /* We always have a label */ - if ($3.hndlrs) - sp->add_instr(new sp_instr_hpop(sp->instructions(), ctx, - $3.hndlrs)); - if ($3.curs) - sp->add_instr(new sp_instr_cpop(sp->instructions(), ctx, - $3.curs)); - lex->spcont= ctx->pop_context(); - } - | LOOP_SYM - sp_proc_stmts1 END LOOP_SYM - { - LEX *lex= Lex; - uint ip= lex->sphead->instructions(); - sp_label_t *lab= lex->spcont->last_label(); /* Jumping back */ - sp_instr_jump *i = new sp_instr_jump(ip, lex->spcont, lab->ip); + sp->backpatch(ctx->last_label()); /* We always have a label */ + if ($3.hndlrs) + sp->add_instr(new sp_instr_hpop(sp->instructions(), ctx, + $3.hndlrs)); + if ($3.curs) + sp->add_instr(new sp_instr_cpop(sp->instructions(), ctx, + $3.curs)); + lex->spcont= ctx->pop_context(); + } + | LOOP_SYM + sp_proc_stmts1 END LOOP_SYM + { + LEX *lex= Lex; + uint ip= lex->sphead->instructions(); + sp_label_t *lab= lex->spcont->last_label(); /* Jumping back */ + sp_instr_jump *i = new sp_instr_jump(ip, lex->spcont, lab->ip); - lex->sphead->add_instr(i); - } + lex->sphead->add_instr(i); + } | WHILE_SYM { Lex->sphead->reset_lex(YYTHD); } expr DO_SYM - { - LEX *lex= Lex; - sp_head *sp= lex->sphead; - uint ip= sp->instructions(); - sp_instr_jump_if_not *i = new sp_instr_jump_if_not(ip, lex->spcont, - $3, lex); + { + LEX *lex= Lex; + sp_head *sp= lex->sphead; + uint ip= sp->instructions(); + sp_instr_jump_if_not *i = new sp_instr_jump_if_not(ip, lex->spcont, + $3, lex); - /* Jumping forward */ - sp->push_backpatch(i, lex->spcont->last_label()); + /* Jumping forward */ + sp->push_backpatch(i, lex->spcont->last_label()); sp->new_cont_backpatch(i); sp->add_instr(i); sp->restore_lex(YYTHD); - } - sp_proc_stmts1 END WHILE_SYM - { - LEX *lex= Lex; - uint ip= lex->sphead->instructions(); - sp_label_t *lab= lex->spcont->last_label(); /* Jumping back */ - sp_instr_jump *i = new sp_instr_jump(ip, lex->spcont, lab->ip); + } + sp_proc_stmts1 END WHILE_SYM + { + LEX *lex= Lex; + uint ip= lex->sphead->instructions(); + sp_label_t *lab= lex->spcont->last_label(); /* Jumping back */ + sp_instr_jump *i = new sp_instr_jump(ip, lex->spcont, lab->ip); - lex->sphead->add_instr(i); + lex->sphead->add_instr(i); lex->sphead->do_cont_backpatch(); - } + } | REPEAT_SYM sp_proc_stmts1 UNTIL_SYM { Lex->sphead->reset_lex(YYTHD); } expr END REPEAT_SYM - { - LEX *lex= Lex; - uint ip= lex->sphead->instructions(); - sp_label_t *lab= lex->spcont->last_label(); /* Jumping back */ - sp_instr_jump_if_not *i = new sp_instr_jump_if_not(ip, lex->spcont, + { + LEX *lex= Lex; + uint ip= lex->sphead->instructions(); + sp_label_t *lab= lex->spcont->last_label(); /* Jumping back */ + sp_instr_jump_if_not *i = new sp_instr_jump_if_not(ip, lex->spcont, $5, lab->ip, lex); lex->sphead->add_instr(i); lex->sphead->restore_lex(YYTHD); /* We can shortcut the cont_backpatch here */ i->m_cont_dest= ip+1; - } - ; + } + ; trg_action_time: - BEFORE_SYM + BEFORE_SYM { Lex->trg_chistics.action_time= TRG_ACTION_BEFORE; } - | AFTER_SYM + | AFTER_SYM { Lex->trg_chistics.action_time= TRG_ACTION_AFTER; } ; trg_event: - INSERT + INSERT { Lex->trg_chistics.event= TRG_EVENT_INSERT; } | UPDATE_SYM { Lex->trg_chistics.event= TRG_EVENT_UPDATE; } @@ -3241,156 +3277,157 @@ trg_event: change_tablespace_access: tablespace_name ts_access_mode - ; + ; change_tablespace_info: tablespace_name CHANGE ts_datafile change_ts_option_list - ; + ; tablespace_info: tablespace_name ADD ts_datafile opt_logfile_group_name tablespace_option_list - ; + ; opt_logfile_group_name: /* empty */ {} - | USE_SYM LOGFILE_SYM GROUP_SYM ident + | USE_SYM LOGFILE_SYM GROUP_SYM ident { LEX *lex= Lex; lex->alter_tablespace_info->logfile_group_name= $4.str; - }; + } + ; alter_tablespace_info: tablespace_name ADD ts_datafile - alter_tablespace_option_list - { - Lex->alter_tablespace_info->ts_alter_tablespace_type= ALTER_TABLESPACE_ADD_FILE; + alter_tablespace_option_list + { + Lex->alter_tablespace_info->ts_alter_tablespace_type= ALTER_TABLESPACE_ADD_FILE; } - | - tablespace_name + | tablespace_name DROP ts_datafile - alter_tablespace_option_list - { - Lex->alter_tablespace_info->ts_alter_tablespace_type= ALTER_TABLESPACE_DROP_FILE; - }; + alter_tablespace_option_list + { + Lex->alter_tablespace_info->ts_alter_tablespace_type= ALTER_TABLESPACE_DROP_FILE; + } + ; logfile_group_info: logfile_group_name add_log_file logfile_group_option_list - ; + ; alter_logfile_group_info: logfile_group_name add_log_file alter_logfile_group_option_list - ; + ; add_log_file: ADD lg_undofile - | ADD lg_redofile - ; + | ADD lg_redofile + ; change_ts_option_list: /* empty */ {} change_ts_options - ; + ; change_ts_options: change_ts_option - | change_ts_options change_ts_option - | change_ts_options ',' change_ts_option - ; + | change_ts_options change_ts_option + | change_ts_options ',' change_ts_option + ; change_ts_option: opt_ts_initial_size - | opt_ts_autoextend_size - | opt_ts_max_size - ; + | opt_ts_autoextend_size + | opt_ts_max_size + ; tablespace_option_list: /* empty */ {} - tablespace_options - ; + tablespace_options + ; tablespace_options: tablespace_option - | tablespace_options tablespace_option - | tablespace_options ',' tablespace_option - ; + | tablespace_options tablespace_option + | tablespace_options ',' tablespace_option + ; tablespace_option: opt_ts_initial_size - | opt_ts_autoextend_size - | opt_ts_max_size - | opt_ts_extent_size - | opt_ts_nodegroup - | opt_ts_engine - | ts_wait - | opt_ts_comment - ; + | opt_ts_autoextend_size + | opt_ts_max_size + | opt_ts_extent_size + | opt_ts_nodegroup + | opt_ts_engine + | ts_wait + | opt_ts_comment + ; alter_tablespace_option_list: /* empty */ {} - alter_tablespace_options - ; + alter_tablespace_options + ; alter_tablespace_options: alter_tablespace_option - | alter_tablespace_options alter_tablespace_option - | alter_tablespace_options ',' alter_tablespace_option - ; + | alter_tablespace_options alter_tablespace_option + | alter_tablespace_options ',' alter_tablespace_option + ; alter_tablespace_option: opt_ts_initial_size - | opt_ts_autoextend_size - | opt_ts_max_size - | opt_ts_engine - | ts_wait - ; + | opt_ts_autoextend_size + | opt_ts_max_size + | opt_ts_engine + | ts_wait + ; logfile_group_option_list: /* empty */ {} - logfile_group_options - ; + logfile_group_options + ; logfile_group_options: logfile_group_option - | logfile_group_options logfile_group_option - | logfile_group_options ',' logfile_group_option - ; + | logfile_group_options logfile_group_option + | logfile_group_options ',' logfile_group_option + ; logfile_group_option: opt_ts_initial_size - | opt_ts_undo_buffer_size - | opt_ts_redo_buffer_size - | opt_ts_nodegroup - | opt_ts_engine - | ts_wait - | opt_ts_comment - ; + | opt_ts_undo_buffer_size + | opt_ts_redo_buffer_size + | opt_ts_nodegroup + | opt_ts_engine + | ts_wait + | opt_ts_comment + ; alter_logfile_group_option_list: /* empty */ {} alter_logfile_group_options - ; + ; alter_logfile_group_options: alter_logfile_group_option - | alter_logfile_group_options alter_logfile_group_option - | alter_logfile_group_options ',' alter_logfile_group_option - ; + | alter_logfile_group_options alter_logfile_group_option + | alter_logfile_group_options ',' alter_logfile_group_option + ; alter_logfile_group_option: opt_ts_initial_size - | opt_ts_engine - | ts_wait - ; + | opt_ts_engine + | ts_wait + ; ts_datafile: @@ -3398,21 +3435,24 @@ ts_datafile: { LEX *lex= Lex; lex->alter_tablespace_info->data_file_name= $2.str; - }; + } + ; lg_undofile: UNDOFILE_SYM TEXT_STRING_sys { LEX *lex= Lex; lex->alter_tablespace_info->undo_file_name= $2.str; - }; + } + ; lg_redofile: REDOFILE_SYM TEXT_STRING_sys { LEX *lex= Lex; lex->alter_tablespace_info->redo_file_name= $2.str; - }; + } + ; tablespace_name: ident @@ -3421,7 +3461,8 @@ tablespace_name: lex->alter_tablespace_info= new st_alter_tablespace(); lex->alter_tablespace_info->tablespace_name= $1.str; lex->sql_command= SQLCOM_ALTER_TABLESPACE; - }; + } + ; logfile_group_name: ident @@ -3430,7 +3471,8 @@ logfile_group_name: lex->alter_tablespace_info= new st_alter_tablespace(); lex->alter_tablespace_info->logfile_group_name= $1.str; lex->sql_command= SQLCOM_ALTER_TABLESPACE; - }; + } + ; ts_access_mode: READ_ONLY_SYM @@ -3438,58 +3480,65 @@ ts_access_mode: LEX *lex= Lex; lex->alter_tablespace_info->ts_access_mode= TS_READ_ONLY; } - | READ_WRITE_SYM + | READ_WRITE_SYM { LEX *lex= Lex; lex->alter_tablespace_info->ts_access_mode= TS_READ_WRITE; } - | NOT_SYM ACCESSIBLE_SYM + | NOT_SYM ACCESSIBLE_SYM { LEX *lex= Lex; lex->alter_tablespace_info->ts_access_mode= TS_NOT_ACCESSIBLE; - }; + } + ; opt_ts_initial_size: INITIAL_SIZE_SYM opt_equal size_number { LEX *lex= Lex; lex->alter_tablespace_info->initial_size= $3; - }; + } + ; opt_ts_autoextend_size: AUTOEXTEND_SIZE_SYM opt_equal size_number { LEX *lex= Lex; lex->alter_tablespace_info->autoextend_size= $3; - }; + } + ; opt_ts_max_size: MAX_SIZE_SYM opt_equal size_number { LEX *lex= Lex; lex->alter_tablespace_info->max_size= $3; - }; + } + ; opt_ts_extent_size: EXTENT_SIZE_SYM opt_equal size_number { LEX *lex= Lex; lex->alter_tablespace_info->extent_size= $3; - }; + } + ; opt_ts_undo_buffer_size: UNDO_BUFFER_SIZE_SYM opt_equal size_number { LEX *lex= Lex; lex->alter_tablespace_info->undo_buffer_size= $3; - }; + } + ; opt_ts_redo_buffer_size: REDO_BUFFER_SIZE_SYM opt_equal size_number { LEX *lex= Lex; lex->alter_tablespace_info->redo_buffer_size= $3; - }; + } + ; opt_ts_nodegroup: NODEGROUP_SYM opt_equal real_ulong_num @@ -3501,7 +3550,8 @@ opt_ts_nodegroup: MYSQL_YYABORT; } lex->alter_tablespace_info->nodegroup_id= $3; - }; + } + ; opt_ts_comment: COMMENT_SYM opt_equal TEXT_STRING_sys @@ -3513,7 +3563,8 @@ opt_ts_comment: MYSQL_YYABORT; } lex->alter_tablespace_info->ts_comment= $3.str; - }; + } + ; opt_ts_engine: opt_storage ENGINE_SYM opt_equal storage_engines @@ -3526,12 +3577,13 @@ opt_ts_engine: MYSQL_YYABORT; } lex->alter_tablespace_info->storage_engine= $4; - }; + } + ; opt_ts_wait: /* empty */ - | ts_wait - ; + | ts_wait + ; ts_wait: WAIT_SYM @@ -3539,7 +3591,7 @@ ts_wait: LEX *lex= Lex; lex->alter_tablespace_info->wait_until_completed= TRUE; } - | NO_WAIT_SYM + | NO_WAIT_SYM { LEX *lex= Lex; if (!(lex->alter_tablespace_info->wait_until_completed)) @@ -3548,11 +3600,12 @@ ts_wait: MYSQL_YYABORT; } lex->alter_tablespace_info->wait_until_completed= FALSE; - }; + } + ; size_number: real_ulong_num { $$= $1;} - | IDENT + | IDENT { ulonglong number; uint text_shift_number= 0; @@ -3596,16 +3649,16 @@ size_number: } $$= number; } - ; + ; /* End tablespace part */ create2: - '(' create2a {} + '(' create2a {} | opt_create_table_options - opt_partitioning {} + opt_partitioning {} create3 {} | LIKE table_ident { @@ -3628,7 +3681,7 @@ create2: ; create2a: - field_list ')' opt_create_table_options + field_list ')' opt_create_table_options opt_partitioning {} create3 {} | opt_partitioning {} @@ -3637,10 +3690,10 @@ create2a: ; create3: - /* empty */ {} - | opt_duplicate opt_as create_select + /* empty */ {} + | opt_duplicate opt_as create_select { Select->set_braces(0);} union_clause {} - | opt_duplicate opt_as '(' create_select ')' + | opt_duplicate opt_as '(' create_select ')' { Select->set_braces(1);} union_opt {} ; @@ -3669,552 +3722,552 @@ create3: from the openfrm function. */ opt_partitioning: - /* empty */ {} + /* empty */ {} | partitioning ; partitioning: - PARTITION_SYM - { -#ifdef WITH_PARTITION_STORAGE_ENGINE - LEX *lex= Lex; - LEX_STRING partition_name={C_STRING_WITH_LEN("partition")}; - if (!plugin_is_ready(&partition_name, MYSQL_STORAGE_ENGINE_PLUGIN)) + PARTITION_SYM { +#ifdef WITH_PARTITION_STORAGE_ENGINE + LEX *lex= Lex; + LEX_STRING partition_name={C_STRING_WITH_LEN("partition")}; + if (!plugin_is_ready(&partition_name, MYSQL_STORAGE_ENGINE_PLUGIN)) + { + my_error(ER_FEATURE_DISABLED, MYF(0), + "partitioning", "--with-partition"); + MYSQL_YYABORT; + } + lex->part_info= new partition_info(); + if (!lex->part_info) + { + mem_alloc_error(sizeof(partition_info)); + MYSQL_YYABORT; + } + if (lex->sql_command == SQLCOM_ALTER_TABLE) + { + lex->alter_info.flags|= ALTER_PARTITION; + } +#else my_error(ER_FEATURE_DISABLED, MYF(0), "partitioning", "--with-partition"); MYSQL_YYABORT; - } - lex->part_info= new partition_info(); - if (!lex->part_info) - { - mem_alloc_error(sizeof(partition_info)); - MYSQL_YYABORT; - } - if (lex->sql_command == SQLCOM_ALTER_TABLE) - { - lex->alter_info.flags|= ALTER_PARTITION; - } -#else - my_error(ER_FEATURE_DISABLED, MYF(0), - "partitioning", "--with-partition"); - MYSQL_YYABORT; #endif - } - partition + } + partition ; partition_entry: - PARTITION_SYM - { - LEX *lex= Lex; - if (!lex->part_info) + PARTITION_SYM { - my_parse_error(ER(ER_PARTITION_ENTRY_ERROR)); - MYSQL_YYABORT; + LEX *lex= Lex; + if (!lex->part_info) + { + my_parse_error(ER(ER_PARTITION_ENTRY_ERROR)); + MYSQL_YYABORT; + } + /* + We enter here when opening the frm file to translate + partition info string into part_info data structure. + */ } - /* - We enter here when opening the frm file to translate - partition info string into part_info data structure. - */ - } - partition {} + partition {} ; partition: - BY part_type_def opt_no_parts {} opt_sub_part {} part_defs + BY part_type_def opt_no_parts {} opt_sub_part {} part_defs ; part_type_def: - opt_linear KEY_SYM '(' part_field_list ')' - { - LEX *lex= Lex; - lex->part_info->list_of_part_fields= TRUE; - lex->part_info->part_type= HASH_PARTITION; - } + opt_linear KEY_SYM '(' part_field_list ')' + { + LEX *lex= Lex; + lex->part_info->list_of_part_fields= TRUE; + lex->part_info->part_type= HASH_PARTITION; + } | opt_linear HASH_SYM - { Lex->part_info->part_type= HASH_PARTITION; } - part_func {} + { Lex->part_info->part_type= HASH_PARTITION; } + part_func {} | RANGE_SYM - { Lex->part_info->part_type= RANGE_PARTITION; } - part_func {} + { Lex->part_info->part_type= RANGE_PARTITION; } + part_func {} | LIST_SYM - { Lex->part_info->part_type= LIST_PARTITION; } - part_func {} + { Lex->part_info->part_type= LIST_PARTITION; } + part_func {} ; opt_linear: - /* empty */ {} + /* empty */ {} | LINEAR_SYM - { Lex->part_info->linear_hash_ind= TRUE;} + { Lex->part_info->linear_hash_ind= TRUE;} ; part_field_list: - /* empty */ {} + /* empty */ {} | part_field_item_list {} ; part_field_item_list: - part_field_item {} + part_field_item {} | part_field_item_list ',' part_field_item {} ; part_field_item: - ident - { - if (Lex->part_info->part_field_list.push_back($1.str)) + ident { - mem_alloc_error(1); - MYSQL_YYABORT; + if (Lex->part_info->part_field_list.push_back($1.str)) + { + mem_alloc_error(1); + MYSQL_YYABORT; + } } - } ; part_func: - '(' remember_name part_func_expr remember_end ')' - { - LEX *lex= Lex; - uint expr_len= (uint)($4 - $2) - 1; - lex->part_info->list_of_part_fields= FALSE; - lex->part_info->part_expr= $3; - lex->part_info->part_func_string= (char* ) sql_memdup($2+1, expr_len); - lex->part_info->part_func_len= expr_len; - } + '(' remember_name part_func_expr remember_end ')' + { + LEX *lex= Lex; + uint expr_len= (uint)($4 - $2) - 1; + lex->part_info->list_of_part_fields= FALSE; + lex->part_info->part_expr= $3; + lex->part_info->part_func_string= (char* ) sql_memdup($2+1, expr_len); + lex->part_info->part_func_len= expr_len; + } ; sub_part_func: - '(' remember_name part_func_expr remember_end ')' - { - LEX *lex= Lex; - uint expr_len= (uint)($4 - $2) - 1; - lex->part_info->list_of_subpart_fields= FALSE; - lex->part_info->subpart_expr= $3; - lex->part_info->subpart_func_string= (char* ) sql_memdup($2+1, expr_len); - lex->part_info->subpart_func_len= expr_len; - } + '(' remember_name part_func_expr remember_end ')' + { + LEX *lex= Lex; + uint expr_len= (uint)($4 - $2) - 1; + lex->part_info->list_of_subpart_fields= FALSE; + lex->part_info->subpart_expr= $3; + lex->part_info->subpart_func_string= (char* ) sql_memdup($2+1, expr_len); + lex->part_info->subpart_func_len= expr_len; + } ; opt_no_parts: - /* empty */ {} - | PARTITIONS_SYM real_ulong_num - { - uint no_parts= $2; - LEX *lex= Lex; - if (no_parts == 0) - { - my_error(ER_NO_PARTS_ERROR, MYF(0), "partitions"); - MYSQL_YYABORT; - } + /* empty */ {} + | PARTITIONS_SYM real_ulong_num + { + uint no_parts= $2; + LEX *lex= Lex; + if (no_parts == 0) + { + my_error(ER_NO_PARTS_ERROR, MYF(0), "partitions"); + MYSQL_YYABORT; + } - lex->part_info->no_parts= no_parts; - lex->part_info->use_default_no_partitions= FALSE; - } + lex->part_info->no_parts= no_parts; + lex->part_info->use_default_no_partitions= FALSE; + } ; opt_sub_part: - /* empty */ {} + /* empty */ {} | SUBPARTITION_SYM BY opt_linear HASH_SYM sub_part_func - { Lex->part_info->subpart_type= HASH_PARTITION; } - opt_no_subparts {} + { Lex->part_info->subpart_type= HASH_PARTITION; } + opt_no_subparts {} | SUBPARTITION_SYM BY opt_linear KEY_SYM '(' sub_part_field_list ')' - { - LEX *lex= Lex; - lex->part_info->subpart_type= HASH_PARTITION; - lex->part_info->list_of_subpart_fields= TRUE; - } - opt_no_subparts {} + { + LEX *lex= Lex; + lex->part_info->subpart_type= HASH_PARTITION; + lex->part_info->list_of_subpart_fields= TRUE; + } + opt_no_subparts {} ; sub_part_field_list: - sub_part_field_item {} + sub_part_field_item {} | sub_part_field_list ',' sub_part_field_item {} ; sub_part_field_item: - ident - { - if (Lex->part_info->subpart_field_list.push_back($1.str)) + ident { - mem_alloc_error(1); - MYSQL_YYABORT; - } - } - ; - -part_func_expr: - bit_expr - { - LEX *lex= Lex; - bool not_corr_func; - not_corr_func= !lex->safe_to_cache_query; - lex->safe_to_cache_query= 1; - if (not_corr_func) - { - my_parse_error(ER(ER_CONST_EXPR_IN_PARTITION_FUNC_ERROR)); - MYSQL_YYABORT; - } - $$=$1; - } - ; - -opt_no_subparts: - /* empty */ {} - | SUBPARTITIONS_SYM real_ulong_num - { - uint no_parts= $2; - LEX *lex= Lex; - if (no_parts == 0) - { - my_error(ER_NO_PARTS_ERROR, MYF(0), "subpartitions"); - MYSQL_YYABORT; - } - lex->part_info->no_subparts= no_parts; - lex->part_info->use_default_no_subpartitions= FALSE; - } - ; - -part_defs: - /* empty */ - {} - | '(' part_def_list ')' - { - LEX *lex= Lex; - partition_info *part_info= lex->part_info; - uint count_curr_parts= part_info->partitions.elements; - if (part_info->no_parts != 0) - { - if (part_info->no_parts != - count_curr_parts) + if (Lex->part_info->subpart_field_list.push_back($1.str)) { - my_parse_error(ER(ER_PARTITION_WRONG_NO_PART_ERROR)); + mem_alloc_error(1); MYSQL_YYABORT; } } - else if (count_curr_parts > 0) + ; + +part_func_expr: + bit_expr { - part_info->no_parts= count_curr_parts; + LEX *lex= Lex; + bool not_corr_func; + not_corr_func= !lex->safe_to_cache_query; + lex->safe_to_cache_query= 1; + if (not_corr_func) + { + my_parse_error(ER(ER_CONST_EXPR_IN_PARTITION_FUNC_ERROR)); + MYSQL_YYABORT; + } + $$=$1; + } + ; + +opt_no_subparts: + /* empty */ {} + | SUBPARTITIONS_SYM real_ulong_num + { + uint no_parts= $2; + LEX *lex= Lex; + if (no_parts == 0) + { + my_error(ER_NO_PARTS_ERROR, MYF(0), "subpartitions"); + MYSQL_YYABORT; + } + lex->part_info->no_subparts= no_parts; + lex->part_info->use_default_no_subpartitions= FALSE; + } + ; + +part_defs: + /* empty */ + {} + | '(' part_def_list ')' + { + LEX *lex= Lex; + partition_info *part_info= lex->part_info; + uint count_curr_parts= part_info->partitions.elements; + if (part_info->no_parts != 0) + { + if (part_info->no_parts != + count_curr_parts) + { + my_parse_error(ER(ER_PARTITION_WRONG_NO_PART_ERROR)); + MYSQL_YYABORT; + } + } + else if (count_curr_parts > 0) + { + part_info->no_parts= count_curr_parts; + } + part_info->count_curr_subparts= 0; } - part_info->count_curr_subparts= 0; - } ; part_def_list: - part_definition {} + part_definition {} | part_def_list ',' part_definition {} ; part_definition: - PARTITION_SYM - { - LEX *lex= Lex; - partition_info *part_info= lex->part_info; - partition_element *p_elem= new partition_element(); - - if (!p_elem || part_info->partitions.push_back(p_elem)) + PARTITION_SYM { - mem_alloc_error(sizeof(partition_element)); - MYSQL_YYABORT; + LEX *lex= Lex; + partition_info *part_info= lex->part_info; + partition_element *p_elem= new partition_element(); + + if (!p_elem || part_info->partitions.push_back(p_elem)) + { + mem_alloc_error(sizeof(partition_element)); + MYSQL_YYABORT; + } + p_elem->part_state= PART_NORMAL; + part_info->curr_part_elem= p_elem; + part_info->current_partition= p_elem; + part_info->use_default_partitions= FALSE; + part_info->use_default_no_partitions= FALSE; } - p_elem->part_state= PART_NORMAL; - part_info->curr_part_elem= p_elem; - part_info->current_partition= p_elem; - part_info->use_default_partitions= FALSE; - part_info->use_default_no_partitions= FALSE; - } - part_name {} - opt_part_values {} - opt_part_options {} - opt_sub_partition {} + part_name {} + opt_part_values {} + opt_part_options {} + opt_sub_partition {} ; part_name: - ident - { - LEX *lex= Lex; - partition_info *part_info= lex->part_info; - partition_element *p_elem= part_info->curr_part_elem; - p_elem->partition_name= $1.str; - } + ident + { + LEX *lex= Lex; + partition_info *part_info= lex->part_info; + partition_element *p_elem= part_info->curr_part_elem; + p_elem->partition_name= $1.str; + } ; opt_part_values: - /* empty */ - { - LEX *lex= Lex; - if (! lex->is_partition_management()) + /* empty */ { - if (lex->part_info->part_type == RANGE_PARTITION) + LEX *lex= Lex; + if (! lex->is_partition_management()) { - my_error(ER_PARTITION_REQUIRES_VALUES_ERROR, MYF(0), - "RANGE", "LESS THAN"); - MYSQL_YYABORT; - } - if (lex->part_info->part_type == LIST_PARTITION) - { - my_error(ER_PARTITION_REQUIRES_VALUES_ERROR, MYF(0), - "LIST", "IN"); - MYSQL_YYABORT; + if (lex->part_info->part_type == RANGE_PARTITION) + { + my_error(ER_PARTITION_REQUIRES_VALUES_ERROR, MYF(0), + "RANGE", "LESS THAN"); + MYSQL_YYABORT; + } + if (lex->part_info->part_type == LIST_PARTITION) + { + my_error(ER_PARTITION_REQUIRES_VALUES_ERROR, MYF(0), + "LIST", "IN"); + MYSQL_YYABORT; + } } + else + lex->part_info->part_type= HASH_PARTITION; } - else - lex->part_info->part_type= HASH_PARTITION; - } | VALUES LESS_SYM THAN_SYM part_func_max - { - LEX *lex= Lex; - if (! lex->is_partition_management()) { - if (Lex->part_info->part_type != RANGE_PARTITION) + LEX *lex= Lex; + if (! lex->is_partition_management()) { - my_error(ER_PARTITION_WRONG_VALUES_ERROR, MYF(0), - "RANGE", "LESS THAN"); - MYSQL_YYABORT; + if (Lex->part_info->part_type != RANGE_PARTITION) + { + my_error(ER_PARTITION_WRONG_VALUES_ERROR, MYF(0), + "RANGE", "LESS THAN"); + MYSQL_YYABORT; + } } + else + lex->part_info->part_type= RANGE_PARTITION; } - else - lex->part_info->part_type= RANGE_PARTITION; - } | VALUES IN_SYM '(' part_list_func ')' - { - LEX *lex= Lex; - if (! lex->is_partition_management()) { - if (Lex->part_info->part_type != LIST_PARTITION) + LEX *lex= Lex; + if (! lex->is_partition_management()) { - my_error(ER_PARTITION_WRONG_VALUES_ERROR, MYF(0), - "LIST", "IN"); - MYSQL_YYABORT; + if (Lex->part_info->part_type != LIST_PARTITION) + { + my_error(ER_PARTITION_WRONG_VALUES_ERROR, MYF(0), + "LIST", "IN"); + MYSQL_YYABORT; + } } + else + lex->part_info->part_type= LIST_PARTITION; } - else - lex->part_info->part_type= LIST_PARTITION; - } ; part_func_max: - max_value_sym - { - LEX *lex= Lex; - if (lex->part_info->defined_max_value) + max_value_sym { - my_parse_error(ER(ER_PARTITION_MAXVALUE_ERROR)); - MYSQL_YYABORT; + LEX *lex= Lex; + if (lex->part_info->defined_max_value) + { + my_parse_error(ER(ER_PARTITION_MAXVALUE_ERROR)); + MYSQL_YYABORT; + } + lex->part_info->defined_max_value= TRUE; + lex->part_info->curr_part_elem->max_value= TRUE; + lex->part_info->curr_part_elem->range_value= LONGLONG_MAX; } - lex->part_info->defined_max_value= TRUE; - lex->part_info->curr_part_elem->max_value= TRUE; - lex->part_info->curr_part_elem->range_value= LONGLONG_MAX; - } | part_range_func - { - if (Lex->part_info->defined_max_value) { - my_parse_error(ER(ER_PARTITION_MAXVALUE_ERROR)); - MYSQL_YYABORT; + if (Lex->part_info->defined_max_value) + { + my_parse_error(ER(ER_PARTITION_MAXVALUE_ERROR)); + MYSQL_YYABORT; + } + if (Lex->part_info->curr_part_elem->has_null_value) + { + my_parse_error(ER(ER_NULL_IN_VALUES_LESS_THAN)); + MYSQL_YYABORT; + } } - if (Lex->part_info->curr_part_elem->has_null_value) - { - my_parse_error(ER(ER_NULL_IN_VALUES_LESS_THAN)); - MYSQL_YYABORT; - } - } ; max_value_sym: - MAX_VALUE_SYM + MAX_VALUE_SYM | '(' MAX_VALUE_SYM ')' ; part_range_func: - '(' part_bit_expr ')' - { - partition_info *part_info= Lex->part_info; - if (!($2->unsigned_flag)) - part_info->curr_part_elem->signed_flag= TRUE; - part_info->curr_part_elem->range_value= $2->value; - } + '(' part_bit_expr ')' + { + partition_info *part_info= Lex->part_info; + if (!($2->unsigned_flag)) + part_info->curr_part_elem->signed_flag= TRUE; + part_info->curr_part_elem->range_value= $2->value; + } ; part_list_func: - part_list_item {} + part_list_item {} | part_list_func ',' part_list_item {} ; part_list_item: - part_bit_expr - { - part_elem_value *value_ptr= $1; - partition_info *part_info= Lex->part_info; - if (!value_ptr->unsigned_flag) - part_info->curr_part_elem->signed_flag= TRUE; - if (!value_ptr->null_value && - part_info->curr_part_elem-> - list_val_list.push_back(value_ptr)) + part_bit_expr { - mem_alloc_error(sizeof(part_elem_value)); - MYSQL_YYABORT; + part_elem_value *value_ptr= $1; + partition_info *part_info= Lex->part_info; + if (!value_ptr->unsigned_flag) + part_info->curr_part_elem->signed_flag= TRUE; + if (!value_ptr->null_value && + part_info->curr_part_elem-> + list_val_list.push_back(value_ptr)) + { + mem_alloc_error(sizeof(part_elem_value)); + MYSQL_YYABORT; + } } - } ; part_bit_expr: - bit_expr - { - Item *part_expr= $1; - THD *thd= YYTHD; - LEX *lex= thd->lex; - Name_resolution_context *context= &lex->current_select->context; - TABLE_LIST *save_list= context->table_list; - const char *save_where= thd->where; + bit_expr + { + Item *part_expr= $1; + THD *thd= YYTHD; + LEX *lex= thd->lex; + Name_resolution_context *context= &lex->current_select->context; + TABLE_LIST *save_list= context->table_list; + const char *save_where= thd->where; - context->table_list= 0; - thd->where= "partition function"; + context->table_list= 0; + thd->where= "partition function"; - part_elem_value *value_ptr= - (part_elem_value*)sql_alloc(sizeof(part_elem_value)); - if (!value_ptr) - { - mem_alloc_error(sizeof(part_elem_value)); - MYSQL_YYABORT; - } - if (part_expr->walk(&Item::check_partition_func_processor, 0, - NULL)) - { - my_error(ER_PARTITION_FUNCTION_IS_NOT_ALLOWED, MYF(0)); - MYSQL_YYABORT; - } - if (part_expr->fix_fields(YYTHD, (Item**)0) || - ((context->table_list= save_list), FALSE) || - (!part_expr->const_item()) || - (!lex->safe_to_cache_query)) - { - my_error(ER_NO_CONST_EXPR_IN_RANGE_OR_LIST_ERROR, MYF(0)); - MYSQL_YYABORT; - } - thd->where= save_where; - value_ptr->value= part_expr->val_int(); - value_ptr->unsigned_flag= TRUE; - if (!part_expr->unsigned_flag && - value_ptr->value < 0) - value_ptr->unsigned_flag= FALSE; - if ((value_ptr->null_value= part_expr->null_value)) - { - if (Lex->part_info->curr_part_elem->has_null_value) + part_elem_value *value_ptr= + (part_elem_value*)sql_alloc(sizeof(part_elem_value)); + if (!value_ptr) { - my_error(ER_MULTIPLE_DEF_CONST_IN_LIST_PART_ERROR, MYF(0)); + mem_alloc_error(sizeof(part_elem_value)); MYSQL_YYABORT; } - Lex->part_info->curr_part_elem->has_null_value= TRUE; + if (part_expr->walk(&Item::check_partition_func_processor, 0, + NULL)) + { + my_error(ER_PARTITION_FUNCTION_IS_NOT_ALLOWED, MYF(0)); + MYSQL_YYABORT; + } + if (part_expr->fix_fields(YYTHD, (Item**)0) || + ((context->table_list= save_list), FALSE) || + (!part_expr->const_item()) || + (!lex->safe_to_cache_query)) + { + my_error(ER_NO_CONST_EXPR_IN_RANGE_OR_LIST_ERROR, MYF(0)); + MYSQL_YYABORT; + } + thd->where= save_where; + value_ptr->value= part_expr->val_int(); + value_ptr->unsigned_flag= TRUE; + if (!part_expr->unsigned_flag && + value_ptr->value < 0) + value_ptr->unsigned_flag= FALSE; + if ((value_ptr->null_value= part_expr->null_value)) + { + if (Lex->part_info->curr_part_elem->has_null_value) + { + my_error(ER_MULTIPLE_DEF_CONST_IN_LIST_PART_ERROR, MYF(0)); + MYSQL_YYABORT; + } + Lex->part_info->curr_part_elem->has_null_value= TRUE; + } + else if (part_expr->result_type() != INT_RESULT) + { + my_parse_error(ER(ER_INCONSISTENT_TYPE_OF_FUNCTIONS_ERROR)); + MYSQL_YYABORT; + } + $$= value_ptr; } - else if (part_expr->result_type() != INT_RESULT) - { - my_parse_error(ER(ER_INCONSISTENT_TYPE_OF_FUNCTIONS_ERROR)); - MYSQL_YYABORT; - } - $$= value_ptr; - } ; opt_sub_partition: - /* empty */ - { - if (Lex->part_info->no_subparts != 0 && - !Lex->part_info->use_default_subpartitions) + /* empty */ { - my_parse_error(ER(ER_PARTITION_WRONG_NO_SUBPART_ERROR)); - MYSQL_YYABORT; + if (Lex->part_info->no_subparts != 0 && + !Lex->part_info->use_default_subpartitions) + { + my_parse_error(ER(ER_PARTITION_WRONG_NO_SUBPART_ERROR)); + MYSQL_YYABORT; + } } - } | '(' sub_part_list ')' - { - LEX *lex= Lex; - partition_info *part_info= lex->part_info; - if (part_info->no_subparts != 0) { - if (part_info->no_subparts != - part_info->count_curr_subparts) + LEX *lex= Lex; + partition_info *part_info= lex->part_info; + if (part_info->no_subparts != 0) { - my_parse_error(ER(ER_PARTITION_WRONG_NO_SUBPART_ERROR)); - MYSQL_YYABORT; + if (part_info->no_subparts != + part_info->count_curr_subparts) + { + my_parse_error(ER(ER_PARTITION_WRONG_NO_SUBPART_ERROR)); + MYSQL_YYABORT; + } } - } - else if (part_info->count_curr_subparts > 0) - { - if (part_info->partitions.elements > 1) + else if (part_info->count_curr_subparts > 0) { - my_parse_error(ER(ER_PARTITION_WRONG_NO_SUBPART_ERROR)); - MYSQL_YYABORT; + if (part_info->partitions.elements > 1) + { + my_parse_error(ER(ER_PARTITION_WRONG_NO_SUBPART_ERROR)); + MYSQL_YYABORT; + } + part_info->no_subparts= part_info->count_curr_subparts; } - part_info->no_subparts= part_info->count_curr_subparts; + part_info->count_curr_subparts= 0; } - part_info->count_curr_subparts= 0; - } ; sub_part_list: - sub_part_definition {} + sub_part_definition {} | sub_part_list ',' sub_part_definition {} ; sub_part_definition: - SUBPARTITION_SYM - { - LEX *lex= Lex; - partition_info *part_info= lex->part_info; - partition_element *curr_part= part_info->current_partition; - partition_element *sub_p_elem= new partition_element(curr_part); - if (!sub_p_elem || - curr_part->subpartitions.push_back(sub_p_elem)) + SUBPARTITION_SYM { - mem_alloc_error(sizeof(partition_element)); - MYSQL_YYABORT; + LEX *lex= Lex; + partition_info *part_info= lex->part_info; + partition_element *curr_part= part_info->current_partition; + partition_element *sub_p_elem= new partition_element(curr_part); + if (!sub_p_elem || + curr_part->subpartitions.push_back(sub_p_elem)) + { + mem_alloc_error(sizeof(partition_element)); + MYSQL_YYABORT; + } + part_info->curr_part_elem= sub_p_elem; + part_info->use_default_subpartitions= FALSE; + part_info->use_default_no_subpartitions= FALSE; + part_info->count_curr_subparts++; } - part_info->curr_part_elem= sub_p_elem; - part_info->use_default_subpartitions= FALSE; - part_info->use_default_no_subpartitions= FALSE; - part_info->count_curr_subparts++; - } - sub_name opt_part_options {} + sub_name opt_part_options {} ; sub_name: - ident_or_text - { Lex->part_info->curr_part_elem->partition_name= $1.str; } + ident_or_text + { Lex->part_info->curr_part_elem->partition_name= $1.str; } ; opt_part_options: - /* empty */ {} + /* empty */ {} | opt_part_option_list {} ; opt_part_option_list: - opt_part_option_list opt_part_option {} + opt_part_option_list opt_part_option {} | opt_part_option {} ; opt_part_option: - TABLESPACE opt_equal ident_or_text - { Lex->part_info->curr_part_elem->tablespace_name= $3.str; } + TABLESPACE opt_equal ident_or_text + { Lex->part_info->curr_part_elem->tablespace_name= $3.str; } | opt_storage ENGINE_SYM opt_equal storage_engines - { - LEX *lex= Lex; - lex->part_info->curr_part_elem->engine_type= $4; - lex->part_info->default_engine_type= $4; - } + { + LEX *lex= Lex; + lex->part_info->curr_part_elem->engine_type= $4; + lex->part_info->default_engine_type= $4; + } | NODEGROUP_SYM opt_equal real_ulong_num - { Lex->part_info->curr_part_elem->nodegroup_id= (uint16) $3; } + { Lex->part_info->curr_part_elem->nodegroup_id= (uint16) $3; } | MAX_ROWS opt_equal real_ulonglong_num - { Lex->part_info->curr_part_elem->part_max_rows= (ha_rows) $3; } + { Lex->part_info->curr_part_elem->part_max_rows= (ha_rows) $3; } | MIN_ROWS opt_equal real_ulonglong_num - { Lex->part_info->curr_part_elem->part_min_rows= (ha_rows) $3; } + { Lex->part_info->curr_part_elem->part_min_rows= (ha_rows) $3; } | DATA_SYM DIRECTORY_SYM opt_equal TEXT_STRING_sys - { Lex->part_info->curr_part_elem->data_file_name= $4.str; } + { Lex->part_info->curr_part_elem->data_file_name= $4.str; } | INDEX_SYM DIRECTORY_SYM opt_equal TEXT_STRING_sys - { Lex->part_info->curr_part_elem->index_file_name= $4.str; } + { Lex->part_info->curr_part_elem->index_file_name= $4.str; } | COMMENT_SYM opt_equal TEXT_STRING_sys - { Lex->part_info->curr_part_elem->part_comment= $3.str; } + { Lex->part_info->curr_part_elem->part_comment= $3.str; } ; /* @@ -4224,93 +4277,132 @@ opt_part_option: create_select: SELECT_SYM { - LEX *lex=Lex; - lex->lock_option= using_update_log ? TL_READ_NO_INSERT : TL_READ; - if (lex->sql_command == SQLCOM_INSERT) - lex->sql_command= SQLCOM_INSERT_SELECT; - else if (lex->sql_command == SQLCOM_REPLACE) - lex->sql_command= SQLCOM_REPLACE_SELECT; - /* + LEX *lex=Lex; + lex->lock_option= using_update_log ? TL_READ_NO_INSERT : TL_READ; + if (lex->sql_command == SQLCOM_INSERT) + lex->sql_command= SQLCOM_INSERT_SELECT; + else if (lex->sql_command == SQLCOM_REPLACE) + lex->sql_command= SQLCOM_REPLACE_SELECT; + /* The following work only with the local list, the global list is created correctly in this case - */ - lex->current_select->table_list.save_and_clear(&lex->save_list); - mysql_init_select(lex); - lex->current_select->parsing_place= SELECT_LIST; + */ + lex->current_select->table_list.save_and_clear(&lex->save_list); + mysql_init_select(lex); + lex->current_select->parsing_place= SELECT_LIST; } select_options select_item_list - { - Select->parsing_place= NO_MATTER; - } - opt_select_from - { - /* + { + Select->parsing_place= NO_MATTER; + } + opt_select_from + { + /* The following work only with the local list, the global list is created correctly in this case - */ - Lex->current_select->table_list.push_front(&Lex->save_list); - } + */ + Lex->current_select->table_list.push_front(&Lex->save_list); + } ; opt_as: - /* empty */ {} - | AS {}; + /* empty */ {} + | AS {} + ; opt_create_database_options: - /* empty */ {} - | create_database_options {}; + /* empty */ {} + | create_database_options {} + ; create_database_options: - create_database_option {} - | create_database_options create_database_option {}; + create_database_option {} + | create_database_options create_database_option {} + ; create_database_option: - default_collation {} - | default_charset {}; + default_collation {} + | default_charset {} + ; opt_table_options: - /* empty */ { $$= 0; } - | table_options { $$= $1;}; + /* empty */ { $$= 0; } + | table_options { $$= $1;} + ; table_options: - table_option { $$=$1; } - | table_option table_options { $$= $1 | $2; }; + table_option { $$=$1; } + | table_option table_options { $$= $1 | $2; } + ; table_option: - TEMPORARY { $$=HA_LEX_CREATE_TMP_TABLE; }; + TEMPORARY { $$=HA_LEX_CREATE_TMP_TABLE; } + ; opt_if_not_exists: - /* empty */ { $$= 0; } - | IF not EXISTS { $$=HA_LEX_CREATE_IF_NOT_EXISTS; }; + /* empty */ { $$= 0; } + | IF not EXISTS { $$=HA_LEX_CREATE_IF_NOT_EXISTS; } + ; opt_create_table_options: - /* empty */ - | create_table_options; + /* empty */ + | create_table_options + ; create_table_options_space_separated: - create_table_option - | create_table_option create_table_options_space_separated; + create_table_option + | create_table_option create_table_options_space_separated + ; create_table_options: - create_table_option - | create_table_option create_table_options - | create_table_option ',' create_table_options; + create_table_option + | create_table_option create_table_options + | create_table_option ',' create_table_options + ; create_table_option: - ENGINE_SYM opt_equal storage_engines { Lex->create_info.db_type= $3; Lex->create_info.used_fields|= HA_CREATE_USED_ENGINE; } - | TYPE_SYM opt_equal storage_engines + ENGINE_SYM opt_equal storage_engines + { + Lex->create_info.db_type= $3; + Lex->create_info.used_fields|= HA_CREATE_USED_ENGINE; + } + | TYPE_SYM opt_equal storage_engines { Lex->create_info.db_type= $3; WARN_DEPRECATED(yythd, "5.2", "TYPE=storage_engine", "'ENGINE=storage_engine'"); Lex->create_info.used_fields|= HA_CREATE_USED_ENGINE; } - | MAX_ROWS opt_equal ulonglong_num { Lex->create_info.max_rows= $3; Lex->create_info.used_fields|= HA_CREATE_USED_MAX_ROWS;} - | MIN_ROWS opt_equal ulonglong_num { Lex->create_info.min_rows= $3; Lex->create_info.used_fields|= HA_CREATE_USED_MIN_ROWS;} - | AVG_ROW_LENGTH opt_equal ulong_num { Lex->create_info.avg_row_length=$3; Lex->create_info.used_fields|= HA_CREATE_USED_AVG_ROW_LENGTH;} - | PASSWORD opt_equal TEXT_STRING_sys { Lex->create_info.password=$3.str; Lex->create_info.used_fields|= HA_CREATE_USED_PASSWORD; } - | COMMENT_SYM opt_equal TEXT_STRING_sys { Lex->create_info.comment=$3; Lex->create_info.used_fields|= HA_CREATE_USED_COMMENT; } - | AUTO_INC opt_equal ulonglong_num { Lex->create_info.auto_increment_value=$3; Lex->create_info.used_fields|= HA_CREATE_USED_AUTO;} + | MAX_ROWS opt_equal ulonglong_num + { + Lex->create_info.max_rows= $3; + Lex->create_info.used_fields|= HA_CREATE_USED_MAX_ROWS; + } + | MIN_ROWS opt_equal ulonglong_num + { + Lex->create_info.min_rows= $3; + Lex->create_info.used_fields|= HA_CREATE_USED_MIN_ROWS; + } + | AVG_ROW_LENGTH opt_equal ulong_num + { + Lex->create_info.avg_row_length=$3; + Lex->create_info.used_fields|= HA_CREATE_USED_AVG_ROW_LENGTH; + } + | PASSWORD opt_equal TEXT_STRING_sys + { + Lex->create_info.password=$3.str; + Lex->create_info.used_fields|= HA_CREATE_USED_PASSWORD; + } + | COMMENT_SYM opt_equal TEXT_STRING_sys + { + Lex->create_info.comment=$3; + Lex->create_info.used_fields|= HA_CREATE_USED_COMMENT; + } + | AUTO_INC opt_equal ulonglong_num + { + Lex->create_info.auto_increment_value=$3; + Lex->create_info.used_fields|= HA_CREATE_USED_AUTO; + } | PACK_KEYS_SYM opt_equal ulong_num { switch($3) { @@ -4332,182 +4424,220 @@ create_table_option: ~(HA_OPTION_PACK_KEYS | HA_OPTION_NO_PACK_KEYS); Lex->create_info.used_fields|= HA_CREATE_USED_PACK_KEYS; } - | CHECKSUM_SYM opt_equal ulong_num { Lex->create_info.table_options|= $3 ? HA_OPTION_CHECKSUM : HA_OPTION_NO_CHECKSUM; Lex->create_info.used_fields|= HA_CREATE_USED_CHECKSUM; } - | DELAY_KEY_WRITE_SYM opt_equal ulong_num { Lex->create_info.table_options|= $3 ? HA_OPTION_DELAY_KEY_WRITE : HA_OPTION_NO_DELAY_KEY_WRITE; Lex->create_info.used_fields|= HA_CREATE_USED_DELAY_KEY_WRITE; } - | ROW_FORMAT_SYM opt_equal row_types { Lex->create_info.row_type= $3; Lex->create_info.used_fields|= HA_CREATE_USED_ROW_FORMAT; } - | UNION_SYM opt_equal '(' table_list ')' - { - /* Move the union list to the merge_list */ - LEX *lex=Lex; - TABLE_LIST *table_list= lex->select_lex.get_table_list(); - lex->create_info.merge_list= lex->select_lex.table_list; - lex->create_info.merge_list.elements--; - lex->create_info.merge_list.first= - (uchar*) (table_list->next_local); - lex->select_lex.table_list.elements=1; - lex->select_lex.table_list.next= - (uchar**) &(table_list->next_local); - table_list->next_local= 0; - lex->create_info.used_fields|= HA_CREATE_USED_UNION; - } - | default_charset - | default_collation - | INSERT_METHOD opt_equal merge_insert_types { Lex->create_info.merge_insert_method= $3; Lex->create_info.used_fields|= HA_CREATE_USED_INSERT_METHOD;} - | DATA_SYM DIRECTORY_SYM opt_equal TEXT_STRING_sys { Lex->create_info.data_file_name= $4.str; Lex->create_info.used_fields|= HA_CREATE_USED_DATADIR; } - | INDEX_SYM DIRECTORY_SYM opt_equal TEXT_STRING_sys { Lex->create_info.index_file_name= $4.str; Lex->create_info.used_fields|= HA_CREATE_USED_INDEXDIR; } - | TABLESPACE ident {Lex->create_info.tablespace= $2.str;} - | STORAGE_SYM DISK_SYM {Lex->create_info.storage_media= HA_SM_DISK;} - | STORAGE_SYM MEMORY_SYM {Lex->create_info.storage_media= HA_SM_MEMORY;} - | CONNECTION_SYM opt_equal TEXT_STRING_sys { Lex->create_info.connect_string.str= $3.str; Lex->create_info.connect_string.length= $3.length; Lex->create_info.used_fields|= HA_CREATE_USED_CONNECTION; } - | KEY_BLOCK_SIZE opt_equal ulong_num - { - Lex->create_info.used_fields|= HA_CREATE_USED_KEY_BLOCK_SIZE; - Lex->create_info.key_block_size= $3; - } + | CHECKSUM_SYM opt_equal ulong_num + { + Lex->create_info.table_options|= $3 ? HA_OPTION_CHECKSUM : HA_OPTION_NO_CHECKSUM; + Lex->create_info.used_fields|= HA_CREATE_USED_CHECKSUM; + } + | DELAY_KEY_WRITE_SYM opt_equal ulong_num + { + Lex->create_info.table_options|= $3 ? HA_OPTION_DELAY_KEY_WRITE : HA_OPTION_NO_DELAY_KEY_WRITE; + Lex->create_info.used_fields|= HA_CREATE_USED_DELAY_KEY_WRITE; + } + | ROW_FORMAT_SYM opt_equal row_types + { + Lex->create_info.row_type= $3; + Lex->create_info.used_fields|= HA_CREATE_USED_ROW_FORMAT; + } + | UNION_SYM opt_equal '(' table_list ')' + { + /* Move the union list to the merge_list */ + LEX *lex=Lex; + TABLE_LIST *table_list= lex->select_lex.get_table_list(); + lex->create_info.merge_list= lex->select_lex.table_list; + lex->create_info.merge_list.elements--; + lex->create_info.merge_list.first= + (uchar*) (table_list->next_local); + lex->select_lex.table_list.elements=1; + lex->select_lex.table_list.next= + (uchar**) &(table_list->next_local); + table_list->next_local= 0; + lex->create_info.used_fields|= HA_CREATE_USED_UNION; + } + | default_charset + | default_collation + | INSERT_METHOD opt_equal merge_insert_types + { + Lex->create_info.merge_insert_method= $3; + Lex->create_info.used_fields|= HA_CREATE_USED_INSERT_METHOD; + } + | DATA_SYM DIRECTORY_SYM opt_equal TEXT_STRING_sys + { + Lex->create_info.data_file_name= $4.str; + Lex->create_info.used_fields|= HA_CREATE_USED_DATADIR; + } + | INDEX_SYM DIRECTORY_SYM opt_equal TEXT_STRING_sys + { + Lex->create_info.index_file_name= $4.str; + Lex->create_info.used_fields|= HA_CREATE_USED_INDEXDIR; + } + | TABLESPACE ident + {Lex->create_info.tablespace= $2.str;} + | STORAGE_SYM DISK_SYM + {Lex->create_info.storage_media= HA_SM_DISK;} + | STORAGE_SYM MEMORY_SYM + {Lex->create_info.storage_media= HA_SM_MEMORY;} + | CONNECTION_SYM opt_equal TEXT_STRING_sys + { + Lex->create_info.connect_string.str= $3.str; + Lex->create_info.connect_string.length= $3.length; + Lex->create_info.used_fields|= HA_CREATE_USED_CONNECTION; + } + | KEY_BLOCK_SIZE opt_equal ulong_num + { + Lex->create_info.used_fields|= HA_CREATE_USED_KEY_BLOCK_SIZE; + Lex->create_info.key_block_size= $3; + } ; default_charset: - opt_default charset opt_equal charset_name_or_default - { - HA_CREATE_INFO *cinfo= &Lex->create_info; - if ((cinfo->used_fields & HA_CREATE_USED_DEFAULT_CHARSET) && - cinfo->default_table_charset && $4 && - !my_charset_same(cinfo->default_table_charset,$4)) + opt_default charset opt_equal charset_name_or_default { - my_error(ER_CONFLICTING_DECLARATIONS, MYF(0), - "CHARACTER SET ", cinfo->default_table_charset->csname, - "CHARACTER SET ", $4->csname); - MYSQL_YYABORT; - } - Lex->create_info.default_table_charset= $4; - Lex->create_info.used_fields|= HA_CREATE_USED_DEFAULT_CHARSET; - }; - -default_collation: - opt_default COLLATE_SYM opt_equal collation_name_or_default - { - HA_CREATE_INFO *cinfo= &Lex->create_info; - if ((cinfo->used_fields & HA_CREATE_USED_DEFAULT_CHARSET) && - cinfo->default_table_charset && $4 && - !my_charset_same(cinfo->default_table_charset,$4)) + HA_CREATE_INFO *cinfo= &Lex->create_info; + if ((cinfo->used_fields & HA_CREATE_USED_DEFAULT_CHARSET) && + cinfo->default_table_charset && $4 && + !my_charset_same(cinfo->default_table_charset,$4)) { - my_error(ER_COLLATION_CHARSET_MISMATCH, MYF(0), - $4->name, cinfo->default_table_charset->csname); + my_error(ER_CONFLICTING_DECLARATIONS, MYF(0), + "CHARACTER SET ", cinfo->default_table_charset->csname, + "CHARACTER SET ", $4->csname); MYSQL_YYABORT; } Lex->create_info.default_table_charset= $4; Lex->create_info.used_fields|= HA_CREATE_USED_DEFAULT_CHARSET; - }; + } + ; + +default_collation: + opt_default COLLATE_SYM opt_equal collation_name_or_default + { + HA_CREATE_INFO *cinfo= &Lex->create_info; + if ((cinfo->used_fields & HA_CREATE_USED_DEFAULT_CHARSET) && + cinfo->default_table_charset && $4 && + !my_charset_same(cinfo->default_table_charset,$4)) + { + my_error(ER_COLLATION_CHARSET_MISMATCH, MYF(0), + $4->name, cinfo->default_table_charset->csname); + MYSQL_YYABORT; + } + Lex->create_info.default_table_charset= $4; + Lex->create_info.used_fields|= HA_CREATE_USED_DEFAULT_CHARSET; + } + ; storage_engines: - ident_or_text - { - plugin_ref plugin= ha_resolve_by_name(YYTHD, &$1); - - if (plugin) - $$= plugin_data(plugin, handlerton*); - else + ident_or_text { - if (YYTHD->variables.sql_mode & MODE_NO_ENGINE_SUBSTITUTION) + plugin_ref plugin= ha_resolve_by_name(YYTHD, &$1); + + if (plugin) + $$= plugin_data(plugin, handlerton*); + else + { + if (YYTHD->variables.sql_mode & MODE_NO_ENGINE_SUBSTITUTION) + { + my_error(ER_UNKNOWN_STORAGE_ENGINE, MYF(0), $1.str); + MYSQL_YYABORT; + } + $$= 0; + push_warning_printf(YYTHD, MYSQL_ERROR::WARN_LEVEL_WARN, + ER_UNKNOWN_STORAGE_ENGINE, + ER(ER_UNKNOWN_STORAGE_ENGINE), + $1.str); + } + } + ; + +known_storage_engines: + ident_or_text + { + plugin_ref plugin; + if ((plugin= ha_resolve_by_name(YYTHD, &$1))) + $$= plugin_data(plugin, handlerton*); + else { my_error(ER_UNKNOWN_STORAGE_ENGINE, MYF(0), $1.str); MYSQL_YYABORT; } - $$= 0; - push_warning_printf(YYTHD, MYSQL_ERROR::WARN_LEVEL_WARN, - ER_UNKNOWN_STORAGE_ENGINE, - ER(ER_UNKNOWN_STORAGE_ENGINE), - $1.str); } - } - ; - -known_storage_engines: - ident_or_text - { - plugin_ref plugin; - if ((plugin= ha_resolve_by_name(YYTHD, &$1))) - $$= plugin_data(plugin, handlerton*); - else - { - my_error(ER_UNKNOWN_STORAGE_ENGINE, MYF(0), $1.str); - MYSQL_YYABORT; - } - } ; row_types: - DEFAULT { $$= ROW_TYPE_DEFAULT; } - | FIXED_SYM { $$= ROW_TYPE_FIXED; } - | DYNAMIC_SYM { $$= ROW_TYPE_DYNAMIC; } - | COMPRESSED_SYM { $$= ROW_TYPE_COMPRESSED; } - | REDUNDANT_SYM { $$= ROW_TYPE_REDUNDANT; } - | COMPACT_SYM { $$= ROW_TYPE_COMPACT; }; + DEFAULT { $$= ROW_TYPE_DEFAULT; } + | FIXED_SYM { $$= ROW_TYPE_FIXED; } + | DYNAMIC_SYM { $$= ROW_TYPE_DYNAMIC; } + | COMPRESSED_SYM { $$= ROW_TYPE_COMPRESSED; } + | REDUNDANT_SYM { $$= ROW_TYPE_REDUNDANT; } + | COMPACT_SYM { $$= ROW_TYPE_COMPACT; } + ; merge_insert_types: - NO_SYM { $$= MERGE_INSERT_DISABLED; } + NO_SYM { $$= MERGE_INSERT_DISABLED; } | FIRST_SYM { $$= MERGE_INSERT_TO_FIRST; } - | LAST_SYM { $$= MERGE_INSERT_TO_LAST; }; + | LAST_SYM { $$= MERGE_INSERT_TO_LAST; } + ; opt_select_from: - opt_limit_clause {} - | select_from select_lock_type; + opt_limit_clause {} + | select_from select_lock_type + ; udf_func_type: - /* empty */ { $$ = UDFTYPE_FUNCTION; } - | AGGREGATE_SYM { $$ = UDFTYPE_AGGREGATE; }; + /* empty */ { $$ = UDFTYPE_FUNCTION; } + | AGGREGATE_SYM { $$ = UDFTYPE_AGGREGATE; }; udf_type: - STRING_SYM {$$ = (int) STRING_RESULT; } - | REAL {$$ = (int) REAL_RESULT; } + STRING_SYM {$$ = (int) STRING_RESULT; } + | REAL {$$ = (int) REAL_RESULT; } | DECIMAL_SYM {$$ = (int) DECIMAL_RESULT; } - | INT_SYM {$$ = (int) INT_RESULT; }; + | INT_SYM {$$ = (int) INT_RESULT; } + ; field_list: - field_list_item - | field_list ',' field_list_item; - + field_list_item + | field_list ',' field_list_item + ; field_list_item: - column_def - | key_def - ; + column_def + | key_def + ; column_def: - field_spec opt_check_constraint - | field_spec references - { - Lex->col_list.empty(); /* Alloced by sql_alloc */ - } - ; + field_spec opt_check_constraint + | field_spec references + { + Lex->col_list.empty(); /* Alloced by sql_alloc */ + } + ; key_def: - key_type opt_ident key_alg '(' key_list ')' key_options - { - LEX *lex=Lex; - if ($1 != Key::FULLTEXT && lex->key_create_info.parser_name.str) - { - my_parse_error(ER(ER_SYNTAX_ERROR)); - MYSQL_YYABORT; - } + key_type opt_ident key_alg '(' key_list ')' key_options + { + LEX *lex=Lex; + if ($1 != Key::FULLTEXT && lex->key_create_info.parser_name.str) + { + my_parse_error(ER(ER_SYNTAX_ERROR)); + MYSQL_YYABORT; + } Key *key= new Key($1, $2, &lex->key_create_info, 0, lex->col_list); - lex->alter_info.key_list.push_back(key); - lex->col_list.empty(); /* Alloced by sql_alloc */ - } - | opt_constraint constraint_key_type opt_ident key_alg - '(' key_list ')' key_options - { - LEX *lex=Lex; - const char *key_name= $3 ? $3 : $1; + lex->alter_info.key_list.push_back(key); + lex->col_list.empty(); /* Alloced by sql_alloc */ + } + | opt_constraint constraint_key_type opt_ident key_alg + '(' key_list ')' key_options + { + LEX *lex=Lex; + const char *key_name= $3 ? $3 : $1; Key *key= new Key($2, key_name, &lex->key_create_info, 0, lex->col_list); - lex->alter_info.key_list.push_back(key); - lex->col_list.empty(); /* Alloced by sql_alloc */ - } - | opt_constraint FOREIGN KEY_SYM opt_ident '(' key_list ')' references - { - LEX *lex=Lex; + lex->alter_info.key_list.push_back(key); + lex->col_list.empty(); /* Alloced by sql_alloc */ + } + | opt_constraint FOREIGN KEY_SYM opt_ident '(' key_list ')' references + { + LEX *lex=Lex; const char *key_name= $4 ? $4 : $1; Key *key= new Foreign_key(key_name, lex->col_list, $8, @@ -4520,117 +4650,168 @@ key_def: &default_key_create_info, 1, lex->col_list); lex->alter_info.key_list.push_back(key); - lex->col_list.empty(); /* Alloced by sql_alloc */ + lex->col_list.empty(); /* Alloced by sql_alloc */ /* Only used for ALTER TABLE. Ignored otherwise. */ lex->alter_info.flags|= ALTER_FOREIGN_KEY; - } - | constraint opt_check_constraint - { - Lex->col_list.empty(); /* Alloced by sql_alloc */ - } - | opt_constraint check_constraint - { - Lex->col_list.empty(); /* Alloced by sql_alloc */ - } - ; + } + | constraint opt_check_constraint + { + Lex->col_list.empty(); /* Alloced by sql_alloc */ + } + | opt_constraint check_constraint + { + Lex->col_list.empty(); /* Alloced by sql_alloc */ + } + ; opt_check_constraint: - /* empty */ - | check_constraint - ; + /* empty */ + | check_constraint + ; check_constraint: - CHECK_SYM expr - ; + CHECK_SYM expr + ; opt_constraint: - /* empty */ { $$=(char*) 0; } - | constraint { $$= $1; } - ; + /* empty */ { $$=(char*) 0; } + | constraint { $$= $1; } + ; constraint: - CONSTRAINT opt_ident { $$=$2; } - ; + CONSTRAINT opt_ident { $$=$2; } + ; field_spec: - field_ident - { - LEX *lex=Lex; - lex->length=lex->dec=0; lex->type=0; - lex->default_value= lex->on_update_value= 0; - lex->comment=null_lex_str; - lex->charset=NULL; - } - type opt_attribute - { - LEX *lex=Lex; - if (add_field_to_list(lex->thd, &$1, (enum enum_field_types) $3, - lex->length,lex->dec,lex->type, - lex->default_value, lex->on_update_value, - &lex->comment, - lex->change,&lex->interval_list,lex->charset, - lex->uint_geom_type)) - MYSQL_YYABORT; - }; + field_ident + { + LEX *lex=Lex; + lex->length=lex->dec=0; + lex->type=0; + lex->default_value= lex->on_update_value= 0; + lex->comment=null_lex_str; + lex->charset=NULL; + } + type opt_attribute + { + LEX *lex=Lex; + if (add_field_to_list(lex->thd, &$1, (enum enum_field_types) $3, + lex->length,lex->dec,lex->type, + lex->default_value, lex->on_update_value, + &lex->comment, + lex->change,&lex->interval_list,lex->charset, + lex->uint_geom_type)) + MYSQL_YYABORT; + } + ; type: - int_type opt_len field_options { $$=$1; } - | real_type opt_precision field_options { $$=$1; } - | FLOAT_SYM float_options field_options { $$=MYSQL_TYPE_FLOAT; } - | BIT_SYM { Lex->length= (char*) "1"; - $$=MYSQL_TYPE_BIT; } - | BIT_SYM '(' NUM ')' { Lex->length= $3.str; - $$=MYSQL_TYPE_BIT; } - | BOOL_SYM { Lex->length=(char*) "1"; - $$=MYSQL_TYPE_TINY; } - | BOOLEAN_SYM { Lex->length=(char*) "1"; - $$=MYSQL_TYPE_TINY; } - | char '(' NUM ')' opt_binary { Lex->length=$3.str; - $$=MYSQL_TYPE_STRING; } - | char opt_binary { Lex->length=(char*) "1"; - $$=MYSQL_TYPE_STRING; } - | nchar '(' NUM ')' opt_bin_mod { Lex->length=$3.str; - $$=MYSQL_TYPE_STRING; - Lex->charset=national_charset_info; } - | nchar opt_bin_mod { Lex->length=(char*) "1"; - $$=MYSQL_TYPE_STRING; - Lex->charset=national_charset_info; } - | BINARY '(' NUM ')' { Lex->length=$3.str; - Lex->charset=&my_charset_bin; - $$=MYSQL_TYPE_STRING; } - | BINARY { Lex->length= (char*) "1"; - Lex->charset=&my_charset_bin; - $$=MYSQL_TYPE_STRING; } - | varchar '(' NUM ')' opt_binary { Lex->length=$3.str; - $$= MYSQL_TYPE_VARCHAR; } - | nvarchar '(' NUM ')' opt_bin_mod { Lex->length=$3.str; - $$= MYSQL_TYPE_VARCHAR; - Lex->charset=national_charset_info; } - | VARBINARY '(' NUM ')' { Lex->length=$3.str; - Lex->charset=&my_charset_bin; - $$= MYSQL_TYPE_VARCHAR; } - | YEAR_SYM opt_len field_options { $$=MYSQL_TYPE_YEAR; } - | DATE_SYM { $$=MYSQL_TYPE_DATE; } - | TIME_SYM { $$=MYSQL_TYPE_TIME; } - | TIMESTAMP opt_len - { - if (YYTHD->variables.sql_mode & MODE_MAXDB) - $$=MYSQL_TYPE_DATETIME; - else + int_type opt_len field_options { $$=$1; } + | real_type opt_precision field_options { $$=$1; } + | FLOAT_SYM float_options field_options { $$=MYSQL_TYPE_FLOAT; } + | BIT_SYM + { + Lex->length= (char*) "1"; + $$=MYSQL_TYPE_BIT; + } + | BIT_SYM '(' NUM ')' + { + Lex->length= $3.str; + $$=MYSQL_TYPE_BIT; + } + | BOOL_SYM + { + Lex->length=(char*) "1"; + $$=MYSQL_TYPE_TINY; + } + | BOOLEAN_SYM + { + Lex->length=(char*) "1"; + $$=MYSQL_TYPE_TINY; + } + | char '(' NUM ')' opt_binary + { + Lex->length=$3.str; + $$=MYSQL_TYPE_STRING; + } + | char opt_binary + { + Lex->length=(char*) "1"; + $$=MYSQL_TYPE_STRING; + } + | nchar '(' NUM ')' opt_bin_mod + { + Lex->length=$3.str; + $$=MYSQL_TYPE_STRING; + Lex->charset=national_charset_info; + } + | nchar opt_bin_mod + { + Lex->length=(char*) "1"; + $$=MYSQL_TYPE_STRING; + Lex->charset=national_charset_info; + } + | BINARY '(' NUM ')' + { + Lex->length=$3.str; + Lex->charset=&my_charset_bin; + $$=MYSQL_TYPE_STRING; + } + | BINARY + { + Lex->length= (char*) "1"; + Lex->charset=&my_charset_bin; + $$=MYSQL_TYPE_STRING; + } + | varchar '(' NUM ')' opt_binary + { + Lex->length=$3.str; + $$= MYSQL_TYPE_VARCHAR; + } + | nvarchar '(' NUM ')' opt_bin_mod + { + Lex->length=$3.str; + $$= MYSQL_TYPE_VARCHAR; + Lex->charset=national_charset_info; + } + | VARBINARY '(' NUM ')' + { + Lex->length=$3.str; + Lex->charset=&my_charset_bin; + $$= MYSQL_TYPE_VARCHAR; + } + | YEAR_SYM opt_len field_options + { $$=MYSQL_TYPE_YEAR; } + | DATE_SYM + { $$=MYSQL_TYPE_DATE; } + | TIME_SYM + { $$=MYSQL_TYPE_TIME; } + | TIMESTAMP opt_len + { + if (YYTHD->variables.sql_mode & MODE_MAXDB) + $$=MYSQL_TYPE_DATETIME; + else { /* Unlike other types TIMESTAMP fields are NOT NULL by default. */ Lex->type|= NOT_NULL_FLAG; - $$=MYSQL_TYPE_TIMESTAMP; + $$=MYSQL_TYPE_TIMESTAMP; } - } - | DATETIME { $$=MYSQL_TYPE_DATETIME; } - | TINYBLOB { Lex->charset=&my_charset_bin; - $$=MYSQL_TYPE_TINY_BLOB; } - | BLOB_SYM opt_len { Lex->charset=&my_charset_bin; - $$=MYSQL_TYPE_BLOB; } - | spatial_type + } + | DATETIME + { $$=MYSQL_TYPE_DATETIME; } + | TINYBLOB + { + Lex->charset=&my_charset_bin; + $$=MYSQL_TYPE_TINY_BLOB; + } + | BLOB_SYM opt_len + { + Lex->charset=&my_charset_bin; + $$=MYSQL_TYPE_BLOB; + } + | spatial_type { #ifdef HAVE_SPATIAL Lex->charset=&my_charset_bin; @@ -4642,379 +4823,439 @@ type: MYSQL_YYABORT; #endif } - | MEDIUMBLOB { Lex->charset=&my_charset_bin; - $$=MYSQL_TYPE_MEDIUM_BLOB; } - | LONGBLOB { Lex->charset=&my_charset_bin; - $$=MYSQL_TYPE_LONG_BLOB; } - | LONG_SYM VARBINARY { Lex->charset=&my_charset_bin; - $$=MYSQL_TYPE_MEDIUM_BLOB; } - | LONG_SYM varchar opt_binary { $$=MYSQL_TYPE_MEDIUM_BLOB; } - | TINYTEXT opt_binary { $$=MYSQL_TYPE_TINY_BLOB; } - | TEXT_SYM opt_len opt_binary { $$=MYSQL_TYPE_BLOB; } - | MEDIUMTEXT opt_binary { $$=MYSQL_TYPE_MEDIUM_BLOB; } - | LONGTEXT opt_binary { $$=MYSQL_TYPE_LONG_BLOB; } - | DECIMAL_SYM float_options field_options - { $$=MYSQL_TYPE_NEWDECIMAL;} - | NUMERIC_SYM float_options field_options - { $$=MYSQL_TYPE_NEWDECIMAL;} - | FIXED_SYM float_options field_options - { $$=MYSQL_TYPE_NEWDECIMAL;} - | ENUM {Lex->interval_list.empty();} '(' string_list ')' opt_binary - { $$=MYSQL_TYPE_ENUM; } - | SET { Lex->interval_list.empty();} '(' string_list ')' opt_binary - { $$=MYSQL_TYPE_SET; } - | LONG_SYM opt_binary { $$=MYSQL_TYPE_MEDIUM_BLOB; } - | SERIAL_SYM - { - $$=MYSQL_TYPE_LONGLONG; - Lex->type|= (AUTO_INCREMENT_FLAG | NOT_NULL_FLAG | UNSIGNED_FLAG | - UNIQUE_FLAG); - } - ; + | MEDIUMBLOB + { + Lex->charset=&my_charset_bin; + $$=MYSQL_TYPE_MEDIUM_BLOB; + } + | LONGBLOB + { + Lex->charset=&my_charset_bin; + $$=MYSQL_TYPE_LONG_BLOB; + } + | LONG_SYM VARBINARY + { + Lex->charset=&my_charset_bin; + $$=MYSQL_TYPE_MEDIUM_BLOB; + } + | LONG_SYM varchar opt_binary + { $$=MYSQL_TYPE_MEDIUM_BLOB; } + | TINYTEXT opt_binary + { $$=MYSQL_TYPE_TINY_BLOB; } + | TEXT_SYM opt_len opt_binary + { $$=MYSQL_TYPE_BLOB; } + | MEDIUMTEXT opt_binary + { $$=MYSQL_TYPE_MEDIUM_BLOB; } + | LONGTEXT opt_binary + { $$=MYSQL_TYPE_LONG_BLOB; } + | DECIMAL_SYM float_options field_options + { $$=MYSQL_TYPE_NEWDECIMAL;} + | NUMERIC_SYM float_options field_options + { $$=MYSQL_TYPE_NEWDECIMAL;} + | FIXED_SYM float_options field_options + { $$=MYSQL_TYPE_NEWDECIMAL;} + | ENUM + {Lex->interval_list.empty();} + '(' string_list ')' opt_binary + { $$=MYSQL_TYPE_ENUM; } + | SET + { Lex->interval_list.empty();} + '(' string_list ')' opt_binary + { $$=MYSQL_TYPE_SET; } + | LONG_SYM opt_binary + { $$=MYSQL_TYPE_MEDIUM_BLOB; } + | SERIAL_SYM + { + $$=MYSQL_TYPE_LONGLONG; + Lex->type|= (AUTO_INCREMENT_FLAG | NOT_NULL_FLAG | UNSIGNED_FLAG | + UNIQUE_FLAG); + } + ; spatial_type: - GEOMETRY_SYM { $$= Field::GEOM_GEOMETRY; } - | GEOMETRYCOLLECTION { $$= Field::GEOM_GEOMETRYCOLLECTION; } - | POINT_SYM { Lex->length= (char*)"21"; - $$= Field::GEOM_POINT; - } - | MULTIPOINT { $$= Field::GEOM_MULTIPOINT; } - | LINESTRING { $$= Field::GEOM_LINESTRING; } - | MULTILINESTRING { $$= Field::GEOM_MULTILINESTRING; } - | POLYGON { $$= Field::GEOM_POLYGON; } - | MULTIPOLYGON { $$= Field::GEOM_MULTIPOLYGON; } - ; + GEOMETRY_SYM { $$= Field::GEOM_GEOMETRY; } + | GEOMETRYCOLLECTION { $$= Field::GEOM_GEOMETRYCOLLECTION; } + | POINT_SYM + { + Lex->length= (char*)"21"; + $$= Field::GEOM_POINT; + } + | MULTIPOINT { $$= Field::GEOM_MULTIPOINT; } + | LINESTRING { $$= Field::GEOM_LINESTRING; } + | MULTILINESTRING { $$= Field::GEOM_MULTILINESTRING; } + | POLYGON { $$= Field::GEOM_POLYGON; } + | MULTIPOLYGON { $$= Field::GEOM_MULTIPOLYGON; } + ; char: - CHAR_SYM {} - ; + CHAR_SYM {} + ; nchar: - NCHAR_SYM {} - | NATIONAL_SYM CHAR_SYM {} - ; + NCHAR_SYM {} + | NATIONAL_SYM CHAR_SYM {} + ; varchar: - char VARYING {} - | VARCHAR {} - ; + char VARYING {} + | VARCHAR {} + ; nvarchar: - NATIONAL_SYM VARCHAR {} - | NVARCHAR_SYM {} - | NCHAR_SYM VARCHAR {} - | NATIONAL_SYM CHAR_SYM VARYING {} - | NCHAR_SYM VARYING {} - ; + NATIONAL_SYM VARCHAR {} + | NVARCHAR_SYM {} + | NCHAR_SYM VARCHAR {} + | NATIONAL_SYM CHAR_SYM VARYING {} + | NCHAR_SYM VARYING {} + ; int_type: - INT_SYM { $$=MYSQL_TYPE_LONG; } - | TINYINT { $$=MYSQL_TYPE_TINY; } - | SMALLINT { $$=MYSQL_TYPE_SHORT; } - | MEDIUMINT { $$=MYSQL_TYPE_INT24; } - | BIGINT { $$=MYSQL_TYPE_LONGLONG; }; + INT_SYM { $$=MYSQL_TYPE_LONG; } + | TINYINT { $$=MYSQL_TYPE_TINY; } + | SMALLINT { $$=MYSQL_TYPE_SHORT; } + | MEDIUMINT { $$=MYSQL_TYPE_INT24; } + | BIGINT { $$=MYSQL_TYPE_LONGLONG; } + ; real_type: - REAL { $$= YYTHD->variables.sql_mode & MODE_REAL_AS_FLOAT ? - MYSQL_TYPE_FLOAT : MYSQL_TYPE_DOUBLE; } - | DOUBLE_SYM { $$=MYSQL_TYPE_DOUBLE; } - | DOUBLE_SYM PRECISION { $$=MYSQL_TYPE_DOUBLE; }; - + REAL + { + $$= YYTHD->variables.sql_mode & MODE_REAL_AS_FLOAT ? + MYSQL_TYPE_FLOAT : MYSQL_TYPE_DOUBLE; + } + | DOUBLE_SYM + { $$=MYSQL_TYPE_DOUBLE; } + | DOUBLE_SYM PRECISION + { $$=MYSQL_TYPE_DOUBLE; } + ; float_options: - /* empty */ { Lex->dec=Lex->length= (char*)0; } - | '(' NUM ')' { Lex->length=$2.str; Lex->dec= (char*)0; } - | precision {}; + /* empty */ + { Lex->dec=Lex->length= (char*)0; } + | '(' NUM ')' + { Lex->length=$2.str; Lex->dec= (char*)0; } + | precision + {} + ; precision: - '(' NUM ',' NUM ')' - { - LEX *lex=Lex; - lex->length=$2.str; lex->dec=$4.str; - }; + '(' NUM ',' NUM ')' + { + LEX *lex=Lex; + lex->length=$2.str; + lex->dec=$4.str; + } + ; field_options: - /* empty */ {} - | field_opt_list {}; + /* empty */ {} + | field_opt_list {} + ; field_opt_list: - field_opt_list field_option {} - | field_option {}; + field_opt_list field_option {} + | field_option {} + ; field_option: - SIGNED_SYM {} - | UNSIGNED { Lex->type|= UNSIGNED_FLAG;} - | ZEROFILL { Lex->type|= UNSIGNED_FLAG | ZEROFILL_FLAG; }; + SIGNED_SYM {} + | UNSIGNED { Lex->type|= UNSIGNED_FLAG;} + | ZEROFILL { Lex->type|= UNSIGNED_FLAG | ZEROFILL_FLAG; } + ; opt_len: - /* empty */ { Lex->length=(char*) 0; } /* use default length */ - | '(' NUM ')' { Lex->length= $2.str; }; + /* empty */ { Lex->length=(char*) 0; /* use default length */ } + | '(' NUM ')' { Lex->length= $2.str; } + ; opt_precision: - /* empty */ {} - | precision {}; + /* empty */ {} + | precision {} + ; opt_attribute: - /* empty */ {} - | opt_attribute_list {}; + /* empty */ {} + | opt_attribute_list {} + ; opt_attribute_list: - opt_attribute_list attribute {} - | attribute; + opt_attribute_list attribute {} + | attribute + ; attribute: - NULL_SYM { Lex->type&= ~ NOT_NULL_FLAG; } - | not NULL_SYM { Lex->type|= NOT_NULL_FLAG; } - | DEFAULT now_or_signed_literal { Lex->default_value=$2; } - | ON UPDATE_SYM NOW_SYM optional_braces + NULL_SYM { Lex->type&= ~ NOT_NULL_FLAG; } + | not NULL_SYM { Lex->type|= NOT_NULL_FLAG; } + | DEFAULT now_or_signed_literal { Lex->default_value=$2; } + | ON UPDATE_SYM NOW_SYM optional_braces { Lex->on_update_value= new Item_func_now_local(); } - | AUTO_INC { Lex->type|= AUTO_INCREMENT_FLAG | NOT_NULL_FLAG; } - | SERIAL_SYM DEFAULT VALUE_SYM - { - LEX *lex=Lex; - lex->type|= AUTO_INCREMENT_FLAG | NOT_NULL_FLAG | UNIQUE_FLAG; - lex->alter_info.flags|= ALTER_ADD_INDEX; - } - | opt_primary KEY_SYM - { - LEX *lex=Lex; - lex->type|= PRI_KEY_FLAG | NOT_NULL_FLAG; - lex->alter_info.flags|= ALTER_ADD_INDEX; - } - | UNIQUE_SYM - { - LEX *lex=Lex; - lex->type|= UNIQUE_FLAG; - lex->alter_info.flags|= ALTER_ADD_INDEX; - } - | UNIQUE_SYM KEY_SYM - { - LEX *lex=Lex; - lex->type|= UNIQUE_KEY_FLAG; - lex->alter_info.flags|= ALTER_ADD_INDEX; - } - | COMMENT_SYM TEXT_STRING_sys { Lex->comment= $2; } - | COLLATE_SYM collation_name - { - if (Lex->charset && !my_charset_same(Lex->charset,$2)) - { - my_error(ER_COLLATION_CHARSET_MISMATCH, MYF(0), + | AUTO_INC { Lex->type|= AUTO_INCREMENT_FLAG | NOT_NULL_FLAG; } + | SERIAL_SYM DEFAULT VALUE_SYM + { + LEX *lex=Lex; + lex->type|= AUTO_INCREMENT_FLAG | NOT_NULL_FLAG | UNIQUE_FLAG; + lex->alter_info.flags|= ALTER_ADD_INDEX; + } + | opt_primary KEY_SYM + { + LEX *lex=Lex; + lex->type|= PRI_KEY_FLAG | NOT_NULL_FLAG; + lex->alter_info.flags|= ALTER_ADD_INDEX; + } + | UNIQUE_SYM + { + LEX *lex=Lex; + lex->type|= UNIQUE_FLAG; + lex->alter_info.flags|= ALTER_ADD_INDEX; + } + | UNIQUE_SYM KEY_SYM + { + LEX *lex=Lex; + lex->type|= UNIQUE_KEY_FLAG; + lex->alter_info.flags|= ALTER_ADD_INDEX; + } + | COMMENT_SYM TEXT_STRING_sys { Lex->comment= $2; } + | COLLATE_SYM collation_name + { + if (Lex->charset && !my_charset_same(Lex->charset,$2)) + { + my_error(ER_COLLATION_CHARSET_MISMATCH, MYF(0), $2->name,Lex->charset->csname); - MYSQL_YYABORT; - } - else - { - Lex->charset=$2; - } - } - ; + MYSQL_YYABORT; + } + else + { + Lex->charset=$2; + } + } + ; now_or_signed_literal: - NOW_SYM optional_braces { $$= new Item_func_now_local(); } - | signed_literal { $$=$1; } + NOW_SYM optional_braces + { $$= new Item_func_now_local(); } + | signed_literal + { $$=$1; } ; charset: - CHAR_SYM SET {} - | CHARSET {} - ; + CHAR_SYM SET {} + | CHARSET {} + ; charset_name: - ident_or_text - { - if (!($$=get_charset_by_csname($1.str,MY_CS_PRIMARY,MYF(0)))) - { - my_error(ER_UNKNOWN_CHARACTER_SET, MYF(0), $1.str); - MYSQL_YYABORT; - } - } - | BINARY { $$= &my_charset_bin; } - ; + ident_or_text + { + if (!($$=get_charset_by_csname($1.str,MY_CS_PRIMARY,MYF(0)))) + { + my_error(ER_UNKNOWN_CHARACTER_SET, MYF(0), $1.str); + MYSQL_YYABORT; + } + } + | BINARY { $$= &my_charset_bin; } + ; charset_name_or_default: - charset_name { $$=$1; } - | DEFAULT { $$=NULL; } ; + charset_name { $$=$1; } + | DEFAULT { $$=NULL; } + ; opt_load_data_charset: - /* Empty */ { $$= NULL; } - | charset charset_name_or_default { $$= $2; } - ; + /* Empty */ { $$= NULL; } + | charset charset_name_or_default { $$= $2; } + ; old_or_new_charset_name: - ident_or_text - { - if (!($$=get_charset_by_csname($1.str,MY_CS_PRIMARY,MYF(0))) && - !($$=get_old_charset_by_name($1.str))) - { - my_error(ER_UNKNOWN_CHARACTER_SET, MYF(0), $1.str); - MYSQL_YYABORT; - } - } - | BINARY { $$= &my_charset_bin; } - ; + ident_or_text + { + if (!($$=get_charset_by_csname($1.str,MY_CS_PRIMARY,MYF(0))) && + !($$=get_old_charset_by_name($1.str))) + { + my_error(ER_UNKNOWN_CHARACTER_SET, MYF(0), $1.str); + MYSQL_YYABORT; + } + } + | BINARY { $$= &my_charset_bin; } + ; old_or_new_charset_name_or_default: - old_or_new_charset_name { $$=$1; } - | DEFAULT { $$=NULL; } ; + old_or_new_charset_name { $$=$1; } + | DEFAULT { $$=NULL; } + ; collation_name: - ident_or_text - { - if (!($$=get_charset_by_name($1.str,MYF(0)))) - { - my_error(ER_UNKNOWN_COLLATION, MYF(0), $1.str); - MYSQL_YYABORT; - } - }; + ident_or_text + { + if (!($$=get_charset_by_name($1.str,MYF(0)))) + { + my_error(ER_UNKNOWN_COLLATION, MYF(0), $1.str); + MYSQL_YYABORT; + } + } + ; opt_collate: - /* empty */ { $$=NULL; } - | COLLATE_SYM collation_name_or_default { $$=$2; } - ; + /* empty */ { $$=NULL; } + | COLLATE_SYM collation_name_or_default { $$=$2; } + ; collation_name_or_default: - collation_name { $$=$1; } - | DEFAULT { $$=NULL; } ; + collation_name { $$=$1; } + | DEFAULT { $$=NULL; } + ; opt_default: - /* empty */ {} - | DEFAULT {}; + /* empty */ {} + | DEFAULT {} + ; opt_binary: - /* empty */ { Lex->charset=NULL; } - | ASCII_SYM opt_bin_mod { Lex->charset=&my_charset_latin1; } - | BYTE_SYM { Lex->charset=&my_charset_bin; } - | UNICODE_SYM opt_bin_mod - { - if (!(Lex->charset=get_charset_by_csname("ucs2", - MY_CS_PRIMARY,MYF(0)))) - { - my_error(ER_UNKNOWN_CHARACTER_SET, MYF(0), "ucs2"); - MYSQL_YYABORT; - } - } - | charset charset_name opt_bin_mod { Lex->charset=$2; } - | BINARY opt_bin_charset { Lex->type|= BINCMP_FLAG; }; + /* empty */ { Lex->charset=NULL; } + | ASCII_SYM opt_bin_mod { Lex->charset=&my_charset_latin1; } + | BYTE_SYM { Lex->charset=&my_charset_bin; } + | UNICODE_SYM opt_bin_mod + { + if (!(Lex->charset=get_charset_by_csname("ucs2", + MY_CS_PRIMARY,MYF(0)))) + { + my_error(ER_UNKNOWN_CHARACTER_SET, MYF(0), "ucs2"); + MYSQL_YYABORT; + } + } + | charset charset_name opt_bin_mod { Lex->charset=$2; } + | BINARY opt_bin_charset { Lex->type|= BINCMP_FLAG; } + ; opt_bin_mod: - /* empty */ { } - | BINARY { Lex->type|= BINCMP_FLAG; }; + /* empty */ { } + | BINARY { Lex->type|= BINCMP_FLAG; } + ; opt_bin_charset: - /* empty */ { Lex->charset= NULL; } - | ASCII_SYM { Lex->charset=&my_charset_latin1; } - | UNICODE_SYM - { - if (!(Lex->charset=get_charset_by_csname("ucs2", - MY_CS_PRIMARY,MYF(0)))) - { - my_error(ER_UNKNOWN_CHARACTER_SET, MYF(0), "ucs2"); - MYSQL_YYABORT; - } - } - | charset charset_name { Lex->charset=$2; } ; + /* empty */ { Lex->charset= NULL; } + | ASCII_SYM { Lex->charset=&my_charset_latin1; } + | UNICODE_SYM + { + if (!(Lex->charset=get_charset_by_csname("ucs2", + MY_CS_PRIMARY,MYF(0)))) + { + my_error(ER_UNKNOWN_CHARACTER_SET, MYF(0), "ucs2"); + MYSQL_YYABORT; + } + } + | charset charset_name { Lex->charset=$2; } + ; opt_primary: - /* empty */ - | PRIMARY_SYM - ; + /* empty */ + | PRIMARY_SYM + ; references: - REFERENCES table_ident - { - LEX *lex=Lex; - lex->fk_delete_opt= lex->fk_update_opt= lex->fk_match_option= 0; - lex->ref_list.empty(); - } - opt_ref_list - { - $$=$2; - }; + REFERENCES table_ident + { + LEX *lex=Lex; + lex->fk_delete_opt= lex->fk_update_opt= lex->fk_match_option= 0; + lex->ref_list.empty(); + } + opt_ref_list + { + $$=$2; + } + ; opt_ref_list: - /* empty */ opt_on_delete {} - | '(' ref_list ')' opt_on_delete {}; + /* empty */ opt_on_delete {} + | '(' ref_list ')' opt_on_delete {} + ; ref_list: - ref_list ',' ident { Lex->ref_list.push_back(new Key_part_spec($3.str)); } - | ident { Lex->ref_list.push_back(new Key_part_spec($1.str)); }; - + ref_list ',' ident { Lex->ref_list.push_back(new Key_part_spec($3.str)); } + | ident { Lex->ref_list.push_back(new Key_part_spec($1.str)); } + ; opt_on_delete: - /* empty */ {} - | opt_on_delete_list {}; + /* empty */ {} + | opt_on_delete_list {} + ; opt_on_delete_list: - opt_on_delete_list opt_on_delete_item {} - | opt_on_delete_item {}; + opt_on_delete_list opt_on_delete_item {} + | opt_on_delete_item {} + ; opt_on_delete_item: - ON DELETE_SYM delete_option { Lex->fk_delete_opt= $3; } - | ON UPDATE_SYM delete_option { Lex->fk_update_opt= $3; } - | MATCH FULL { Lex->fk_match_option= Foreign_key::FK_MATCH_FULL; } - | MATCH PARTIAL { Lex->fk_match_option= Foreign_key::FK_MATCH_PARTIAL; } - | MATCH SIMPLE_SYM { Lex->fk_match_option= Foreign_key::FK_MATCH_SIMPLE; }; + ON DELETE_SYM delete_option { Lex->fk_delete_opt= $3; } + | ON UPDATE_SYM delete_option { Lex->fk_update_opt= $3; } + | MATCH FULL { Lex->fk_match_option= Foreign_key::FK_MATCH_FULL; } + | MATCH PARTIAL { Lex->fk_match_option= Foreign_key::FK_MATCH_PARTIAL; } + | MATCH SIMPLE_SYM { Lex->fk_match_option= Foreign_key::FK_MATCH_SIMPLE; } + ; delete_option: - RESTRICT { $$= (int) Foreign_key::FK_OPTION_RESTRICT; } - | CASCADE { $$= (int) Foreign_key::FK_OPTION_CASCADE; } - | SET NULL_SYM { $$= (int) Foreign_key::FK_OPTION_SET_NULL; } - | NO_SYM ACTION { $$= (int) Foreign_key::FK_OPTION_NO_ACTION; } - | SET DEFAULT { $$= (int) Foreign_key::FK_OPTION_DEFAULT; }; + RESTRICT { $$= (int) Foreign_key::FK_OPTION_RESTRICT; } + | CASCADE { $$= (int) Foreign_key::FK_OPTION_CASCADE; } + | SET NULL_SYM { $$= (int) Foreign_key::FK_OPTION_SET_NULL; } + | NO_SYM ACTION { $$= (int) Foreign_key::FK_OPTION_NO_ACTION; } + | SET DEFAULT { $$= (int) Foreign_key::FK_OPTION_DEFAULT; } + ; key_type: - key_or_index { $$= Key::MULTIPLE; } - | FULLTEXT_SYM opt_key_or_index { $$= Key::FULLTEXT; } - | SPATIAL_SYM opt_key_or_index - { + key_or_index { $$= Key::MULTIPLE; } + | FULLTEXT_SYM opt_key_or_index { $$= Key::FULLTEXT; } + | SPATIAL_SYM opt_key_or_index + { #ifdef HAVE_SPATIAL - $$= Key::SPATIAL; -#else - my_error(ER_FEATURE_DISABLED, MYF(0), - sym_group_geom.name, sym_group_geom.needed_define); - MYSQL_YYABORT; -#endif - }; - -constraint_key_type: - PRIMARY_SYM KEY_SYM { $$= Key::PRIMARY; } - | UNIQUE_SYM opt_key_or_index { $$= Key::UNIQUE; }; - -key_or_index: - KEY_SYM {} - | INDEX_SYM {}; - -opt_key_or_index: - /* empty */ {} - | key_or_index - ; - -keys_or_index: - KEYS {} - | INDEX_SYM {} - | INDEXES {}; - -opt_unique_or_fulltext: - /* empty */ { $$= Key::MULTIPLE; } - | UNIQUE_SYM { $$= Key::UNIQUE; } - | FULLTEXT_SYM { $$= Key::FULLTEXT;} - | SPATIAL_SYM - { -#ifdef HAVE_SPATIAL - $$= Key::SPATIAL; + $$= Key::SPATIAL; #else my_error(ER_FEATURE_DISABLED, MYF(0), sym_group_geom.name, sym_group_geom.needed_define); - MYSQL_YYABORT; + MYSQL_YYABORT; #endif - } + } + ; + +constraint_key_type: + PRIMARY_SYM KEY_SYM { $$= Key::PRIMARY; } + | UNIQUE_SYM opt_key_or_index { $$= Key::UNIQUE; } + ; + +key_or_index: + KEY_SYM {} + | INDEX_SYM {} + ; + +opt_key_or_index: + /* empty */ {} + | key_or_index + ; + +keys_or_index: + KEYS {} + | INDEX_SYM {} + | INDEXES {} + ; + +opt_unique_or_fulltext: + /* empty */ { $$= Key::MULTIPLE; } + | UNIQUE_SYM { $$= Key::UNIQUE; } + | FULLTEXT_SYM { $$= Key::FULLTEXT;} + | SPATIAL_SYM + { +#ifdef HAVE_SPATIAL + $$= Key::SPATIAL; +#else + my_error(ER_FEATURE_DISABLED, MYF(0), + sym_group_geom.name, sym_group_geom.needed_define); + MYSQL_YYABORT; +#endif + } ; init_key_options: - { - Lex->key_create_info= default_key_create_info; - } - ; + { + Lex->key_create_info= default_key_create_info; + } + ; /* For now, key_alg initializies lex->key_create_info. @@ -5023,30 +5264,30 @@ init_key_options: */ key_alg: - /* empty */ init_key_options - | init_key_options key_using_alg - ; + init_key_options + | init_key_options key_using_alg + ; key_options: - /* empty */ {} - | key_opts - ; + /* empty */ {} + | key_opts + ; key_opts: - key_opt - | key_opts key_opt - ; + key_opt + | key_opts key_opt + ; key_using_alg: - USING btree_or_rtree { Lex->key_create_info.algorithm= $2; } - | TYPE_SYM btree_or_rtree { Lex->key_create_info.algorithm= $2; } + USING btree_or_rtree { Lex->key_create_info.algorithm= $2; } + | TYPE_SYM btree_or_rtree { Lex->key_create_info.algorithm= $2; } ; key_opt: - key_using_alg - | KEY_BLOCK_SIZE opt_equal ulong_num - { Lex->key_create_info.block_size= $3; } - | WITH PARSER_SYM IDENT_sys + key_using_alg + | KEY_BLOCK_SIZE opt_equal ulong_num + { Lex->key_create_info.block_size= $3; } + | WITH PARSER_SYM IDENT_sys { if (plugin_is_ready(&$3, MYSQL_FTPARSER_PLUGIN)) Lex->key_create_info.parser_name= $3; @@ -5058,126 +5299,127 @@ key_opt: } ; - btree_or_rtree: - BTREE_SYM { $$= HA_KEY_ALG_BTREE; } - | RTREE_SYM - { - $$= HA_KEY_ALG_RTREE; - } - | HASH_SYM { $$= HA_KEY_ALG_HASH; }; + BTREE_SYM { $$= HA_KEY_ALG_BTREE; } + | RTREE_SYM { $$= HA_KEY_ALG_RTREE; } + | HASH_SYM { $$= HA_KEY_ALG_HASH; } + ; key_list: - key_list ',' key_part order_dir { Lex->col_list.push_back($3); } - | key_part order_dir { Lex->col_list.push_back($1); }; + key_list ',' key_part order_dir { Lex->col_list.push_back($3); } + | key_part order_dir { Lex->col_list.push_back($1); } + ; key_part: - ident { $$=new Key_part_spec($1.str); } - | ident '(' NUM ')' - { - int key_part_len= atoi($3.str); - if (!key_part_len) + ident { $$=new Key_part_spec($1.str); } + | ident '(' NUM ')' { - my_error(ER_KEY_PART_0, MYF(0), $1.str); + int key_part_len= atoi($3.str); + if (!key_part_len) + { + my_error(ER_KEY_PART_0, MYF(0), $1.str); + } + $$=new Key_part_spec($1.str,(uint) key_part_len); } - $$=new Key_part_spec($1.str,(uint) key_part_len); - }; + ; opt_ident: - /* empty */ { $$=(char*) 0; } /* Defaultlength */ - | field_ident { $$=$1.str; }; + /* empty */ { $$=(char*) 0; /* Default length */ } + | field_ident { $$=$1.str; } + ; opt_component: - /* empty */ { $$= null_lex_str; } - | '.' ident { $$= $2; }; + /* empty */ { $$= null_lex_str; } + | '.' ident { $$= $2; } + ; string_list: - text_string { Lex->interval_list.push_back($1); } - | string_list ',' text_string { Lex->interval_list.push_back($3); }; + text_string { Lex->interval_list.push_back($1); } + | string_list ',' text_string { Lex->interval_list.push_back($3); }; /* ** Alter table */ alter: - ALTER opt_ignore TABLE_SYM table_ident - { - THD *thd= YYTHD; - LEX *lex= thd->lex; - lex->name.str= 0; - lex->name.length= 0; - lex->sql_command= SQLCOM_ALTER_TABLE; - lex->duplicates= DUP_ERROR; - if (!lex->select_lex.add_table_to_list(thd, $4, NULL, - TL_OPTION_UPDATING)) - MYSQL_YYABORT; - lex->alter_info.reset(); - lex->col_list.empty(); - lex->select_lex.init_order(); - lex->select_lex.db= - ((TABLE_LIST*) lex->select_lex.table_list.first)->db; - bzero((char*) &lex->create_info,sizeof(lex->create_info)); - lex->create_info.db_type= 0; - lex->create_info.default_table_charset= NULL; - lex->create_info.row_type= ROW_TYPE_NOT_USED; - lex->alter_info.reset(); - lex->no_write_to_binlog= 0; - lex->create_info.storage_media= HA_SM_DEFAULT; - } - alter_commands - {} - | ALTER DATABASE ident_or_empty + ALTER opt_ignore TABLE_SYM table_ident + { + THD *thd= YYTHD; + LEX *lex= thd->lex; + lex->name.str= 0; + lex->name.length= 0; + lex->sql_command= SQLCOM_ALTER_TABLE; + lex->duplicates= DUP_ERROR; + if (!lex->select_lex.add_table_to_list(thd, $4, NULL, + TL_OPTION_UPDATING)) + MYSQL_YYABORT; + lex->alter_info.reset(); + lex->col_list.empty(); + lex->select_lex.init_order(); + lex->select_lex.db= + ((TABLE_LIST*) lex->select_lex.table_list.first)->db; + bzero((char*) &lex->create_info,sizeof(lex->create_info)); + lex->create_info.db_type= 0; + lex->create_info.default_table_charset= NULL; + lex->create_info.row_type= ROW_TYPE_NOT_USED; + lex->alter_info.reset(); + lex->no_write_to_binlog= 0; + lex->create_info.storage_media= HA_SM_DEFAULT; + } + alter_commands + {} + | ALTER DATABASE ident_or_empty { Lex->create_info.default_table_charset= NULL; Lex->create_info.used_fields= 0; } create_database_options - { - LEX *lex=Lex; - lex->sql_command=SQLCOM_ALTER_DB; - lex->name= $3; + { + LEX *lex=Lex; + lex->sql_command=SQLCOM_ALTER_DB; + lex->name= $3; if (lex->name.str == NULL && lex->copy_db_to(&lex->name.str, &lex->name.length)) MYSQL_YYABORT; - } - | ALTER PROCEDURE sp_name - { - LEX *lex= Lex; - - if (lex->sphead) - { - my_error(ER_SP_NO_DROP_SP, MYF(0), "PROCEDURE"); - MYSQL_YYABORT; - } - bzero((char *)&lex->sp_chistics, sizeof(st_sp_chistics)); } - sp_a_chistics - { - LEX *lex=Lex; + | ALTER PROCEDURE sp_name + { + LEX *lex= Lex; - lex->sql_command= SQLCOM_ALTER_PROCEDURE; - lex->spname= $3; - } - | ALTER FUNCTION_SYM sp_name - { - LEX *lex= Lex; - - if (lex->sphead) - { - my_error(ER_SP_NO_DROP_SP, MYF(0), "FUNCTION"); - MYSQL_YYABORT; - } - bzero((char *)&lex->sp_chistics, sizeof(st_sp_chistics)); + if (lex->sphead) + { + my_error(ER_SP_NO_DROP_SP, MYF(0), "PROCEDURE"); + MYSQL_YYABORT; + } + bzero((char *)&lex->sp_chistics, sizeof(st_sp_chistics)); } - sp_a_chistics - { - LEX *lex=Lex; + sp_a_chistics + { + LEX *lex=Lex; - lex->sql_command= SQLCOM_ALTER_FUNCTION; - lex->spname= $3; - } + lex->sql_command= SQLCOM_ALTER_PROCEDURE; + lex->spname= $3; + } + | ALTER FUNCTION_SYM sp_name + { + LEX *lex= Lex; + + if (lex->sphead) + { + my_error(ER_SP_NO_DROP_SP, MYF(0), "FUNCTION"); + MYSQL_YYABORT; + } + bzero((char *)&lex->sp_chistics, sizeof(st_sp_chistics)); + } + sp_a_chistics + { + LEX *lex=Lex; + + lex->sql_command= SQLCOM_ALTER_FUNCTION; + lex->spname= $3; + } | ALTER view_algorithm definer - { + { LEX *lex= Lex; if (lex->sphead) @@ -5204,11 +5446,11 @@ alter: MYSQL_YYABORT; } lex->create_view_algorithm= VIEW_ALGORITHM_UNDEFINED; - lex->create_view_mode= VIEW_ALTER; - } + lex->create_view_mode= VIEW_ALTER; + } view_tail - {} - | ALTER definer EVENT_SYM sp_name + {} + | ALTER definer EVENT_SYM sp_name /* BE CAREFUL when you add a new rule to update the block where YYTHD->client_capabilities is set back to original value @@ -5253,7 +5495,7 @@ alter: if (!($6 || $7 || $8 || $9 || $10)) { - my_parse_error(ER(ER_SYNTAX_ERROR)); + my_parse_error(ER(ER_SYNTAX_ERROR)); MYSQL_YYABORT; } /* @@ -5289,15 +5531,17 @@ alter: lex->server_options.server_name= $3.str; lex->server_options.server_name_length= $3.length; } - ; + ; -ev_alter_on_schedule_completion: /* empty */ { $$= 0;} +ev_alter_on_schedule_completion: + /* empty */ { $$= 0;} | ON SCHEDULE_SYM ev_schedule_time { $$= 1; } | ev_on_completion { $$= 1; } | ON SCHEDULE_SYM ev_schedule_time ev_on_completion { $$= 1; } - ; + ; -opt_ev_rename_to: /* empty */ { $$= 0;} +opt_ev_rename_to: + /* empty */ { $$= 0;} | RENAME TO_SYM sp_name { /* @@ -5307,19 +5551,22 @@ opt_ev_rename_to: /* empty */ { $$= 0;} Lex->spname= $3; $$= 1; } - ; + ; -opt_ev_sql_stmt: /* empty*/ { $$= 0;} +opt_ev_sql_stmt: + /* empty*/ { $$= 0;} | DO_SYM ev_sql_stmt { $$= 1; } ; ident_or_empty: - /* empty */ { $$.str= 0; $$.length= 0; } - | ident { $$= $1; }; + /* empty */ { $$.str= 0; $$.length= 0; } + | ident { $$= $1; } + ; alter_commands: - | DISCARD TABLESPACE { Lex->alter_info.tablespace_op= DISCARD_TABLESPACE; } - | IMPORT TABLESPACE { Lex->alter_info.tablespace_op= IMPORT_TABLESPACE; } + /* empty */ + | DISCARD TABLESPACE { Lex->alter_info.tablespace_op= DISCARD_TABLESPACE; } + | IMPORT TABLESPACE { Lex->alter_info.tablespace_op= IMPORT_TABLESPACE; } | alter_list opt_partitioning | alter_list @@ -5337,20 +5584,20 @@ alter_commands: | add_partition_rule | DROP PARTITION_SYM alt_part_name_list { - Lex->alter_info.flags|= ALTER_DROP_PARTITION; + Lex->alter_info.flags|= ALTER_DROP_PARTITION; } | REBUILD_SYM PARTITION_SYM opt_no_write_to_binlog all_or_alt_part_name_list { LEX *lex= Lex; - lex->alter_info.flags|= ALTER_REBUILD_PARTITION; + lex->alter_info.flags|= ALTER_REBUILD_PARTITION; lex->no_write_to_binlog= $3; } | OPTIMIZE PARTITION_SYM opt_no_write_to_binlog all_or_alt_part_name_list { LEX *lex= Lex; - lex->alter_info.flags|= ALTER_OPTIMIZE_PARTITION; + lex->alter_info.flags|= ALTER_OPTIMIZE_PARTITION; lex->no_write_to_binlog= $3; lex->check_opt.init(); } @@ -5359,7 +5606,7 @@ alter_commands: all_or_alt_part_name_list { LEX *lex= Lex; - lex->alter_info.flags|= ALTER_ANALYZE_PARTITION; + lex->alter_info.flags|= ALTER_ANALYZE_PARTITION; lex->no_write_to_binlog= $3; lex->check_opt.init(); } @@ -5367,7 +5614,7 @@ alter_commands: | CHECK_SYM PARTITION_SYM all_or_alt_part_name_list { LEX *lex= Lex; - lex->alter_info.flags|= ALTER_CHECK_PARTITION; + lex->alter_info.flags|= ALTER_CHECK_PARTITION; lex->check_opt.init(); } opt_mi_check_type @@ -5375,7 +5622,7 @@ alter_commands: all_or_alt_part_name_list { LEX *lex= Lex; - lex->alter_info.flags|= ALTER_REPAIR_PARTITION; + lex->alter_info.flags|= ALTER_REPAIR_PARTITION; lex->no_write_to_binlog= $3; lex->check_opt.init(); } @@ -5383,104 +5630,104 @@ alter_commands: | COALESCE PARTITION_SYM opt_no_write_to_binlog real_ulong_num { LEX *lex= Lex; - lex->alter_info.flags|= ALTER_COALESCE_PARTITION; + lex->alter_info.flags|= ALTER_COALESCE_PARTITION; lex->no_write_to_binlog= $3; - lex->alter_info.no_parts= $4; + lex->alter_info.no_parts= $4; } | reorg_partition_rule ; remove_partitioning: - REMOVE_SYM PARTITIONING_SYM - { - Lex->alter_info.flags|= ALTER_REMOVE_PARTITIONING; - } + REMOVE_SYM PARTITIONING_SYM + { + Lex->alter_info.flags|= ALTER_REMOVE_PARTITIONING; + } ; all_or_alt_part_name_list: - ALL - { - Lex->alter_info.flags|= ALTER_ALL_PARTITION; - } + ALL + { + Lex->alter_info.flags|= ALTER_ALL_PARTITION; + } | alt_part_name_list ; add_partition_rule: - ADD PARTITION_SYM opt_no_write_to_binlog - { - LEX *lex= Lex; - lex->part_info= new partition_info(); - if (!lex->part_info) + ADD PARTITION_SYM opt_no_write_to_binlog { - mem_alloc_error(sizeof(partition_info)); - MYSQL_YYABORT; + LEX *lex= Lex; + lex->part_info= new partition_info(); + if (!lex->part_info) + { + mem_alloc_error(sizeof(partition_info)); + MYSQL_YYABORT; + } + lex->alter_info.flags|= ALTER_ADD_PARTITION; + lex->no_write_to_binlog= $3; } - lex->alter_info.flags|= ALTER_ADD_PARTITION; - lex->no_write_to_binlog= $3; - } - add_part_extra - {} + add_part_extra + {} ; add_part_extra: + /* empty */ | '(' part_def_list ')' - { - LEX *lex= Lex; - lex->part_info->no_parts= lex->part_info->partitions.elements; - } + { + LEX *lex= Lex; + lex->part_info->no_parts= lex->part_info->partitions.elements; + } | PARTITIONS_SYM real_ulong_num - { - LEX *lex= Lex; - lex->part_info->no_parts= $2; - } + { + LEX *lex= Lex; + lex->part_info->no_parts= $2; + } ; reorg_partition_rule: - REORGANIZE_SYM PARTITION_SYM opt_no_write_to_binlog - { - LEX *lex= Lex; - lex->part_info= new partition_info(); - if (!lex->part_info) + REORGANIZE_SYM PARTITION_SYM opt_no_write_to_binlog { + LEX *lex= Lex; + lex->part_info= new partition_info(); + if (!lex->part_info) + { mem_alloc_error(sizeof(partition_info)); - MYSQL_YYABORT; + MYSQL_YYABORT; + } + lex->no_write_to_binlog= $3; } - lex->no_write_to_binlog= $3; - } - reorg_parts_rule + reorg_parts_rule ; reorg_parts_rule: - /* empty */ - { - Lex->alter_info.flags|= ALTER_TABLE_REORG; - } - | - alt_part_name_list - { - Lex->alter_info.flags|= ALTER_REORGANIZE_PARTITION; - } - INTO '(' part_def_list ')' - { - LEX *lex= Lex; - lex->part_info->no_parts= lex->part_info->partitions.elements; - } + /* empty */ + { + Lex->alter_info.flags|= ALTER_TABLE_REORG; + } + | alt_part_name_list + { + Lex->alter_info.flags|= ALTER_REORGANIZE_PARTITION; + } + INTO '(' part_def_list ')' + { + LEX *lex= Lex; + lex->part_info->no_parts= lex->part_info->partitions.elements; + } ; alt_part_name_list: - alt_part_name_item {} + alt_part_name_item {} | alt_part_name_list ',' alt_part_name_item {} ; alt_part_name_item: - ident - { - if (Lex->alter_info.partition_names.push_back($1.str)) + ident { - mem_alloc_error(1); - MYSQL_YYABORT; + if (Lex->alter_info.partition_names.push_back($1.str)) + { + mem_alloc_error(1); + MYSQL_YYABORT; + } } - } ; /* @@ -5488,34 +5735,35 @@ alt_part_name_item: */ alter_list: - alter_list_item - | alter_list ',' alter_list_item + alter_list_item + | alter_list ',' alter_list_item ; add_column: - ADD opt_column - { - LEX *lex=Lex; - lex->change=0; - lex->alter_info.flags|= ALTER_ADD_COLUMN; - }; + ADD opt_column + { + LEX *lex=Lex; + lex->change=0; + lex->alter_info.flags|= ALTER_ADD_COLUMN; + } + ; alter_list_item: - add_column column_def opt_place { } - | ADD key_def - { - Lex->alter_info.flags|= ALTER_ADD_INDEX; - } - | add_column '(' field_list ')' + add_column column_def opt_place { } + | ADD key_def { - Lex->alter_info.flags|= ALTER_ADD_COLUMN | ALTER_ADD_INDEX; + Lex->alter_info.flags|= ALTER_ADD_INDEX; + } + | add_column '(' field_list ')' + { + Lex->alter_info.flags|= ALTER_ADD_COLUMN | ALTER_ADD_INDEX; + } + | CHANGE opt_column field_ident + { + LEX *lex=Lex; + lex->change= $3.str; + lex->alter_info.flags|= ALTER_CHANGE_COLUMN; } - | CHANGE opt_column field_ident - { - LEX *lex=Lex; - lex->change= $3.str; - lex->alter_info.flags|= ALTER_CHANGE_COLUMN; - } field_spec opt_place | MODIFY_SYM opt_column field_ident { @@ -5523,8 +5771,8 @@ alter_list_item: lex->length=lex->dec=0; lex->type=0; lex->default_value= lex->on_update_value= 0; lex->comment=null_lex_str; - lex->charset= NULL; - lex->alter_info.flags|= ALTER_CHANGE_COLUMN; + lex->charset= NULL; + lex->alter_info.flags|= ALTER_CHANGE_COLUMN; } type opt_attribute { @@ -5534,66 +5782,66 @@ alter_list_item: lex->length,lex->dec,lex->type, lex->default_value, lex->on_update_value, &lex->comment, - $3.str, &lex->interval_list, lex->charset, - lex->uint_geom_type)) - MYSQL_YYABORT; + $3.str, &lex->interval_list, lex->charset, + lex->uint_geom_type)) + MYSQL_YYABORT; } opt_place - | DROP opt_column field_ident opt_restrict - { - LEX *lex=Lex; - lex->alter_info.drop_list.push_back(new Alter_drop(Alter_drop::COLUMN, + | DROP opt_column field_ident opt_restrict + { + LEX *lex=Lex; + lex->alter_info.drop_list.push_back(new Alter_drop(Alter_drop::COLUMN, $3.str)); - lex->alter_info.flags|= ALTER_DROP_COLUMN; - } - | DROP FOREIGN KEY_SYM opt_ident - { - Lex->alter_info.flags|= ALTER_DROP_INDEX | ALTER_FOREIGN_KEY; + lex->alter_info.flags|= ALTER_DROP_COLUMN; } - | DROP PRIMARY_SYM KEY_SYM - { - LEX *lex=Lex; - lex->alter_info.drop_list.push_back(new Alter_drop(Alter_drop::KEY, - primary_key_name)); - lex->alter_info.flags|= ALTER_DROP_INDEX; - } - | DROP key_or_index field_ident - { - LEX *lex=Lex; - lex->alter_info.drop_list.push_back(new Alter_drop(Alter_drop::KEY, - $3.str)); - lex->alter_info.flags|= ALTER_DROP_INDEX; - } - | DISABLE_SYM KEYS + | DROP FOREIGN KEY_SYM opt_ident { - LEX *lex=Lex; + Lex->alter_info.flags|= ALTER_DROP_INDEX | ALTER_FOREIGN_KEY; + } + | DROP PRIMARY_SYM KEY_SYM + { + LEX *lex=Lex; + lex->alter_info.drop_list.push_back(new Alter_drop(Alter_drop::KEY, + primary_key_name)); + lex->alter_info.flags|= ALTER_DROP_INDEX; + } + | DROP key_or_index field_ident + { + LEX *lex=Lex; + lex->alter_info.drop_list.push_back(new Alter_drop(Alter_drop::KEY, + $3.str)); + lex->alter_info.flags|= ALTER_DROP_INDEX; + } + | DISABLE_SYM KEYS + { + LEX *lex=Lex; lex->alter_info.keys_onoff= DISABLE; - lex->alter_info.flags|= ALTER_KEYS_ONOFF; + lex->alter_info.flags|= ALTER_KEYS_ONOFF; } - | ENABLE_SYM KEYS + | ENABLE_SYM KEYS { - LEX *lex=Lex; + LEX *lex=Lex; lex->alter_info.keys_onoff= ENABLE; - lex->alter_info.flags|= ALTER_KEYS_ONOFF; + lex->alter_info.flags|= ALTER_KEYS_ONOFF; } - | ALTER opt_column field_ident SET DEFAULT signed_literal - { - LEX *lex=Lex; - lex->alter_info.alter_list.push_back(new Alter_column($3.str,$6)); - lex->alter_info.flags|= ALTER_CHANGE_COLUMN_DEFAULT; - } - | ALTER opt_column field_ident DROP DEFAULT - { - LEX *lex=Lex; - lex->alter_info.alter_list.push_back(new Alter_column($3.str, + | ALTER opt_column field_ident SET DEFAULT signed_literal + { + LEX *lex=Lex; + lex->alter_info.alter_list.push_back(new Alter_column($3.str,$6)); + lex->alter_info.flags|= ALTER_CHANGE_COLUMN_DEFAULT; + } + | ALTER opt_column field_ident DROP DEFAULT + { + LEX *lex=Lex; + lex->alter_info.alter_list.push_back(new Alter_column($3.str, (Item*) 0)); - lex->alter_info.flags|= ALTER_CHANGE_COLUMN_DEFAULT; - } - | RENAME opt_to table_ident - { - LEX *lex=Lex; - size_t dummy; - lex->select_lex.db=$3->db.str; + lex->alter_info.flags|= ALTER_CHANGE_COLUMN_DEFAULT; + } + | RENAME opt_to table_ident + { + LEX *lex=Lex; + size_t dummy; + lex->select_lex.db=$3->db.str; if (lex->select_lex.db == NULL && lex->copy_db_to(&lex->select_lex.db, &dummy)) { @@ -5605,150 +5853,153 @@ alter_list_item: my_error(ER_WRONG_TABLE_NAME, MYF(0), $3->table.str); MYSQL_YYABORT; } - lex->name= $3->table; - lex->alter_info.flags|= ALTER_RENAME; - } - | CONVERT_SYM TO_SYM charset charset_name_or_default opt_collate - { - if (!$4) - { - THD *thd= YYTHD; - $4= thd->variables.collation_database; - } - $5= $5 ? $5 : $4; - if (!my_charset_same($4,$5)) - { - my_error(ER_COLLATION_CHARSET_MISMATCH, MYF(0), + lex->name= $3->table; + lex->alter_info.flags|= ALTER_RENAME; + } + | CONVERT_SYM TO_SYM charset charset_name_or_default opt_collate + { + if (!$4) + { + THD *thd= YYTHD; + $4= thd->variables.collation_database; + } + $5= $5 ? $5 : $4; + if (!my_charset_same($4,$5)) + { + my_error(ER_COLLATION_CHARSET_MISMATCH, MYF(0), $5->name, $4->csname); - MYSQL_YYABORT; - } - LEX *lex= Lex; - lex->create_info.table_charset= - lex->create_info.default_table_charset= $5; - lex->create_info.used_fields|= (HA_CREATE_USED_CHARSET | - HA_CREATE_USED_DEFAULT_CHARSET); - lex->alter_info.flags|= ALTER_CONVERT; - } + MYSQL_YYABORT; + } + LEX *lex= Lex; + lex->create_info.table_charset= + lex->create_info.default_table_charset= $5; + lex->create_info.used_fields|= (HA_CREATE_USED_CHARSET | + HA_CREATE_USED_DEFAULT_CHARSET); + lex->alter_info.flags|= ALTER_CONVERT; + } | create_table_options_space_separated - { - LEX *lex=Lex; - lex->alter_info.flags|= ALTER_OPTIONS; - } - | FORCE_SYM - { - Lex->alter_info.flags|= ALTER_FORCE; - } - | alter_order_clause - { - LEX *lex=Lex; - lex->alter_info.flags|= ALTER_ORDER; - }; + { + LEX *lex=Lex; + lex->alter_info.flags|= ALTER_OPTIONS; + } + | FORCE_SYM + { + Lex->alter_info.flags|= ALTER_FORCE; + } + | alter_order_clause + { + LEX *lex=Lex; + lex->alter_info.flags|= ALTER_ORDER; + } + ; opt_column: - /* empty */ {} - | COLUMN_SYM {}; + /* empty */ {} + | COLUMN_SYM {} + ; opt_ignore: - /* empty */ { Lex->ignore= 0;} - | IGNORE_SYM { Lex->ignore= 1;} - ; + /* empty */ { Lex->ignore= 0;} + | IGNORE_SYM { Lex->ignore= 1;} + ; opt_restrict: - /* empty */ { Lex->drop_mode= DROP_DEFAULT; } - | RESTRICT { Lex->drop_mode= DROP_RESTRICT; } - | CASCADE { Lex->drop_mode= DROP_CASCADE; } - ; + /* empty */ { Lex->drop_mode= DROP_DEFAULT; } + | RESTRICT { Lex->drop_mode= DROP_RESTRICT; } + | CASCADE { Lex->drop_mode= DROP_CASCADE; } + ; opt_place: - /* empty */ {} - | AFTER_SYM ident { store_position_for_column($2.str); } - | FIRST_SYM { store_position_for_column(first_keyword); }; + /* empty */ {} + | AFTER_SYM ident { store_position_for_column($2.str); } + | FIRST_SYM { store_position_for_column(first_keyword); } + ; opt_to: - /* empty */ {} - | TO_SYM {} - | EQ {} - | AS {}; + /* empty */ {} + | TO_SYM {} + | EQ {} + | AS {} + ; /* SLAVE START and SLAVE STOP are deprecated. We keep them for compatibility. */ slave: - START_SYM SLAVE slave_thread_opts + START_SYM SLAVE slave_thread_opts { - LEX *lex=Lex; + LEX *lex=Lex; lex->sql_command = SQLCOM_SLAVE_START; - lex->type = 0; - /* We'll use mi structure for UNTIL options */ - bzero((char*) &lex->mi, sizeof(lex->mi)); + lex->type = 0; + /* We'll use mi structure for UNTIL options */ + bzero((char*) &lex->mi, sizeof(lex->mi)); /* If you change this code don't forget to update SLAVE START too */ } slave_until {} | STOP_SYM SLAVE slave_thread_opts { - LEX *lex=Lex; + LEX *lex=Lex; lex->sql_command = SQLCOM_SLAVE_STOP; - lex->type = 0; + lex->type = 0; /* If you change this code don't forget to update SLAVE STOP too */ } - | SLAVE START_SYM slave_thread_opts - { - LEX *lex=Lex; - lex->sql_command = SQLCOM_SLAVE_START; - lex->type = 0; - /* We'll use mi structure for UNTIL options */ - bzero((char*) &lex->mi, sizeof(lex->mi)); + | SLAVE START_SYM slave_thread_opts + { + LEX *lex=Lex; + lex->sql_command = SQLCOM_SLAVE_START; + lex->type = 0; + /* We'll use mi structure for UNTIL options */ + bzero((char*) &lex->mi, sizeof(lex->mi)); } slave_until {} - | SLAVE STOP_SYM slave_thread_opts - { - LEX *lex=Lex; - lex->sql_command = SQLCOM_SLAVE_STOP; - lex->type = 0; - } + | SLAVE STOP_SYM slave_thread_opts + { + LEX *lex=Lex; + lex->sql_command = SQLCOM_SLAVE_STOP; + lex->type = 0; + } ; - start: - START_SYM TRANSACTION_SYM start_transaction_opts - { - LEX *lex= Lex; - lex->sql_command= SQLCOM_BEGIN; - lex->start_transaction_opt= $3; - } - ; + START_SYM TRANSACTION_SYM start_transaction_opts + { + LEX *lex= Lex; + lex->sql_command= SQLCOM_BEGIN; + lex->start_transaction_opt= $3; + } + ; start_transaction_opts: - /*empty*/ { $$ = 0; } + /*empty*/ { $$ = 0; } | WITH CONSISTENT_SYM SNAPSHOT_SYM - { - $$= MYSQL_START_TRANS_OPT_WITH_CONS_SNAPSHOT; - } + { + $$= MYSQL_START_TRANS_OPT_WITH_CONS_SNAPSHOT; + } ; slave_thread_opts: - { Lex->slave_thd_opt= 0; } - slave_thread_opt_list - {} - ; + { Lex->slave_thd_opt= 0; } + slave_thread_opt_list + {} + ; slave_thread_opt_list: - slave_thread_opt - | slave_thread_opt_list ',' slave_thread_opt - ; + slave_thread_opt + | slave_thread_opt_list ',' slave_thread_opt + ; slave_thread_opt: - /*empty*/ {} - | SQL_THREAD { Lex->slave_thd_opt|=SLAVE_SQL; } - | RELAY_THREAD { Lex->slave_thd_opt|=SLAVE_IO; } - ; + /*empty*/ {} + | SQL_THREAD { Lex->slave_thd_opt|=SLAVE_SQL; } + | RELAY_THREAD { Lex->slave_thd_opt|=SLAVE_IO; } + ; slave_until: - /*empty*/ {} - | UNTIL_SYM slave_until_opts + /*empty*/ {} + | UNTIL_SYM slave_until_opts { LEX *lex=Lex; if ((lex->mi.log_file_name || lex->mi.pos) && @@ -5760,173 +6011,180 @@ slave_until: ER(ER_BAD_SLAVE_UNTIL_COND), MYF(0)); MYSQL_YYABORT; } - } - ; + ; slave_until_opts: - master_file_def - | slave_until_opts ',' master_file_def ; - + master_file_def + | slave_until_opts ',' master_file_def + ; restore: - RESTORE_SYM table_or_tables - { - Lex->sql_command = SQLCOM_RESTORE_TABLE; - } - table_list FROM TEXT_STRING_sys - { - Lex->backup_dir = $6.str; - }; + RESTORE_SYM table_or_tables + { + Lex->sql_command = SQLCOM_RESTORE_TABLE; + } + table_list FROM TEXT_STRING_sys + { + Lex->backup_dir = $6.str; + } + ; backup: - BACKUP_SYM table_or_tables - { - Lex->sql_command = SQLCOM_BACKUP_TABLE; - } - table_list TO_SYM TEXT_STRING_sys - { - Lex->backup_dir = $6.str; - }; + BACKUP_SYM table_or_tables + { + Lex->sql_command = SQLCOM_BACKUP_TABLE; + } + table_list TO_SYM TEXT_STRING_sys + { + Lex->backup_dir = $6.str; + } + ; checksum: - CHECKSUM_SYM table_or_tables - { - LEX *lex=Lex; - lex->sql_command = SQLCOM_CHECKSUM; - } - table_list opt_checksum_type - {} - ; + CHECKSUM_SYM table_or_tables + { + LEX *lex=Lex; + lex->sql_command = SQLCOM_CHECKSUM; + } + table_list opt_checksum_type + {} + ; opt_checksum_type: - /* nothing */ { Lex->check_opt.flags= 0; } - | QUICK { Lex->check_opt.flags= T_QUICK; } - | EXTENDED_SYM { Lex->check_opt.flags= T_EXTEND; } + /* nothing */ { Lex->check_opt.flags= 0; } + | QUICK { Lex->check_opt.flags= T_QUICK; } + | EXTENDED_SYM { Lex->check_opt.flags= T_EXTEND; } ; repair: - REPAIR opt_no_write_to_binlog table_or_tables - { - LEX *lex=Lex; - lex->sql_command = SQLCOM_REPAIR; - lex->no_write_to_binlog= $2; - lex->check_opt.init(); - } - table_list opt_mi_repair_type - {} - ; + REPAIR opt_no_write_to_binlog table_or_tables + { + LEX *lex=Lex; + lex->sql_command = SQLCOM_REPAIR; + lex->no_write_to_binlog= $2; + lex->check_opt.init(); + } + table_list opt_mi_repair_type + {} + ; opt_mi_repair_type: - /* empty */ { Lex->check_opt.flags = T_MEDIUM; } - | mi_repair_types {}; + /* empty */ { Lex->check_opt.flags = T_MEDIUM; } + | mi_repair_types {} + ; mi_repair_types: - mi_repair_type {} - | mi_repair_type mi_repair_types {}; + mi_repair_type {} + | mi_repair_type mi_repair_types {} + ; mi_repair_type: - QUICK { Lex->check_opt.flags|= T_QUICK; } - | EXTENDED_SYM { Lex->check_opt.flags|= T_EXTEND; } - | USE_FRM { Lex->check_opt.sql_flags|= TT_USEFRM; }; + QUICK { Lex->check_opt.flags|= T_QUICK; } + | EXTENDED_SYM { Lex->check_opt.flags|= T_EXTEND; } + | USE_FRM { Lex->check_opt.sql_flags|= TT_USEFRM; } + ; analyze: - ANALYZE_SYM opt_no_write_to_binlog table_or_tables - { - LEX *lex=Lex; - lex->sql_command = SQLCOM_ANALYZE; - lex->no_write_to_binlog= $2; - lex->check_opt.init(); - } - table_list opt_mi_check_type - {} - ; + ANALYZE_SYM opt_no_write_to_binlog table_or_tables + { + LEX *lex=Lex; + lex->sql_command = SQLCOM_ANALYZE; + lex->no_write_to_binlog= $2; + lex->check_opt.init(); + } + table_list opt_mi_check_type + {} + ; binlog_base64_event: - BINLOG_SYM TEXT_STRING_sys - { - Lex->sql_command = SQLCOM_BINLOG_BASE64_EVENT; - Lex->comment= $2; - } + BINLOG_SYM TEXT_STRING_sys + { + Lex->sql_command = SQLCOM_BINLOG_BASE64_EVENT; + Lex->comment= $2; + } ; check: - CHECK_SYM table_or_tables - { - LEX *lex=Lex; + CHECK_SYM table_or_tables + { + LEX *lex=Lex; - if (lex->sphead) - { - my_error(ER_SP_BADSTATEMENT, MYF(0), "CHECK"); - MYSQL_YYABORT; - } - lex->sql_command = SQLCOM_CHECK; - lex->check_opt.init(); - } - table_list opt_mi_check_type - {} - ; + if (lex->sphead) + { + my_error(ER_SP_BADSTATEMENT, MYF(0), "CHECK"); + MYSQL_YYABORT; + } + lex->sql_command = SQLCOM_CHECK; + lex->check_opt.init(); + } + table_list opt_mi_check_type + {} + ; opt_mi_check_type: - /* empty */ { Lex->check_opt.flags = T_MEDIUM; } - | mi_check_types {}; + /* empty */ { Lex->check_opt.flags = T_MEDIUM; } + | mi_check_types {} + ; mi_check_types: - mi_check_type {} - | mi_check_type mi_check_types {}; + mi_check_type {} + | mi_check_type mi_check_types {} + ; mi_check_type: - QUICK { Lex->check_opt.flags|= T_QUICK; } - | FAST_SYM { Lex->check_opt.flags|= T_FAST; } - | MEDIUM_SYM { Lex->check_opt.flags|= T_MEDIUM; } - | EXTENDED_SYM { Lex->check_opt.flags|= T_EXTEND; } - | CHANGED { Lex->check_opt.flags|= T_CHECK_ONLY_CHANGED; } - | FOR_SYM UPGRADE_SYM { Lex->check_opt.sql_flags|= TT_FOR_UPGRADE; }; + QUICK { Lex->check_opt.flags|= T_QUICK; } + | FAST_SYM { Lex->check_opt.flags|= T_FAST; } + | MEDIUM_SYM { Lex->check_opt.flags|= T_MEDIUM; } + | EXTENDED_SYM { Lex->check_opt.flags|= T_EXTEND; } + | CHANGED { Lex->check_opt.flags|= T_CHECK_ONLY_CHANGED; } + | FOR_SYM UPGRADE_SYM { Lex->check_opt.sql_flags|= TT_FOR_UPGRADE; } + ; optimize: - OPTIMIZE opt_no_write_to_binlog table_or_tables - { - LEX *lex=Lex; - lex->sql_command = SQLCOM_OPTIMIZE; - lex->no_write_to_binlog= $2; - lex->check_opt.init(); - } - table_list opt_mi_check_type - {} - ; + OPTIMIZE opt_no_write_to_binlog table_or_tables + { + LEX *lex=Lex; + lex->sql_command = SQLCOM_OPTIMIZE; + lex->no_write_to_binlog= $2; + lex->check_opt.init(); + } + table_list opt_mi_check_type + {} + ; opt_no_write_to_binlog: - /* empty */ { $$= 0; } - | NO_WRITE_TO_BINLOG { $$= 1; } - | LOCAL_SYM { $$= 1; } - ; + /* empty */ { $$= 0; } + | NO_WRITE_TO_BINLOG { $$= 1; } + | LOCAL_SYM { $$= 1; } + ; rename: - RENAME table_or_tables - { - Lex->sql_command= SQLCOM_RENAME_TABLE; - } - table_to_table_list - {} - | RENAME DATABASE + RENAME table_or_tables + { + Lex->sql_command= SQLCOM_RENAME_TABLE; + } + table_to_table_list + {} + | RENAME DATABASE { Lex->db_list.empty(); Lex->sql_command= SQLCOM_RENAME_DB; } db_to_db {} - | RENAME USER clear_privileges rename_list + | RENAME USER clear_privileges rename_list { - Lex->sql_command = SQLCOM_RENAME_USER; + Lex->sql_command = SQLCOM_RENAME_USER; } - ; + ; rename_list: - user TO_SYM user - { - if (Lex->users_list.push_back($1) || Lex->users_list.push_back($3)) - MYSQL_YYABORT; - } + user TO_SYM user + { + if (Lex->users_list.push_back($1) || Lex->users_list.push_back($3)) + MYSQL_YYABORT; + } | rename_list ',' user TO_SYM user { if (Lex->users_list.push_back($3) || Lex->users_list.push_back($5)) @@ -5935,103 +6193,108 @@ rename_list: ; table_to_table_list: - table_to_table - | table_to_table_list ',' table_to_table; + table_to_table + | table_to_table_list ',' table_to_table + ; table_to_table: - table_ident TO_SYM table_ident - { - LEX *lex=Lex; - SELECT_LEX *sl= lex->current_select; - if (!sl->add_table_to_list(lex->thd, $1,NULL,TL_OPTION_UPDATING, - TL_IGNORE) || - !sl->add_table_to_list(lex->thd, $3,NULL,TL_OPTION_UPDATING, - TL_IGNORE)) - MYSQL_YYABORT; - }; + table_ident TO_SYM table_ident + { + LEX *lex=Lex; + SELECT_LEX *sl= lex->current_select; + if (!sl->add_table_to_list(lex->thd, $1,NULL,TL_OPTION_UPDATING, + TL_IGNORE) || + !sl->add_table_to_list(lex->thd, $3,NULL,TL_OPTION_UPDATING, + TL_IGNORE)) + MYSQL_YYABORT; + } + ; db_to_db: - ident TO_SYM ident - { - LEX *lex=Lex; - if (lex->db_list.push_back((LEX_STRING*) - sql_memdup(&$1, sizeof(LEX_STRING))) || - lex->db_list.push_back((LEX_STRING*) - sql_memdup(&$3, sizeof(LEX_STRING)))) + ident TO_SYM ident + { + LEX *lex=Lex; + if (lex->db_list.push_back((LEX_STRING*) + sql_memdup(&$1, sizeof(LEX_STRING))) || + lex->db_list.push_back((LEX_STRING*) + sql_memdup(&$3, sizeof(LEX_STRING)))) MYSQL_YYABORT; - }; + } + ; keycache: - CACHE_SYM INDEX_SYM keycache_list IN_SYM key_cache_name - { - LEX *lex=Lex; - lex->sql_command= SQLCOM_ASSIGN_TO_KEYCACHE; - lex->ident= $5; - } + CACHE_SYM INDEX_SYM keycache_list IN_SYM key_cache_name + { + LEX *lex=Lex; + lex->sql_command= SQLCOM_ASSIGN_TO_KEYCACHE; + lex->ident= $5; + } ; keycache_list: - assign_to_keycache - | keycache_list ',' assign_to_keycache; + assign_to_keycache + | keycache_list ',' assign_to_keycache + ; assign_to_keycache: - table_ident cache_keys_spec - { - if (!Select->add_table_to_list(YYTHD, $1, NULL, 0, TL_READ, - Select->pop_index_hints())) - MYSQL_YYABORT; - } + table_ident cache_keys_spec + { + if (!Select->add_table_to_list(YYTHD, $1, NULL, 0, TL_READ, + Select->pop_index_hints())) + MYSQL_YYABORT; + } ; key_cache_name: - ident { $$= $1; } - | DEFAULT { $$ = default_key_cache_base; } - ; + ident { $$= $1; } + | DEFAULT { $$ = default_key_cache_base; } + ; preload: - LOAD INDEX_SYM INTO CACHE_SYM - { - LEX *lex=Lex; - lex->sql_command=SQLCOM_PRELOAD_KEYS; - } - preload_list - {} - ; + LOAD INDEX_SYM INTO CACHE_SYM + { + LEX *lex=Lex; + lex->sql_command=SQLCOM_PRELOAD_KEYS; + } + preload_list + {} + ; preload_list: - preload_keys - | preload_list ',' preload_keys; + preload_keys + | preload_list ',' preload_keys + ; preload_keys: - table_ident cache_keys_spec opt_ignore_leaves - { - if (!Select->add_table_to_list(YYTHD, $1, NULL, $3, TL_READ, - Select->pop_index_hints())) - MYSQL_YYABORT; - } - ; + table_ident cache_keys_spec opt_ignore_leaves + { + if (!Select->add_table_to_list(YYTHD, $1, NULL, $3, TL_READ, + Select->pop_index_hints())) + MYSQL_YYABORT; + } + ; cache_keys_spec: - { - Lex->select_lex.alloc_index_hints(YYTHD); - Select->set_index_hint_type(INDEX_HINT_USE, - global_system_variables.old_mode ? + { + Lex->select_lex.alloc_index_hints(YYTHD); + Select->set_index_hint_type(INDEX_HINT_USE, + global_system_variables.old_mode ? INDEX_HINT_MASK_JOIN : INDEX_HINT_MASK_ALL); - } - cache_key_list_or_empty + } + cache_key_list_or_empty ; cache_key_list_or_empty: - /* empty */ { } - | key_or_index '(' opt_key_usage_list ')' - ; + /* empty */ { } + | key_or_index '(' opt_key_usage_list ')' + ; opt_ignore_leaves: - /* empty */ - { $$= 0; } - | IGNORE_SYM LEAVES { $$= TL_OPTION_IGNORE_LEAVES; } - ; + /* empty */ + { $$= 0; } + | IGNORE_SYM LEAVES { $$= TL_OPTION_IGNORE_LEAVES; } + ; /* Select : retrieve data from table @@ -6039,29 +6302,29 @@ opt_ignore_leaves: select: - select_init - { - LEX *lex= Lex; - lex->sql_command= SQLCOM_SELECT; - } - ; + select_init + { + LEX *lex= Lex; + lex->sql_command= SQLCOM_SELECT; + } + ; /* Need select_init2 for subselects. */ select_init: - SELECT_SYM select_init2 - | - '(' select_paren ')' union_opt; + SELECT_SYM select_init2 + | '(' select_paren ')' union_opt + ; select_paren: - SELECT_SYM select_part2 - { - LEX *lex= Lex; + SELECT_SYM select_part2 + { + LEX *lex= Lex; SELECT_LEX * sel= lex->current_select; - if (sel->set_braces(1)) - { + if (sel->set_braces(1)) + { my_parse_error(ER(ER_SYNTAX_ERROR)); - MYSQL_YYABORT; - } + MYSQL_YYABORT; + } if (sel->linkage == UNION_TYPE && !sel->master_unit()->first_select()->braces && sel->master_unit()->first_select()->linkage == @@ -6071,56 +6334,59 @@ select_paren: MYSQL_YYABORT; } /* select in braces, can't contain global parameters */ - if (sel->master_unit()->fake_select_lex) + if (sel->master_unit()->fake_select_lex) sel->master_unit()->global_parameters= sel->master_unit()->fake_select_lex; } - | '(' select_paren ')'; + | '(' select_paren ')' + ; select_init2: - select_part2 - { - LEX *lex= Lex; - SELECT_LEX * sel= lex->current_select; - if (lex->current_select->set_braces(0)) - { - my_parse_error(ER(ER_SYNTAX_ERROR)); - MYSQL_YYABORT; - } - if (sel->linkage == UNION_TYPE && - sel->master_unit()->first_select()->braces) - { - my_parse_error(ER(ER_SYNTAX_ERROR)); - MYSQL_YYABORT; - } - } - union_clause - ; + select_part2 + { + LEX *lex= Lex; + SELECT_LEX * sel= lex->current_select; + if (lex->current_select->set_braces(0)) + { + my_parse_error(ER(ER_SYNTAX_ERROR)); + MYSQL_YYABORT; + } + if (sel->linkage == UNION_TYPE && + sel->master_unit()->first_select()->braces) + { + my_parse_error(ER(ER_SYNTAX_ERROR)); + MYSQL_YYABORT; + } + } + union_clause + ; select_part2: - { - LEX *lex= Lex; - SELECT_LEX *sel= lex->current_select; - if (sel->linkage != UNION_TYPE) - mysql_init_select(lex); - lex->current_select->parsing_place= SELECT_LIST; - } - select_options select_item_list - { - Select->parsing_place= NO_MATTER; - } - select_into select_lock_type; + { + LEX *lex= Lex; + SELECT_LEX *sel= lex->current_select; + if (sel->linkage != UNION_TYPE) + mysql_init_select(lex); + lex->current_select->parsing_place= SELECT_LIST; + } + select_options select_item_list + { + Select->parsing_place= NO_MATTER; + } + select_into select_lock_type + ; select_into: - opt_order_clause opt_limit_clause {} + opt_order_clause opt_limit_clause {} | into - | select_from - | into select_from - | select_from into; + | select_from + | into select_from + | select_from into + ; select_from: - FROM join_table_list where_clause group_clause having_clause - opt_order_clause opt_limit_clause procedure_clause + FROM join_table_list where_clause group_clause having_clause + opt_order_clause opt_limit_clause procedure_clause { Select->context.table_list= Select->context.first_name_resolution_table= @@ -6131,55 +6397,56 @@ select_from: and DUAL is system table without fields. Is "SELECT 1 FROM DUAL" any better than "SELECT 1" ? Hmmm :) */ - ; + ; select_options: - /* empty*/ - | select_option_list - { - if (Select->options & SELECT_DISTINCT && Select->options & SELECT_ALL) - { - my_error(ER_WRONG_USAGE, MYF(0), "ALL", "DISTINCT"); + /* empty*/ + | select_option_list + { + if (Select->options & SELECT_DISTINCT && Select->options & SELECT_ALL) + { + my_error(ER_WRONG_USAGE, MYF(0), "ALL", "DISTINCT"); MYSQL_YYABORT; - } + } } - ; + ; select_option_list: - select_option_list select_option - | select_option; + select_option_list select_option + | select_option + ; select_option: - STRAIGHT_JOIN { Select->options|= SELECT_STRAIGHT_JOIN; } - | HIGH_PRIORITY - { - if (check_simple_select()) - MYSQL_YYABORT; - Lex->lock_option= TL_READ_HIGH_PRIORITY; - } - | DISTINCT { Select->options|= SELECT_DISTINCT; } - | SQL_SMALL_RESULT { Select->options|= SELECT_SMALL_RESULT; } - | SQL_BIG_RESULT { Select->options|= SELECT_BIG_RESULT; } - | SQL_BUFFER_RESULT - { - if (check_simple_select()) - MYSQL_YYABORT; - Select->options|= OPTION_BUFFER_RESULT; - } - | SQL_CALC_FOUND_ROWS - { - if (check_simple_select()) - MYSQL_YYABORT; - Select->options|= OPTION_FOUND_ROWS; - } - | SQL_NO_CACHE_SYM + STRAIGHT_JOIN { Select->options|= SELECT_STRAIGHT_JOIN; } + | HIGH_PRIORITY + { + if (check_simple_select()) + MYSQL_YYABORT; + Lex->lock_option= TL_READ_HIGH_PRIORITY; + } + | DISTINCT { Select->options|= SELECT_DISTINCT; } + | SQL_SMALL_RESULT { Select->options|= SELECT_SMALL_RESULT; } + | SQL_BIG_RESULT { Select->options|= SELECT_BIG_RESULT; } + | SQL_BUFFER_RESULT + { + if (check_simple_select()) + MYSQL_YYABORT; + Select->options|= OPTION_BUFFER_RESULT; + } + | SQL_CALC_FOUND_ROWS + { + if (check_simple_select()) + MYSQL_YYABORT; + Select->options|= OPTION_FOUND_ROWS; + } + | SQL_NO_CACHE_SYM { Lex->safe_to_cache_query=0; - Lex->select_lex.options&= ~OPTION_TO_QUERY_CACHE; + Lex->select_lex.options&= ~OPTION_TO_QUERY_CACHE; Lex->select_lex.sql_cache= SELECT_LEX::SQL_NO_CACHE; } - | SQL_CACHE_SYM - { + | SQL_CACHE_SYM + { /* Honor this flag only if SQL_NO_CACHE wasn't specified AND we are parsing the outermost SELECT in the query. @@ -6188,94 +6455,98 @@ select_option: Lex->current_select == &Lex->select_lex) { Lex->safe_to_cache_query=1; - Lex->select_lex.options|= OPTION_TO_QUERY_CACHE; + Lex->select_lex.options|= OPTION_TO_QUERY_CACHE; Lex->select_lex.sql_cache= SELECT_LEX::SQL_CACHE; } - } - | ALL { Select->options|= SELECT_ALL; } - ; + } + | ALL { Select->options|= SELECT_ALL; } + ; select_lock_type: - /* empty */ - | FOR_SYM UPDATE_SYM - { - LEX *lex=Lex; - lex->current_select->set_lock_for_tables(TL_WRITE); - lex->safe_to_cache_query=0; - } - | LOCK_SYM IN_SYM SHARE_SYM MODE_SYM - { - LEX *lex=Lex; - lex->current_select-> - set_lock_for_tables(TL_READ_WITH_SHARED_LOCKS); - lex->safe_to_cache_query=0; - } - ; + /* empty */ + | FOR_SYM UPDATE_SYM + { + LEX *lex=Lex; + lex->current_select->set_lock_for_tables(TL_WRITE); + lex->safe_to_cache_query=0; + } + | LOCK_SYM IN_SYM SHARE_SYM MODE_SYM + { + LEX *lex=Lex; + lex->current_select-> + set_lock_for_tables(TL_READ_WITH_SHARED_LOCKS); + lex->safe_to_cache_query=0; + } + ; select_item_list: - select_item_list ',' select_item - | select_item - | '*' - { - THD *thd= YYTHD; - if (add_item_to_list(thd, + select_item_list ',' select_item + | select_item + | '*' + { + THD *thd= YYTHD; + if (add_item_to_list(thd, new Item_field(&thd->lex->current_select-> context, NULL, NULL, "*"))) - MYSQL_YYABORT; - (thd->lex->current_select->with_wild)++; - }; - + MYSQL_YYABORT; + (thd->lex->current_select->with_wild)++; + } + ; select_item: - remember_name select_item2 remember_end select_alias - { + remember_name select_item2 remember_end select_alias + { THD *thd= YYTHD; DBUG_ASSERT($1 < $3); - if (add_item_to_list(thd, $2)) - MYSQL_YYABORT; - if ($4.str) + if (add_item_to_list(thd, $2)) + MYSQL_YYABORT; + if ($4.str) { $2->is_autogenerated_name= FALSE; - $2->set_name($4.str, $4.length, system_charset_info); + $2->set_name($4.str, $4.length, system_charset_info); } - else if (!$2->name) + else if (!$2->name) { - $2->set_name($1, (uint) ($3 - $1), thd->charset()); - } - }; - + $2->set_name($1, (uint) ($3 - $1), thd->charset()); + } + } + ; remember_name: - { - THD *thd= YYTHD; - Lex_input_stream *lip= thd->m_lip; - $$= (char*) lip->get_cpp_tok_start(); - }; + { + THD *thd= YYTHD; + Lex_input_stream *lip= thd->m_lip; + $$= (char*) lip->get_cpp_tok_start(); + } + ; remember_end: - { - THD *thd= YYTHD; - Lex_input_stream *lip= thd->m_lip; - $$= (char*) lip->get_cpp_tok_end(); - }; + { + THD *thd= YYTHD; + Lex_input_stream *lip= thd->m_lip; + $$= (char*) lip->get_cpp_tok_end(); + } + ; select_item2: - table_wild { $$=$1; } /* table.* */ - | expr { $$=$1; }; + table_wild { $$=$1; /* table.* */ } + | expr { $$=$1; } + ; select_alias: - /* empty */ { $$=null_lex_str;} - | AS ident { $$=$2; } - | AS TEXT_STRING_sys { $$=$2; } - | ident { $$=$1; } - | TEXT_STRING_sys { $$=$1; } - ; + /* empty */ { $$=null_lex_str;} + | AS ident { $$=$2; } + | AS TEXT_STRING_sys { $$=$2; } + | ident { $$=$1; } + | TEXT_STRING_sys { $$=$1; } + ; optional_braces: - /* empty */ {} - | '(' ')' {}; + /* empty */ {} + | '(' ')' {} + ; /* all possible expressions */ expr: @@ -6328,8 +6599,9 @@ bool_and_expr: ; bool_factor: - NOT_SYM bool_factor { $$= negate_expression(YYTHD, $2); } - | bool_test ; + NOT_SYM bool_factor { $$= negate_expression(YYTHD, $2); } + | bool_test + ; bool_test: bool_pri IS TRUE_SYM @@ -6340,27 +6612,28 @@ bool_test: { $$= new (YYTHD->mem_root) Item_func_isfalse($1); } | bool_pri IS not FALSE_SYM { $$= new (YYTHD->mem_root) Item_func_isnotfalse($1); } - | bool_pri IS UNKNOWN_SYM { $$= new Item_func_isnull($1); } - | bool_pri IS not UNKNOWN_SYM { $$= new Item_func_isnotnull($1); } + | bool_pri IS UNKNOWN_SYM { $$= new Item_func_isnull($1); } + | bool_pri IS not UNKNOWN_SYM { $$= new Item_func_isnotnull($1); } | bool_pri ; bool_pri: - bool_pri IS NULL_SYM { $$= new Item_func_isnull($1); } - | bool_pri IS not NULL_SYM { $$= new Item_func_isnotnull($1); } - | bool_pri EQUAL_SYM predicate { $$= new Item_func_equal($1,$3); } - | bool_pri comp_op predicate %prec EQ - { $$= (*$2)(0)->create($1,$3); } - | bool_pri comp_op all_or_any '(' subselect ')' %prec EQ - { $$= all_any_subquery_creator($1, $2, $3, $5); } - | predicate ; + bool_pri IS NULL_SYM { $$= new Item_func_isnull($1); } + | bool_pri IS not NULL_SYM { $$= new Item_func_isnotnull($1); } + | bool_pri EQUAL_SYM predicate { $$= new Item_func_equal($1,$3); } + | bool_pri comp_op predicate %prec EQ + { $$= (*$2)(0)->create($1,$3); } + | bool_pri comp_op all_or_any '(' subselect ')' %prec EQ + { $$= all_any_subquery_creator($1, $2, $3, $5); } + | predicate + ; predicate: - bit_expr IN_SYM '(' subselect ')' + bit_expr IN_SYM '(' subselect ')' { $$= new (YYTHD->mem_root) Item_in_subselect($1, $4); } - | bit_expr not IN_SYM '(' subselect ')' + | bit_expr not IN_SYM '(' subselect ')' { THD *thd= YYTHD; Item *item= new (thd->mem_root) Item_in_subselect($1, $5); @@ -6370,148 +6643,174 @@ predicate: { $$= handle_sql2003_note184_exception(YYTHD, $1, true, $4); } - | bit_expr IN_SYM '(' expr ',' expr_list ')' - { - $6->push_front($4); - $6->push_front($1); + | bit_expr IN_SYM '(' expr ',' expr_list ')' + { + $6->push_front($4); + $6->push_front($1); $$= new (YYTHD->mem_root) Item_func_in(*$6); } | bit_expr not IN_SYM '(' expr ')' { $$= handle_sql2003_note184_exception(YYTHD, $1, false, $5); } - | bit_expr not IN_SYM '(' expr ',' expr_list ')' + | bit_expr not IN_SYM '(' expr ',' expr_list ')' { - $7->push_front($5); - $7->push_front($1); + $7->push_front($5); + $7->push_front($1); Item_func_in *item = new (YYTHD->mem_root) Item_func_in(*$7); - item->negate(); - $$= item; + item->negate(); + $$= item; } - | bit_expr BETWEEN_SYM bit_expr AND_SYM predicate - { $$= new Item_func_between($1,$3,$5); } - | bit_expr not BETWEEN_SYM bit_expr AND_SYM predicate - { - Item_func_between *item= new Item_func_between($1,$4,$6); - item->negate(); - $$= item; - } - | bit_expr SOUNDS_SYM LIKE bit_expr - { $$= new Item_func_eq(new Item_func_soundex($1), - new Item_func_soundex($4)); } - | bit_expr LIKE simple_expr opt_escape + | bit_expr BETWEEN_SYM bit_expr AND_SYM predicate + { $$= new Item_func_between($1,$3,$5); } + | bit_expr not BETWEEN_SYM bit_expr AND_SYM predicate + { + Item_func_between *item= new Item_func_between($1,$4,$6); + item->negate(); + $$= item; + } + | bit_expr SOUNDS_SYM LIKE bit_expr + { + $$= new Item_func_eq(new Item_func_soundex($1), + new Item_func_soundex($4)); + } + | bit_expr LIKE simple_expr opt_escape { $$= new Item_func_like($1,$3,$4,Lex->escape_used); } - | bit_expr not LIKE simple_expr opt_escape + | bit_expr not LIKE simple_expr opt_escape { $$= new Item_func_not(new Item_func_like($1,$4,$5, Lex->escape_used)); } - | bit_expr REGEXP bit_expr { $$= new Item_func_regex($1,$3); } - | bit_expr not REGEXP bit_expr + | bit_expr REGEXP bit_expr { $$= new Item_func_regex($1,$3); } + | bit_expr not REGEXP bit_expr { $$= negate_expression(YYTHD, new Item_func_regex($1,$4)); } - | bit_expr ; + | bit_expr + ; bit_expr: - bit_expr '|' bit_term { $$= new Item_func_bit_or($1,$3); } - | bit_term ; + bit_expr '|' bit_term { $$= new Item_func_bit_or($1,$3); } + | bit_term + ; bit_term: - bit_term '&' bit_factor { $$= new Item_func_bit_and($1,$3); } - | bit_factor ; + bit_term '&' bit_factor { $$= new Item_func_bit_and($1,$3); } + | bit_factor + ; bit_factor: - bit_factor SHIFT_LEFT value_expr - { $$= new Item_func_shift_left($1,$3); } - | bit_factor SHIFT_RIGHT value_expr - { $$= new Item_func_shift_right($1,$3); } - | value_expr ; + bit_factor SHIFT_LEFT value_expr + { $$= new Item_func_shift_left($1,$3); } + | bit_factor SHIFT_RIGHT value_expr + { $$= new Item_func_shift_right($1,$3); } + | value_expr + ; value_expr: - value_expr '+' term { $$= new Item_func_plus($1,$3); } - | value_expr '-' term { $$= new Item_func_minus($1,$3); } - | value_expr '+' interval_expr interval - { $$= new Item_date_add_interval($1,$3,$4,0); } - | value_expr '-' interval_expr interval - { $$= new Item_date_add_interval($1,$3,$4,1); } - | term ; + value_expr '+' term { $$= new Item_func_plus($1,$3); } + | value_expr '-' term { $$= new Item_func_minus($1,$3); } + | value_expr '+' interval_expr interval + { $$= new Item_date_add_interval($1,$3,$4,0); } + | value_expr '-' interval_expr interval + { $$= new Item_date_add_interval($1,$3,$4,1); } + | term + ; term: - term '*' factor { $$= new Item_func_mul($1,$3); } - | term '/' factor { $$= new Item_func_div($1,$3); } - | term '%' factor { $$= new Item_func_mod($1,$3); } - | term DIV_SYM factor { $$= new Item_func_int_div($1,$3); } - | term MOD_SYM factor { $$= new Item_func_mod($1,$3); } - | factor ; + term '*' factor { $$= new Item_func_mul($1,$3); } + | term '/' factor { $$= new Item_func_div($1,$3); } + | term '%' factor { $$= new Item_func_mod($1,$3); } + | term DIV_SYM factor { $$= new Item_func_int_div($1,$3); } + | term MOD_SYM factor { $$= new Item_func_mod($1,$3); } + | factor + ; factor: - factor '^' simple_expr { $$= new Item_func_bit_xor($1,$3); } - | simple_expr ; + factor '^' simple_expr { $$= new Item_func_bit_xor($1,$3); } + | simple_expr + ; -or: OR_SYM | OR2_SYM; -and: AND_SYM | AND_AND_SYM; -not: NOT_SYM | NOT2_SYM; -not2: '!' | NOT2_SYM; +or: + OR_SYM + | OR2_SYM + ; -comp_op: EQ { $$ = &comp_eq_creator; } - | GE { $$ = &comp_ge_creator; } - | GT_SYM { $$ = &comp_gt_creator; } - | LE { $$ = &comp_le_creator; } - | LT { $$ = &comp_lt_creator; } - | NE { $$ = &comp_ne_creator; } - ; +and: + AND_SYM + | AND_AND_SYM + ; -all_or_any: ALL { $$ = 1; } - | ANY_SYM { $$ = 0; } +not: + NOT_SYM + | NOT2_SYM + ; + +not2: + '!' + | NOT2_SYM + ; + +comp_op: + EQ { $$ = &comp_eq_creator; } + | GE { $$ = &comp_ge_creator; } + | GT_SYM { $$ = &comp_gt_creator; } + | LE { $$ = &comp_le_creator; } + | LT { $$ = &comp_lt_creator; } + | NE { $$ = &comp_ne_creator; } + ; + +all_or_any: + ALL { $$ = 1; } + | ANY_SYM { $$ = 0; } ; interval_expr: - INTERVAL_SYM expr { $$=$2; } + INTERVAL_SYM expr { $$=$2; } ; simple_expr: - simple_ident + simple_ident | function_call_keyword | function_call_nonkeyword | function_call_generic | function_call_conflict - | simple_expr COLLATE_SYM ident_or_text %prec NEG - { + | simple_expr COLLATE_SYM ident_or_text %prec NEG + { THD *thd= YYTHD; Item *i1= new (thd->mem_root) Item_string($3.str, $3.length, thd->charset()); - $$= new (thd->mem_root) Item_func_set_collation($1, i1); - } - | literal - | param_marker - | variable - | sum_expr - | simple_expr OR_OR_SYM simple_expr - { $$= new (YYTHD->mem_root) Item_func_concat($1, $3); } - | '+' simple_expr %prec NEG { $$= $2; } - | '-' simple_expr %prec NEG + $$= new (thd->mem_root) Item_func_set_collation($1, i1); + } + | literal + | param_marker + | variable + | sum_expr + | simple_expr OR_OR_SYM simple_expr + { $$= new (YYTHD->mem_root) Item_func_concat($1, $3); } + | '+' simple_expr %prec NEG { $$= $2; } + | '-' simple_expr %prec NEG { $$= new (YYTHD->mem_root) Item_func_neg($2); } - | '~' simple_expr %prec NEG + | '~' simple_expr %prec NEG { $$= new (YYTHD->mem_root) Item_func_bit_neg($2); } - | not2 simple_expr %prec NEG + | not2 simple_expr %prec NEG { $$= negate_expression(YYTHD, $2); } - | '(' subselect ')' + | '(' subselect ')' { $$= new (YYTHD->mem_root) Item_singlerow_subselect($2); } - | '(' expr ')' { $$= $2; } - | '(' expr ',' expr_list ')' - { - $4->push_front($2); - $$= new (YYTHD->mem_root) Item_row(*$4); - } - | ROW_SYM '(' expr ',' expr_list ')' - { - $5->push_front($3); - $$= new (YYTHD->mem_root) Item_row(*$5); - } - | EXISTS '(' subselect ')' + | '(' expr ')' { $$= $2; } + | '(' expr ',' expr_list ')' + { + $4->push_front($2); + $$= new (YYTHD->mem_root) Item_row(*$4); + } + | ROW_SYM '(' expr ',' expr_list ')' + { + $5->push_front($3); + $$= new (YYTHD->mem_root) Item_row(*$5); + } + | EXISTS '(' subselect ')' { $$= new (YYTHD->mem_root) Item_exists_subselect($3); } - | '{' ident expr '}' { $$= $3; } + | '{' ident expr '}' { $$= $3; } | MATCH ident_list_arg AGAINST '(' bit_expr fulltext_options ')' { $2->push_front($5); @@ -6519,50 +6818,52 @@ simple_expr: Select->add_ftfunc_to_list(i1); $$= i1; } - | BINARY simple_expr %prec NEG - { + | BINARY simple_expr %prec NEG + { $$= create_func_cast(YYTHD, $2, ITEM_CAST_CHAR, NULL, NULL, &my_charset_bin); - } - | CAST_SYM '(' expr AS cast_type ')' - { + } + | CAST_SYM '(' expr AS cast_type ')' + { LEX *lex= Lex; - $$= create_func_cast(YYTHD, $3, $5, lex->length, lex->dec, + $$= create_func_cast(YYTHD, $3, $5, lex->length, lex->dec, lex->charset); if (!$$) MYSQL_YYABORT; - } - | CASE_SYM opt_expr when_list opt_else END - { $$= new (YYTHD->mem_root) Item_func_case(* $3, $2, $4 ); } - | CONVERT_SYM '(' expr ',' cast_type ')' - { - $$= create_func_cast(YYTHD, $3, $5, Lex->length, Lex->dec, + } + | CASE_SYM opt_expr when_list opt_else END + { $$= new (YYTHD->mem_root) Item_func_case(* $3, $2, $4 ); } + | CONVERT_SYM '(' expr ',' cast_type ')' + { + $$= create_func_cast(YYTHD, $3, $5, Lex->length, Lex->dec, Lex->charset); if (!$$) MYSQL_YYABORT; - } - | CONVERT_SYM '(' expr USING charset_name ')' - { $$= new (YYTHD->mem_root) Item_func_conv_charset($3,$5); } - | DEFAULT '(' simple_ident ')' - { - if ($3->is_splocal()) - { - Item_splocal *il= static_cast($3); + } + | CONVERT_SYM '(' expr USING charset_name ')' + { $$= new (YYTHD->mem_root) Item_func_conv_charset($3,$5); } + | DEFAULT '(' simple_ident ')' + { + if ($3->is_splocal()) + { + Item_splocal *il= static_cast($3); - my_error(ER_WRONG_COLUMN_NAME, MYF(0), il->my_name()->str); - MYSQL_YYABORT; - } - $$= new (YYTHD->mem_root) Item_default_value(Lex->current_context(), + my_error(ER_WRONG_COLUMN_NAME, MYF(0), il->my_name()->str); + MYSQL_YYABORT; + } + $$= new (YYTHD->mem_root) Item_default_value(Lex->current_context(), $3); - } - | VALUES '(' simple_ident_nospvar ')' - { $$= new (YYTHD->mem_root) Item_insert_value(Lex->current_context(), - $3); } - | interval_expr interval '+' expr - /* we cannot put interval before - */ - { $$= new (YYTHD->mem_root) Item_date_add_interval($4,$1,$2,0); } - | interval_expr - { + } + | VALUES '(' simple_ident_nospvar ')' + { + $$= new (YYTHD->mem_root) Item_insert_value(Lex->current_context(), + $3); + } + | interval_expr interval '+' expr + /* we cannot put interval before - */ + { $$= new (YYTHD->mem_root) Item_date_add_interval($4,$1,$2,0); } + | interval_expr + { if ($1->type() != Item::ROW_ITEM) { my_parse_error(ER(ER_SYNTAX_ERROR)); @@ -6579,62 +6880,62 @@ simple_expr: There is no potential for conflicts */ function_call_keyword: - CHAR_SYM '(' expr_list ')' - { $$= new (YYTHD->mem_root) Item_func_char(*$3); } - | CHAR_SYM '(' expr_list USING charset_name ')' - { $$= new (YYTHD->mem_root) Item_func_char(*$3, $5); } - | CURRENT_USER optional_braces + CHAR_SYM '(' expr_list ')' + { $$= new (YYTHD->mem_root) Item_func_char(*$3); } + | CHAR_SYM '(' expr_list USING charset_name ')' + { $$= new (YYTHD->mem_root) Item_func_char(*$3, $5); } + | CURRENT_USER optional_braces { $$= new (YYTHD->mem_root) Item_func_current_user(Lex->current_context()); Lex->safe_to_cache_query= 0; } - | DATE_SYM '(' expr ')' - { $$= new (YYTHD->mem_root) Item_date_typecast($3); } - | DAY_SYM '(' expr ')' - { $$= new (YYTHD->mem_root) Item_func_dayofmonth($3); } - | HOUR_SYM '(' expr ')' - { $$= new (YYTHD->mem_root) Item_func_hour($3); } - | INSERT '(' expr ',' expr ',' expr ',' expr ')' - { $$= new (YYTHD->mem_root) Item_func_insert($3,$5,$7,$9); } - | LEFT '(' expr ',' expr ')' - { $$= new (YYTHD->mem_root) Item_func_left($3,$5); } - | MINUTE_SYM '(' expr ')' - { $$= new (YYTHD->mem_root) Item_func_minute($3); } - | MONTH_SYM '(' expr ')' - { $$= new (YYTHD->mem_root) Item_func_month($3); } - | RIGHT '(' expr ',' expr ')' - { $$= new (YYTHD->mem_root) Item_func_right($3,$5); } - | SECOND_SYM '(' expr ')' - { $$= new (YYTHD->mem_root) Item_func_second($3); } - | TIME_SYM '(' expr ')' - { $$= new (YYTHD->mem_root) Item_time_typecast($3); } - | TIMESTAMP '(' expr ')' - { $$= new (YYTHD->mem_root) Item_datetime_typecast($3); } - | TIMESTAMP '(' expr ',' expr ')' - { $$= new (YYTHD->mem_root) Item_func_add_time($3, $5, 1, 0); } - | TRIM '(' expr ')' - { $$= new (YYTHD->mem_root) Item_func_trim($3); } - | TRIM '(' LEADING expr FROM expr ')' - { $$= new (YYTHD->mem_root) Item_func_ltrim($6,$4); } - | TRIM '(' TRAILING expr FROM expr ')' - { $$= new (YYTHD->mem_root) Item_func_rtrim($6,$4); } - | TRIM '(' BOTH expr FROM expr ')' - { $$= new (YYTHD->mem_root) Item_func_trim($6,$4); } - | TRIM '(' LEADING FROM expr ')' - { $$= new (YYTHD->mem_root) Item_func_ltrim($5); } - | TRIM '(' TRAILING FROM expr ')' - { $$= new (YYTHD->mem_root) Item_func_rtrim($5); } - | TRIM '(' BOTH FROM expr ')' - { $$= new (YYTHD->mem_root) Item_func_trim($5); } - | TRIM '(' expr FROM expr ')' - { $$= new (YYTHD->mem_root) Item_func_trim($5,$3); } - | USER '(' ')' - { + | DATE_SYM '(' expr ')' + { $$= new (YYTHD->mem_root) Item_date_typecast($3); } + | DAY_SYM '(' expr ')' + { $$= new (YYTHD->mem_root) Item_func_dayofmonth($3); } + | HOUR_SYM '(' expr ')' + { $$= new (YYTHD->mem_root) Item_func_hour($3); } + | INSERT '(' expr ',' expr ',' expr ',' expr ')' + { $$= new (YYTHD->mem_root) Item_func_insert($3,$5,$7,$9); } + | LEFT '(' expr ',' expr ')' + { $$= new (YYTHD->mem_root) Item_func_left($3,$5); } + | MINUTE_SYM '(' expr ')' + { $$= new (YYTHD->mem_root) Item_func_minute($3); } + | MONTH_SYM '(' expr ')' + { $$= new (YYTHD->mem_root) Item_func_month($3); } + | RIGHT '(' expr ',' expr ')' + { $$= new (YYTHD->mem_root) Item_func_right($3,$5); } + | SECOND_SYM '(' expr ')' + { $$= new (YYTHD->mem_root) Item_func_second($3); } + | TIME_SYM '(' expr ')' + { $$= new (YYTHD->mem_root) Item_time_typecast($3); } + | TIMESTAMP '(' expr ')' + { $$= new (YYTHD->mem_root) Item_datetime_typecast($3); } + | TIMESTAMP '(' expr ',' expr ')' + { $$= new (YYTHD->mem_root) Item_func_add_time($3, $5, 1, 0); } + | TRIM '(' expr ')' + { $$= new (YYTHD->mem_root) Item_func_trim($3); } + | TRIM '(' LEADING expr FROM expr ')' + { $$= new (YYTHD->mem_root) Item_func_ltrim($6,$4); } + | TRIM '(' TRAILING expr FROM expr ')' + { $$= new (YYTHD->mem_root) Item_func_rtrim($6,$4); } + | TRIM '(' BOTH expr FROM expr ')' + { $$= new (YYTHD->mem_root) Item_func_trim($6,$4); } + | TRIM '(' LEADING FROM expr ')' + { $$= new (YYTHD->mem_root) Item_func_ltrim($5); } + | TRIM '(' TRAILING FROM expr ')' + { $$= new (YYTHD->mem_root) Item_func_rtrim($5); } + | TRIM '(' BOTH FROM expr ')' + { $$= new (YYTHD->mem_root) Item_func_trim($5); } + | TRIM '(' expr FROM expr ')' + { $$= new (YYTHD->mem_root) Item_func_trim($5,$3); } + | USER '(' ')' + { $$= new (YYTHD->mem_root) Item_func_user(); Lex->safe_to_cache_query=0; } - | YEAR_SYM '(' expr ')' - { $$= new (YYTHD->mem_root) Item_func_year($3); } + | YEAR_SYM '(' expr ')' + { $$= new (YYTHD->mem_root) Item_func_year($3); } ; /* @@ -6650,64 +6951,64 @@ function_call_keyword: discouraged. */ function_call_nonkeyword: - ADDDATE_SYM '(' expr ',' expr ')' - { + ADDDATE_SYM '(' expr ',' expr ')' + { $$= new (YYTHD->mem_root) Item_date_add_interval($3, $5, INTERVAL_DAY, 0); } - | ADDDATE_SYM '(' expr ',' INTERVAL_SYM expr interval ')' - { $$= new (YYTHD->mem_root) Item_date_add_interval($3, $6, $7, 0); } - | CURDATE optional_braces - { + | ADDDATE_SYM '(' expr ',' INTERVAL_SYM expr interval ')' + { $$= new (YYTHD->mem_root) Item_date_add_interval($3, $6, $7, 0); } + | CURDATE optional_braces + { $$= new (YYTHD->mem_root) Item_func_curdate_local(); Lex->safe_to_cache_query=0; } - | CURTIME optional_braces - { + | CURTIME optional_braces + { $$= new (YYTHD->mem_root) Item_func_curtime_local(); Lex->safe_to_cache_query=0; } - | CURTIME '(' expr ')' - { - $$= new (YYTHD->mem_root) Item_func_curtime_local($3); - Lex->safe_to_cache_query=0; - } - | DATE_ADD_INTERVAL '(' expr ',' interval_expr interval ')' - { $$= new (YYTHD->mem_root) Item_date_add_interval($3,$5,$6,0); } - | DATE_SUB_INTERVAL '(' expr ',' interval_expr interval ')' - { $$= new (YYTHD->mem_root) Item_date_add_interval($3,$5,$6,1); } - | EXTRACT_SYM '(' interval FROM expr ')' - { $$=new (YYTHD->mem_root) Item_extract( $3, $5); } - | GET_FORMAT '(' date_time_type ',' expr ')' - { $$= new (YYTHD->mem_root) Item_func_get_format($3, $5); } - | NOW_SYM optional_braces - { + | CURTIME '(' expr ')' + { + $$= new (YYTHD->mem_root) Item_func_curtime_local($3); + Lex->safe_to_cache_query=0; + } + | DATE_ADD_INTERVAL '(' expr ',' interval_expr interval ')' + { $$= new (YYTHD->mem_root) Item_date_add_interval($3,$5,$6,0); } + | DATE_SUB_INTERVAL '(' expr ',' interval_expr interval ')' + { $$= new (YYTHD->mem_root) Item_date_add_interval($3,$5,$6,1); } + | EXTRACT_SYM '(' interval FROM expr ')' + { $$=new (YYTHD->mem_root) Item_extract( $3, $5); } + | GET_FORMAT '(' date_time_type ',' expr ')' + { $$= new (YYTHD->mem_root) Item_func_get_format($3, $5); } + | NOW_SYM optional_braces + { $$= new (YYTHD->mem_root) Item_func_now_local(); Lex->safe_to_cache_query=0; } - | NOW_SYM '(' expr ')' - { + | NOW_SYM '(' expr ')' + { $$= new (YYTHD->mem_root) Item_func_now_local($3); Lex->safe_to_cache_query=0; } - | POSITION_SYM '(' bit_expr IN_SYM expr ')' - { $$ = new (YYTHD->mem_root) Item_func_locate($5,$3); } - | SUBDATE_SYM '(' expr ',' expr ')' - { + | POSITION_SYM '(' bit_expr IN_SYM expr ')' + { $$ = new (YYTHD->mem_root) Item_func_locate($5,$3); } + | SUBDATE_SYM '(' expr ',' expr ')' + { $$= new (YYTHD->mem_root) Item_date_add_interval($3, $5, INTERVAL_DAY, 1); } - | SUBDATE_SYM '(' expr ',' INTERVAL_SYM expr interval ')' - { $$= new (YYTHD->mem_root) Item_date_add_interval($3, $6, $7, 1); } - | SUBSTRING '(' expr ',' expr ',' expr ')' - { $$= new (YYTHD->mem_root) Item_func_substr($3,$5,$7); } - | SUBSTRING '(' expr ',' expr ')' - { $$= new (YYTHD->mem_root) Item_func_substr($3,$5); } - | SUBSTRING '(' expr FROM expr FOR_SYM expr ')' - { $$= new (YYTHD->mem_root) Item_func_substr($3,$5,$7); } - | SUBSTRING '(' expr FROM expr ')' - { $$= new (YYTHD->mem_root) Item_func_substr($3,$5); } - | SYSDATE optional_braces + | SUBDATE_SYM '(' expr ',' INTERVAL_SYM expr interval ')' + { $$= new (YYTHD->mem_root) Item_date_add_interval($3, $6, $7, 1); } + | SUBSTRING '(' expr ',' expr ',' expr ')' + { $$= new (YYTHD->mem_root) Item_func_substr($3,$5,$7); } + | SUBSTRING '(' expr ',' expr ')' + { $$= new (YYTHD->mem_root) Item_func_substr($3,$5); } + | SUBSTRING '(' expr FROM expr FOR_SYM expr ')' + { $$= new (YYTHD->mem_root) Item_func_substr($3,$5,$7); } + | SUBSTRING '(' expr FROM expr ')' + { $$= new (YYTHD->mem_root) Item_func_substr($3,$5); } + | SYSDATE optional_braces { if (global_system_variables.sysdate_is_now == 0) $$= new (YYTHD->mem_root) Item_func_sysdate_local(); @@ -6715,7 +7016,7 @@ function_call_nonkeyword: $$= new (YYTHD->mem_root) Item_func_now_local(); Lex->safe_to_cache_query=0; } - | SYSDATE '(' expr ')' + | SYSDATE '(' expr ')' { if (global_system_variables.sysdate_is_now == 0) $$= new (YYTHD->mem_root) Item_func_sysdate_local($3); @@ -6723,22 +7024,22 @@ function_call_nonkeyword: $$= new (YYTHD->mem_root) Item_func_now_local($3); Lex->safe_to_cache_query=0; } - | TIMESTAMP_ADD '(' interval_time_st ',' expr ',' expr ')' - { $$= new (YYTHD->mem_root) Item_date_add_interval($7,$5,$3,0); } - | TIMESTAMP_DIFF '(' interval_time_st ',' expr ',' expr ')' - { $$= new (YYTHD->mem_root) Item_func_timestamp_diff($5,$7,$3); } - | UTC_DATE_SYM optional_braces - { + | TIMESTAMP_ADD '(' interval_time_st ',' expr ',' expr ')' + { $$= new (YYTHD->mem_root) Item_date_add_interval($7,$5,$3,0); } + | TIMESTAMP_DIFF '(' interval_time_st ',' expr ',' expr ')' + { $$= new (YYTHD->mem_root) Item_func_timestamp_diff($5,$7,$3); } + | UTC_DATE_SYM optional_braces + { $$= new (YYTHD->mem_root) Item_func_curdate_utc(); Lex->safe_to_cache_query=0; } - | UTC_TIME_SYM optional_braces - { + | UTC_TIME_SYM optional_braces + { $$= new (YYTHD->mem_root) Item_func_curtime_utc(); Lex->safe_to_cache_query=0; } - | UTC_TIMESTAMP_SYM optional_braces - { + | UTC_TIMESTAMP_SYM optional_braces + { $$= new (YYTHD->mem_root) Item_func_now_utc(); Lex->safe_to_cache_query=0; } @@ -6750,29 +7051,29 @@ function_call_nonkeyword: a dedicated rule is needed here. */ function_call_conflict: - ASCII_SYM '(' expr ')' + ASCII_SYM '(' expr ')' { $$= new (YYTHD->mem_root) Item_func_ascii($3); } - | CHARSET '(' expr ')' - { $$= new (YYTHD->mem_root) Item_func_charset($3); } - | COALESCE '(' expr_list ')' - { $$= new (YYTHD->mem_root) Item_func_coalesce(* $3); } - | COLLATION_SYM '(' expr ')' - { $$= new (YYTHD->mem_root) Item_func_collation($3); } - | DATABASE '(' ')' - { - $$= new (YYTHD->mem_root) Item_func_database(); + | CHARSET '(' expr ')' + { $$= new (YYTHD->mem_root) Item_func_charset($3); } + | COALESCE '(' expr_list ')' + { $$= new (YYTHD->mem_root) Item_func_coalesce(* $3); } + | COLLATION_SYM '(' expr ')' + { $$= new (YYTHD->mem_root) Item_func_collation($3); } + | DATABASE '(' ')' + { + $$= new (YYTHD->mem_root) Item_func_database(); Lex->safe_to_cache_query=0; - } - | IF '(' expr ',' expr ',' expr ')' - { $$= new (YYTHD->mem_root) Item_func_if($3,$5,$7); } - | MICROSECOND_SYM '(' expr ')' - { $$= new (YYTHD->mem_root) Item_func_microsecond($3); } - | MOD_SYM '(' expr ',' expr ')' - { $$ = new (YYTHD->mem_root) Item_func_mod( $3, $5); } - | OLD_PASSWORD '(' expr ')' - { $$= new (YYTHD->mem_root) Item_func_old_password($3); } - | PASSWORD '(' expr ')' - { + } + | IF '(' expr ',' expr ',' expr ')' + { $$= new (YYTHD->mem_root) Item_func_if($3,$5,$7); } + | MICROSECOND_SYM '(' expr ')' + { $$= new (YYTHD->mem_root) Item_func_microsecond($3); } + | MOD_SYM '(' expr ',' expr ')' + { $$ = new (YYTHD->mem_root) Item_func_mod( $3, $5); } + | OLD_PASSWORD '(' expr ')' + { $$= new (YYTHD->mem_root) Item_func_old_password($3); } + | PASSWORD '(' expr ')' + { THD *thd= YYTHD; Item* i1; if (thd->variables.old_passwords) @@ -6780,17 +7081,17 @@ function_call_conflict: else i1= new (thd->mem_root) Item_func_password($3); $$= i1; - } - | QUARTER_SYM '(' expr ')' - { $$ = new (YYTHD->mem_root) Item_func_quarter($3); } - | REPEAT_SYM '(' expr ',' expr ')' - { $$= new (YYTHD->mem_root) Item_func_repeat($3,$5); } - | REPLACE '(' expr ',' expr ',' expr ')' - { $$= new (YYTHD->mem_root) Item_func_replace($3,$5,$7); } - | TRUNCATE_SYM '(' expr ',' expr ')' - { $$= new (YYTHD->mem_root) Item_func_round($3,$5,1); } - | WEEK_SYM '(' expr ')' - { + } + | QUARTER_SYM '(' expr ')' + { $$ = new (YYTHD->mem_root) Item_func_quarter($3); } + | REPEAT_SYM '(' expr ',' expr ')' + { $$= new (YYTHD->mem_root) Item_func_repeat($3,$5); } + | REPLACE '(' expr ',' expr ',' expr ')' + { $$= new (YYTHD->mem_root) Item_func_replace($3,$5,$7); } + | TRUNCATE_SYM '(' expr ',' expr ')' + { $$= new (YYTHD->mem_root) Item_func_round($3,$5,1); } + | WEEK_SYM '(' expr ')' + { THD *thd= YYTHD; Item *i1= new (thd->mem_root) Item_int((char*) "0", thd->variables.default_week_format, @@ -6798,8 +7099,8 @@ function_call_conflict: $$= new (thd->mem_root) Item_func_week($3, i1); } - | WEEK_SYM '(' expr ',' expr ')' - { $$= new (YYTHD->mem_root) Item_func_week($3,$5); } + | WEEK_SYM '(' expr ',' expr ')' + { $$= new (YYTHD->mem_root) Item_func_week($3,$5); } | geometry_function { #ifdef HAVE_SPATIAL @@ -6813,54 +7114,54 @@ function_call_conflict: ; geometry_function: - CONTAINS_SYM '(' expr ',' expr ')' - { + CONTAINS_SYM '(' expr ',' expr ')' + { $$= GEOM_NEW(YYTHD, Item_func_spatial_rel($3, $5, Item_func::SP_CONTAINS_FUNC)); } - | GEOMETRYCOLLECTION '(' expr_list ')' - { + | GEOMETRYCOLLECTION '(' expr_list ')' + { $$= GEOM_NEW(YYTHD, Item_func_spatial_collection(* $3, Geometry::wkb_geometrycollection, Geometry::wkb_point)); } - | LINESTRING '(' expr_list ')' - { + | LINESTRING '(' expr_list ')' + { $$= GEOM_NEW(YYTHD, Item_func_spatial_collection(* $3, Geometry::wkb_linestring, Geometry::wkb_point)); } - | MULTILINESTRING '(' expr_list ')' - { + | MULTILINESTRING '(' expr_list ')' + { $$= GEOM_NEW(YYTHD, Item_func_spatial_collection(* $3, Geometry::wkb_multilinestring, Geometry::wkb_linestring)); } - | MULTIPOINT '(' expr_list ')' - { + | MULTIPOINT '(' expr_list ')' + { $$= GEOM_NEW(YYTHD, Item_func_spatial_collection(* $3, Geometry::wkb_multipoint, Geometry::wkb_point)); } - | MULTIPOLYGON '(' expr_list ')' - { + | MULTIPOLYGON '(' expr_list ')' + { $$= GEOM_NEW(YYTHD, Item_func_spatial_collection(* $3, Geometry::wkb_multipolygon, Geometry::wkb_polygon)); } - | POINT_SYM '(' expr ',' expr ')' - { $$= GEOM_NEW(YYTHD, Item_func_point($3,$5)); } - | POLYGON '(' expr_list ')' - { + | POINT_SYM '(' expr ',' expr ')' + { $$= GEOM_NEW(YYTHD, Item_func_point($3,$5)); } + | POLYGON '(' expr_list ')' + { $$= GEOM_NEW(YYTHD, Item_func_spatial_collection(* $3, - Geometry::wkb_polygon, + Geometry::wkb_polygon, Geometry::wkb_linestring)); } ; @@ -6875,103 +7176,103 @@ geometry_function: in sql/item_create.cc */ function_call_generic: - IDENT_sys '(' - { -#ifdef HAVE_DLOPEN - udf_func *udf= 0; - LEX *lex= Lex; - if (using_udf_functions && - (udf= find_udf($1.str, $1.length)) && - udf->type == UDFTYPE_AGGREGATE) + IDENT_sys '(' { - if (lex->current_select->inc_in_sum_expr()) +#ifdef HAVE_DLOPEN + udf_func *udf= 0; + LEX *lex= Lex; + if (using_udf_functions && + (udf= find_udf($1.str, $1.length)) && + udf->type == UDFTYPE_AGGREGATE) + { + if (lex->current_select->inc_in_sum_expr()) + { + my_parse_error(ER(ER_SYNTAX_ERROR)); + MYSQL_YYABORT; + } + } + /* Temporary placing the result of find_udf in $3 */ + $$= udf; +#endif + } + udf_expr_list ')' + { + THD *thd= YYTHD; + Create_func *builder; + Item *item= NULL; + + /* + Implementation note: + names are resolved with the following order: + - MySQL native functions, + - User Defined Functions, + - Stored Functions (assuming the current database) + + This will be revised with WL#2128 (SQL PATH) + */ + builder= find_native_function_builder(thd, $1); + if (builder) + { + item= builder->create(thd, $1, $4); + } + else + { +#ifdef HAVE_DLOPEN + /* Retrieving the result of find_udf */ + udf_func *udf= $3; + + if (udf) + { + if (udf->type == UDFTYPE_AGGREGATE) + { + Select->in_sum_expr--; + } + + item= Create_udf_func::s_singleton.create(thd, udf, $4); + } + else +#endif + { + builder= find_qualified_function_builder(thd); + DBUG_ASSERT(builder); + item= builder->create(thd, $1, $4); + } + } + + if (! ($$= item)) { - my_parse_error(ER(ER_SYNTAX_ERROR)); MYSQL_YYABORT; } } - /* Temporary placing the result of find_udf in $3 */ - $$= udf; -#endif - } - udf_expr_list ')' - { - THD *thd= YYTHD; - Create_func *builder; - Item *item= NULL; - - /* - Implementation note: - names are resolved with the following order: - - MySQL native functions, - - User Defined Functions, - - Stored Functions (assuming the current database) - - This will be revised with WL#2128 (SQL PATH) - */ - builder= find_native_function_builder(thd, $1); - if (builder) + | ident '.' ident '(' opt_expr_list ')' { - item= builder->create(thd, $1, $4); - } - else - { -#ifdef HAVE_DLOPEN - /* Retrieving the result of find_udf */ - udf_func *udf= $3; + THD *thd= YYTHD; + Create_qfunc *builder; + Item *item= NULL; - if (udf) - { - if (udf->type == UDFTYPE_AGGREGATE) - { - Select->in_sum_expr--; - } + /* + The following in practice calls: + Create_sp_func::create() + and builds a stored function. - item= Create_udf_func::s_singleton.create(thd, udf, $4); - } - else -#endif + However, it's important to maintain the interface between the + parser and the implementation in item_create.cc clean, + since this will change with WL#2128 (SQL PATH): + - INFORMATION_SCHEMA.version() is the SQL 99 syntax for the native + function version(), + - MySQL.version() is the SQL 2003 syntax for the native function + version() (a vendor can specify any schema). + */ + + builder= find_qualified_function_builder(thd); + DBUG_ASSERT(builder); + item= builder->create(thd, $1, $3, true, $5); + + if (! ($$= item)) { - builder= find_qualified_function_builder(thd); - DBUG_ASSERT(builder); - item= builder->create(thd, $1, $4); + MYSQL_YYABORT; } } - - if (! ($$= item)) - { - MYSQL_YYABORT; - } - } - | ident '.' ident '(' opt_expr_list ')' - { - THD *thd= YYTHD; - Create_qfunc *builder; - Item *item= NULL; - - /* - The following in practice calls: - Create_sp_func::create() - and builds a stored function. - - However, it's important to maintain the interface between the - parser and the implementation in item_create.cc clean, - since this will change with WL#2128 (SQL PATH): - - INFORMATION_SCHEMA.version() is the SQL 99 syntax for the native - function version(), - - MySQL.version() is the SQL 2003 syntax for the native function - version() (a vendor can specify any schema). - */ - - builder= find_qualified_function_builder(thd); - DBUG_ASSERT(builder); - item= builder->create(thd, $1, $3, true, $5); - - if (! ($$= item)) - { - MYSQL_YYABORT; - } - } ; fulltext_options: @@ -6982,12 +7283,12 @@ fulltext_options: ; opt_natural_language_mode: - /* nothing */ { $$= FT_NL; } + /* nothing */ { $$= FT_NL; } | IN_SYM NATURAL LANGUAGE_SYM MODE_SYM { $$= FT_NL; } ; opt_query_expansion: - /* nothing */ { $$= 0; } + /* nothing */ { $$= 0; } | WITH QUERY_SYM EXPANSION_SYM { $$= FT_EXPAND; } ; @@ -7014,83 +7315,84 @@ udf_expr_list3: ; udf_expr: - remember_name expr remember_end select_alias - { - /* - Use Item::name as a storage for the attribute value of user - defined function argument. It is safe to use Item::name - because the syntax will not allow having an explicit name here. - See WL#1017 re. udf attributes. - */ - if ($4.str) + remember_name expr remember_end select_alias { - $2->is_autogenerated_name= FALSE; - $2->set_name($4.str, $4.length, system_charset_info); + /* + Use Item::name as a storage for the attribute value of user + defined function argument. It is safe to use Item::name + because the syntax will not allow having an explicit name here. + See WL#1017 re. udf attributes. + */ + if ($4.str) + { + $2->is_autogenerated_name= FALSE; + $2->set_name($4.str, $4.length, system_charset_info); + } + else + $2->set_name($1, (uint) ($3 - $1), YYTHD->charset()); + $$= $2; } - else - $2->set_name($1, (uint) ($3 - $1), YYTHD->charset()); - $$= $2; - } - ; + ; sum_expr: - AVG_SYM '(' in_sum_expr ')' - { $$=new Item_sum_avg($3); } - | AVG_SYM '(' DISTINCT in_sum_expr ')' - { $$=new Item_sum_avg_distinct($4); } - | BIT_AND '(' in_sum_expr ')' - { $$=new Item_sum_and($3); } - | BIT_OR '(' in_sum_expr ')' - { $$=new Item_sum_or($3); } - | BIT_XOR '(' in_sum_expr ')' - { $$=new Item_sum_xor($3); } - | COUNT_SYM '(' opt_all '*' ')' - { $$=new Item_sum_count(new Item_int((int32) 0L,1)); } - | COUNT_SYM '(' in_sum_expr ')' - { $$=new Item_sum_count($3); } - | COUNT_SYM '(' DISTINCT - { Select->in_sum_expr++; } - expr_list - { Select->in_sum_expr--; } - ')' - { $$=new Item_sum_count_distinct(* $5); } - | MIN_SYM '(' in_sum_expr ')' - { $$=new Item_sum_min($3); } -/* - According to ANSI SQL, DISTINCT is allowed and has - no sense inside MIN and MAX grouping functions; so MIN|MAX(DISTINCT ...) - is processed like an ordinary MIN | MAX() - */ - | MIN_SYM '(' DISTINCT in_sum_expr ')' - { $$=new Item_sum_min($4); } - | MAX_SYM '(' in_sum_expr ')' - { $$=new Item_sum_max($3); } - | MAX_SYM '(' DISTINCT in_sum_expr ')' - { $$=new Item_sum_max($4); } - | STD_SYM '(' in_sum_expr ')' - { $$=new Item_sum_std($3, 0); } - | VARIANCE_SYM '(' in_sum_expr ')' - { $$=new Item_sum_variance($3, 0); } - | STDDEV_SAMP_SYM '(' in_sum_expr ')' - { $$=new Item_sum_std($3, 1); } - | VAR_SAMP_SYM '(' in_sum_expr ')' - { $$=new Item_sum_variance($3, 1); } - | SUM_SYM '(' in_sum_expr ')' - { $$=new Item_sum_sum($3); } - | SUM_SYM '(' DISTINCT in_sum_expr ')' - { $$=new Item_sum_sum_distinct($4); } - | GROUP_CONCAT_SYM '(' opt_distinct - { Select->in_sum_expr++; } - expr_list opt_gorder_clause - opt_gconcat_separator - ')' - { + AVG_SYM '(' in_sum_expr ')' + { $$=new Item_sum_avg($3); } + | AVG_SYM '(' DISTINCT in_sum_expr ')' + { $$=new Item_sum_avg_distinct($4); } + | BIT_AND '(' in_sum_expr ')' + { $$=new Item_sum_and($3); } + | BIT_OR '(' in_sum_expr ')' + { $$=new Item_sum_or($3); } + | BIT_XOR '(' in_sum_expr ')' + { $$=new Item_sum_xor($3); } + | COUNT_SYM '(' opt_all '*' ')' + { $$=new Item_sum_count(new Item_int((int32) 0L,1)); } + | COUNT_SYM '(' in_sum_expr ')' + { $$=new Item_sum_count($3); } + | COUNT_SYM '(' DISTINCT + { Select->in_sum_expr++; } + expr_list + { Select->in_sum_expr--; } + ')' + { $$=new Item_sum_count_distinct(* $5); } + | MIN_SYM '(' in_sum_expr ')' + { $$=new Item_sum_min($3); } + /* + According to ANSI SQL, DISTINCT is allowed and has + no sense inside MIN and MAX grouping functions; so MIN|MAX(DISTINCT ...) + is processed like an ordinary MIN | MAX() + */ + | MIN_SYM '(' DISTINCT in_sum_expr ')' + { $$=new Item_sum_min($4); } + | MAX_SYM '(' in_sum_expr ')' + { $$=new Item_sum_max($3); } + | MAX_SYM '(' DISTINCT in_sum_expr ')' + { $$=new Item_sum_max($4); } + | STD_SYM '(' in_sum_expr ')' + { $$=new Item_sum_std($3, 0); } + | VARIANCE_SYM '(' in_sum_expr ')' + { $$=new Item_sum_variance($3, 0); } + | STDDEV_SAMP_SYM '(' in_sum_expr ')' + { $$=new Item_sum_std($3, 1); } + | VAR_SAMP_SYM '(' in_sum_expr ')' + { $$=new Item_sum_variance($3, 1); } + | SUM_SYM '(' in_sum_expr ')' + { $$=new Item_sum_sum($3); } + | SUM_SYM '(' DISTINCT in_sum_expr ')' + { $$=new Item_sum_sum_distinct($4); } + | GROUP_CONCAT_SYM '(' opt_distinct + { Select->in_sum_expr++; } + expr_list opt_gorder_clause + opt_gconcat_separator + ')' + { SELECT_LEX *sel= Select; - sel->in_sum_expr--; - $$=new Item_func_group_concat(Lex->current_context(), $3, $5, + sel->in_sum_expr--; + $$=new Item_func_group_concat(Lex->current_context(), $3, $5, sel->gorder_list, $7); - $5->empty(); - }; + $5->empty(); + } + ; variable: '@' @@ -7105,7 +7407,7 @@ variable: { $$= $3; } - ; + ; variable_aux: ident_or_text SET_VAR expr @@ -7133,66 +7435,79 @@ variable_aux: ; opt_distinct: - /* empty */ { $$ = 0; } - |DISTINCT { $$ = 1; }; + /* empty */ { $$ = 0; } + | DISTINCT { $$ = 1; } + ; opt_gconcat_separator: - /* empty */ - { - $$= new (YYTHD->mem_root) String(",", 1, &my_charset_latin1); - } - | SEPARATOR_SYM text_string { $$ = $2; }; - + /* empty */ + { + $$= new (YYTHD->mem_root) String(",", 1, &my_charset_latin1); + } + | SEPARATOR_SYM text_string { $$ = $2; } + ; opt_gorder_clause: - /* empty */ - { + /* empty */ + { Select->gorder_list = NULL; - } - | order_clause + } + | order_clause { SELECT_LEX *select= Select; select->gorder_list= - (SQL_LIST*) sql_memdup((char*) &select->order_list, - sizeof(st_sql_list)); - select->order_list.empty(); - }; - + (SQL_LIST*) sql_memdup((char*) &select->order_list, + sizeof(st_sql_list)); + select->order_list.empty(); + } + ; in_sum_expr: - opt_all - { - LEX *lex= Lex; - if (lex->current_select->inc_in_sum_expr()) - { - my_parse_error(ER(ER_SYNTAX_ERROR)); - MYSQL_YYABORT; - } - } - expr - { - Select->in_sum_expr--; - $$= $3; - }; + opt_all + { + LEX *lex= Lex; + if (lex->current_select->inc_in_sum_expr()) + { + my_parse_error(ER(ER_SYNTAX_ERROR)); + MYSQL_YYABORT; + } + } + expr + { + Select->in_sum_expr--; + $$= $3; + } + ; cast_type: - BINARY opt_len { $$=ITEM_CAST_CHAR; Lex->charset= &my_charset_bin; Lex->dec= 0; } - | CHAR_SYM opt_len opt_binary { $$=ITEM_CAST_CHAR; Lex->dec= 0; } - | NCHAR_SYM opt_len { $$=ITEM_CAST_CHAR; Lex->charset= national_charset_info; Lex->dec=0; } - | SIGNED_SYM { $$=ITEM_CAST_SIGNED_INT; Lex->charset= NULL; Lex->dec=Lex->length= (char*)0; } - | SIGNED_SYM INT_SYM { $$=ITEM_CAST_SIGNED_INT; Lex->charset= NULL; Lex->dec=Lex->length= (char*)0; } - | UNSIGNED { $$=ITEM_CAST_UNSIGNED_INT; Lex->charset= NULL; Lex->dec=Lex->length= (char*)0; } - | UNSIGNED INT_SYM { $$=ITEM_CAST_UNSIGNED_INT; Lex->charset= NULL; Lex->dec=Lex->length= (char*)0; } - | DATE_SYM { $$=ITEM_CAST_DATE; Lex->charset= NULL; Lex->dec=Lex->length= (char*)0; } - | TIME_SYM { $$=ITEM_CAST_TIME; Lex->charset= NULL; Lex->dec=Lex->length= (char*)0; } - | DATETIME { $$=ITEM_CAST_DATETIME; Lex->charset= NULL; Lex->dec=Lex->length= (char*)0; } - | DECIMAL_SYM float_options { $$=ITEM_CAST_DECIMAL; Lex->charset= NULL; } - ; + BINARY opt_len + { $$=ITEM_CAST_CHAR; Lex->charset= &my_charset_bin; Lex->dec= 0; } + | CHAR_SYM opt_len opt_binary + { $$=ITEM_CAST_CHAR; Lex->dec= 0; } + | NCHAR_SYM opt_len + { $$=ITEM_CAST_CHAR; Lex->charset= national_charset_info; Lex->dec=0; } + | SIGNED_SYM + { $$=ITEM_CAST_SIGNED_INT; Lex->charset= NULL; Lex->dec=Lex->length= (char*)0; } + | SIGNED_SYM INT_SYM + { $$=ITEM_CAST_SIGNED_INT; Lex->charset= NULL; Lex->dec=Lex->length= (char*)0; } + | UNSIGNED + { $$=ITEM_CAST_UNSIGNED_INT; Lex->charset= NULL; Lex->dec=Lex->length= (char*)0; } + | UNSIGNED INT_SYM + { $$=ITEM_CAST_UNSIGNED_INT; Lex->charset= NULL; Lex->dec=Lex->length= (char*)0; } + | DATE_SYM + { $$=ITEM_CAST_DATE; Lex->charset= NULL; Lex->dec=Lex->length= (char*)0; } + | TIME_SYM + { $$=ITEM_CAST_TIME; Lex->charset= NULL; Lex->dec=Lex->length= (char*)0; } + | DATETIME + { $$=ITEM_CAST_DATETIME; Lex->charset= NULL; Lex->dec=Lex->length= (char*)0; } + | DECIMAL_SYM float_options + { $$=ITEM_CAST_DECIMAL; Lex->charset= NULL; } + ; opt_expr_list: - /* empty */ { $$= NULL; } - | expr_list { $$= $1;} - ; + /* empty */ { $$= NULL; } + | expr_list { $$= $1;} + ; expr_list: { Select->expr_list.push_front(new List); } @@ -7205,7 +7520,8 @@ expr_list2: ident_list_arg: ident_list { $$= $1; } - | '(' ident_list ')' { $$= $2; }; + | '(' ident_list ')' { $$= $2; } + ; ident_list: { Select->expr_list.push_front(new List); } @@ -7217,12 +7533,14 @@ ident_list2: | ident_list2 ',' simple_ident { Select->expr_list.head()->push_back($3); }; opt_expr: - /* empty */ { $$= NULL; } - | expr { $$= $1; }; + /* empty */ { $$= NULL; } + | expr { $$= $1; } + ; opt_else: - /* empty */ { $$= NULL; } - | ELSE expr { $$= $2; }; + /* empty */ { $$= NULL; } + | ELSE expr { $$= $2; } + ; when_list: WHEN_SYM expr THEN_SYM expr @@ -7241,22 +7559,22 @@ when_list: /* Warning - may return NULL in case of incomplete SELECT */ table_ref: - table_factor { $$=$1; } + table_factor { $$=$1; } | join_table { - LEX *lex= Lex; + LEX *lex= Lex; if (!($$= lex->current_select->nest_last_join(lex->thd))) MYSQL_YYABORT; } ; join_table_list: - derived_table_list { MYSQL_YYABORT_UNLESS($$=$1); } - ; + derived_table_list { MYSQL_YYABORT_UNLESS($$=$1); } + ; /* Warning - may return NULL in case of incomplete SELECT */ derived_table_list: - table_ref { $$=$1; } + table_ref { $$=$1; } | derived_table_list ',' table_ref { MYSQL_YYABORT_UNLESS($1 && ($$=$3)); @@ -7271,17 +7589,17 @@ derived_table_list: and subsequent optimization phases. */ join_table: -/* INNER JOIN variants */ - /* - Use %prec to evaluate production 'table_ref' before 'normal_join' - so that [INNER | CROSS] JOIN is properly nested as other - left-associative joins. - */ - table_ref normal_join table_ref %prec TABLE_REF_PRIORITY + /* INNER JOIN variants */ + /* + Use %prec to evaluate production 'table_ref' before 'normal_join' + so that [INNER | CROSS] JOIN is properly nested as other + left-associative joins. + */ + table_ref normal_join table_ref %prec TABLE_REF_PRIORITY { MYSQL_YYABORT_UNLESS($1 && ($$=$3)); } - | table_ref STRAIGHT_JOIN table_factor - { MYSQL_YYABORT_UNLESS($1 && ($$=$3)); $3->straight=1; } - | table_ref normal_join table_ref + | table_ref STRAIGHT_JOIN table_factor + { MYSQL_YYABORT_UNLESS($1 && ($$=$3)); $3->straight=1; } + | table_ref normal_join table_ref ON { MYSQL_YYABORT_UNLESS($1 && $3); @@ -7291,7 +7609,7 @@ join_table: Select->parsing_place= IN_ON; } expr - { + { add_join_on($3,$6); Lex->pop_context(); Select->parsing_place= NO_MATTER; @@ -7312,21 +7630,21 @@ join_table: Lex->pop_context(); Select->parsing_place= NO_MATTER; } - | table_ref normal_join table_ref - USING - { + | table_ref normal_join table_ref + USING + { MYSQL_YYABORT_UNLESS($1 && $3); - } - '(' using_list ')' + } + '(' using_list ')' { add_join_natural($1,$3,$7,Select); $$=$3; } - | table_ref NATURAL JOIN_SYM table_factor - { + | table_ref NATURAL JOIN_SYM table_factor + { MYSQL_YYABORT_UNLESS($1 && ($$=$4)); add_join_natural($1,$4,NULL,Select); } -/* LEFT JOIN variants */ - | table_ref LEFT opt_outer JOIN_SYM table_ref + /* LEFT JOIN variants */ + | table_ref LEFT opt_outer JOIN_SYM table_ref ON { MYSQL_YYABORT_UNLESS($1 && $5); @@ -7336,33 +7654,33 @@ join_table: Select->parsing_place= IN_ON; } expr - { + { add_join_on($5,$8); Lex->pop_context(); $5->outer_join|=JOIN_TYPE_LEFT; $$=$5; Select->parsing_place= NO_MATTER; } - | table_ref LEFT opt_outer JOIN_SYM table_factor - { + | table_ref LEFT opt_outer JOIN_SYM table_factor + { MYSQL_YYABORT_UNLESS($1 && $5); - } - USING '(' using_list ')' + } + USING '(' using_list ')' { add_join_natural($1,$5,$9,Select); $5->outer_join|=JOIN_TYPE_LEFT; $$=$5; } - | table_ref NATURAL LEFT opt_outer JOIN_SYM table_factor - { + | table_ref NATURAL LEFT opt_outer JOIN_SYM table_factor + { MYSQL_YYABORT_UNLESS($1 && $6); - add_join_natural($1,$6,NULL,Select); - $6->outer_join|=JOIN_TYPE_LEFT; - $$=$6; - } + add_join_natural($1,$6,NULL,Select); + $6->outer_join|=JOIN_TYPE_LEFT; + $$=$6; + } -/* RIGHT JOIN variants */ - | table_ref RIGHT opt_outer JOIN_SYM table_ref + /* RIGHT JOIN variants */ + | table_ref RIGHT opt_outer JOIN_SYM table_ref ON { MYSQL_YYABORT_UNLESS($1 && $5); @@ -7373,55 +7691,56 @@ join_table: } expr { - LEX *lex= Lex; + LEX *lex= Lex; if (!($$= lex->current_select->convert_right_join())) MYSQL_YYABORT; add_join_on($$, $8); Lex->pop_context(); Select->parsing_place= NO_MATTER; } - | table_ref RIGHT opt_outer JOIN_SYM table_factor - { - MYSQL_YYABORT_UNLESS($1 && $5); - } - USING '(' using_list ')' + | table_ref RIGHT opt_outer JOIN_SYM table_factor { - LEX *lex= Lex; + MYSQL_YYABORT_UNLESS($1 && $5); + } + USING '(' using_list ')' + { + LEX *lex= Lex; if (!($$= lex->current_select->convert_right_join())) MYSQL_YYABORT; add_join_natural($$,$5,$9,Select); } - | table_ref NATURAL RIGHT opt_outer JOIN_SYM table_factor - { + | table_ref NATURAL RIGHT opt_outer JOIN_SYM table_factor + { MYSQL_YYABORT_UNLESS($1 && $6); - add_join_natural($6,$1,NULL,Select); - LEX *lex= Lex; + add_join_natural($6,$1,NULL,Select); + LEX *lex= Lex; if (!($$= lex->current_select->convert_right_join())) MYSQL_YYABORT; - }; + } + ; normal_join: - JOIN_SYM {} - | INNER_SYM JOIN_SYM {} - | CROSS JOIN_SYM {} - ; + JOIN_SYM {} + | INNER_SYM JOIN_SYM {} + | CROSS JOIN_SYM {} + ; /* Warning - may return NULL in case of incomplete SELECT */ table_factor: - { - SELECT_LEX *sel= Select; - sel->table_join_options= 0; - } - table_ident opt_table_alias opt_key_definition - { - if (!($$= Select->add_table_to_list(YYTHD, $2, $3, - Select->get_table_join_options(), - Lex->lock_option, - Select->pop_index_hints()))) - MYSQL_YYABORT; - Select->add_joined_table($$); - } - | '{' ident table_ref LEFT OUTER JOIN_SYM table_ref + { + SELECT_LEX *sel= Select; + sel->table_join_options= 0; + } + table_ident opt_table_alias opt_key_definition + { + if (!($$= Select->add_table_to_list(YYTHD, $2, $3, + Select->get_table_join_options(), + Lex->lock_option, + Select->pop_index_hints()))) + MYSQL_YYABORT; + Select->add_joined_table($$); + } + | '{' ident table_ref LEFT OUTER JOIN_SYM table_ref ON { /* Change the current name resolution context to a local context. */ @@ -7430,8 +7749,8 @@ table_factor: } expr '}' - { - LEX *lex= Lex; + { + LEX *lex= Lex; MYSQL_YYABORT_UNLESS($3 && $7); add_join_on($7,$10); Lex->pop_context(); @@ -7440,19 +7759,19 @@ table_factor: if (!($$= lex->current_select->nest_last_join(lex->thd))) MYSQL_YYABORT; } - | select_derived_init get_select_lex select_derived2 + | select_derived_init get_select_lex select_derived2 { LEX *lex= Lex; SELECT_LEX *sel= lex->current_select; if ($1) { - if (sel->set_braces(1)) - { + if (sel->set_braces(1)) + { my_parse_error(ER(ER_SYNTAX_ERROR)); - MYSQL_YYABORT; - } + MYSQL_YYABORT; + } /* select in braces, can't contain global parameters */ - if (sel->master_unit()->fake_select_lex) + if (sel->master_unit()->fake_select_lex) sel->master_unit()->global_parameters= sel->master_unit()->fake_select_lex; } @@ -7462,54 +7781,52 @@ table_factor: /* incomplete derived tables return NULL, we must be nested in select_derived rule to be here. */ } - | '(' get_select_lex select_derived union_opt ')' opt_table_alias - { - /* Use $2 instead of Lex->current_select as derived table will - alter value of Lex->current_select. */ - - if (!($3 || $6) && $2->embedding && - !$2->embedding->nested_join->join_list.elements) + | '(' get_select_lex select_derived union_opt ')' opt_table_alias { - /* we have a derived table ($3 == NULL) but no alias, - Since we are nested in further parentheses so we - can pass NULL to the outer level parentheses - Permits parsing of "((((select ...))) as xyz)" */ - $$= 0; - } - else - if (!$3) - { - /* Handle case of derived table, alias may be NULL if there - are no outer parentheses, add_table_to_list() will throw - error in this case */ - LEX *lex=Lex; - SELECT_LEX *sel= lex->current_select; - SELECT_LEX_UNIT *unit= sel->master_unit(); - lex->current_select= sel= unit->outer_select(); - if (!($$= sel-> - add_table_to_list(lex->thd, new Table_ident(unit), $6, 0, - TL_READ))) + /* Use $2 instead of Lex->current_select as derived table will + alter value of Lex->current_select. */ - MYSQL_YYABORT; - sel->add_joined_table($$); - lex->pop_context(); + if (!($3 || $6) && $2->embedding && + !$2->embedding->nested_join->join_list.elements) + { + /* we have a derived table ($3 == NULL) but no alias, + Since we are nested in further parentheses so we + can pass NULL to the outer level parentheses + Permits parsing of "((((select ...))) as xyz)" */ + $$= 0; + } + else if (!$3) + { + /* Handle case of derived table, alias may be NULL if there + are no outer parentheses, add_table_to_list() will throw + error in this case */ + LEX *lex=Lex; + SELECT_LEX *sel= lex->current_select; + SELECT_LEX_UNIT *unit= sel->master_unit(); + lex->current_select= sel= unit->outer_select(); + if (!($$= sel->add_table_to_list(lex->thd, + new Table_ident(unit), $6, 0, + TL_READ))) + + MYSQL_YYABORT; + sel->add_joined_table($$); + lex->pop_context(); + } + else if ($4 || $6) + { + /* simple nested joins cannot have aliases or unions */ + my_parse_error(ER(ER_SYNTAX_ERROR)); + MYSQL_YYABORT; + } + else + $$= $3; } - else - if ($4 || $6) - { - /* simple nested joins cannot have aliases or unions */ - my_parse_error(ER(ER_SYNTAX_ERROR)); - MYSQL_YYABORT; - } - else - $$= $3; - } ; /* handle contents of parentheses in join expression */ select_derived: - get_select_lex - { + get_select_lex + { LEX *lex= Lex; if ($1->init_nested_join(lex->thd)) MYSQL_YYABORT; @@ -7525,37 +7842,37 @@ select_derived: if (!$3 && $$) { my_parse_error(ER(ER_SYNTAX_ERROR)); - MYSQL_YYABORT; + MYSQL_YYABORT; } } - ; + ; select_derived2: - { - LEX *lex= Lex; - lex->derived_tables|= DERIVED_SUBQUERY; - if (!lex->expr_allows_subselect || - lex->sql_command == (int)SQLCOM_PURGE) - { - my_parse_error(ER(ER_SYNTAX_ERROR)); - MYSQL_YYABORT; - } - if (lex->current_select->linkage == GLOBAL_OPTIONS_TYPE || - mysql_new_select(lex, 1)) - MYSQL_YYABORT; - mysql_init_select(lex); - lex->current_select->linkage= DERIVED_TABLE_TYPE; - lex->current_select->parsing_place= SELECT_LIST; - } - select_options select_item_list - { - Select->parsing_place= NO_MATTER; - } - opt_select_from + { + LEX *lex= Lex; + lex->derived_tables|= DERIVED_SUBQUERY; + if (!lex->expr_allows_subselect || + lex->sql_command == (int)SQLCOM_PURGE) + { + my_parse_error(ER(ER_SYNTAX_ERROR)); + MYSQL_YYABORT; + } + if (lex->current_select->linkage == GLOBAL_OPTIONS_TYPE || + mysql_new_select(lex, 1)) + MYSQL_YYABORT; + mysql_init_select(lex); + lex->current_select->linkage= DERIVED_TABLE_TYPE; + lex->current_select->parsing_place= SELECT_LIST; + } + select_options select_item_list + { + Select->parsing_place= NO_MATTER; + } + opt_select_from ; get_select_lex: - /* Empty */ { $$= Select; } + /* Empty */ { $$= Select; } ; select_derived_init: @@ -7572,11 +7889,11 @@ select_derived_init: SELECT_LEX *sel= lex->current_select; TABLE_LIST *embedding; if (!sel->embedding || sel->end_nested_join(lex->thd)) - { + { /* we are not in parentheses */ my_parse_error(ER(ER_SYNTAX_ERROR)); - MYSQL_YYABORT; - } + MYSQL_YYABORT; + } embedding= Select->embedding; $$= embedding && !embedding->nested_join->join_list.elements; @@ -7585,226 +7902,231 @@ select_derived_init: ; opt_outer: - /* empty */ {} - | OUTER {}; + /* empty */ {} + | OUTER {} + ; index_hint_clause: - /* empty */ + /* empty */ { $$= global_system_variables.old_mode ? INDEX_HINT_MASK_JOIN : INDEX_HINT_MASK_ALL; - } - | FOR_SYM JOIN_SYM { $$= INDEX_HINT_MASK_JOIN; } - | FOR_SYM ORDER_SYM BY { $$= INDEX_HINT_MASK_ORDER; } - | FOR_SYM GROUP_SYM BY { $$= INDEX_HINT_MASK_GROUP; } - ; + } + | FOR_SYM JOIN_SYM { $$= INDEX_HINT_MASK_JOIN; } + | FOR_SYM ORDER_SYM BY { $$= INDEX_HINT_MASK_ORDER; } + | FOR_SYM GROUP_SYM BY { $$= INDEX_HINT_MASK_GROUP; } + ; index_hint_type: - FORCE_SYM { $$= INDEX_HINT_FORCE; } - | IGNORE_SYM { $$= INDEX_HINT_IGNORE; } - ; + FORCE_SYM { $$= INDEX_HINT_FORCE; } + | IGNORE_SYM { $$= INDEX_HINT_IGNORE; } + ; index_hint_definition: - index_hint_type key_or_index index_hint_clause + index_hint_type key_or_index index_hint_clause { - Select->set_index_hint_type($1, $3); - } - '(' key_usage_list ')' - | USE_SYM key_or_index index_hint_clause - { - Select->set_index_hint_type(INDEX_HINT_USE, $3); - } - '(' opt_key_usage_list ')' + Select->set_index_hint_type($1, $3); + } + '(' key_usage_list ')' + | USE_SYM key_or_index index_hint_clause + { + Select->set_index_hint_type(INDEX_HINT_USE, $3); + } + '(' opt_key_usage_list ')' ; index_hints_list: - index_hint_definition - | index_hints_list index_hint_definition - ; + index_hint_definition + | index_hints_list index_hint_definition + ; opt_index_hints_list: - /* empty */ - | { Select->alloc_index_hints(YYTHD); } index_hints_list - ; + /* empty */ + | { Select->alloc_index_hints(YYTHD); } index_hints_list + ; opt_key_definition: - { Select->clear_index_hints(); } - opt_index_hints_list - ; + { Select->clear_index_hints(); } + opt_index_hints_list + ; opt_key_usage_list: - /* empty */ { Select->add_index_hint(YYTHD, NULL, 0); } - | key_usage_list {} - ; + /* empty */ { Select->add_index_hint(YYTHD, NULL, 0); } + | key_usage_list {} + ; key_usage_element: - ident { Select->add_index_hint(YYTHD, $1.str, $1.length); } - | PRIMARY_SYM - { - Select->add_index_hint(YYTHD, (char *)"PRIMARY", 7); - } + ident + { Select->add_index_hint(YYTHD, $1.str, $1.length); } + | PRIMARY_SYM + { Select->add_index_hint(YYTHD, (char *)"PRIMARY", 7); } ; key_usage_list: - key_usage_element - | key_usage_list ',' key_usage_element + key_usage_element + | key_usage_list ',' key_usage_element ; using_list: - ident - { + ident + { if (!($$= new List)) - MYSQL_YYABORT; + MYSQL_YYABORT; $$->push_back(new (YYTHD->mem_root) String((const char *) $1.str, $1.length, system_charset_info)); - } - | using_list ',' ident - { + } + | using_list ',' ident + { $1->push_back(new (YYTHD->mem_root) String((const char *) $3.str, $3.length, system_charset_info)); $$= $1; - }; + } + ; interval: - interval_time_st {} - | DAY_HOUR_SYM { $$=INTERVAL_DAY_HOUR; } - | DAY_MICROSECOND_SYM { $$=INTERVAL_DAY_MICROSECOND; } - | DAY_MINUTE_SYM { $$=INTERVAL_DAY_MINUTE; } - | DAY_SECOND_SYM { $$=INTERVAL_DAY_SECOND; } - | HOUR_MICROSECOND_SYM { $$=INTERVAL_HOUR_MICROSECOND; } - | HOUR_MINUTE_SYM { $$=INTERVAL_HOUR_MINUTE; } - | HOUR_SECOND_SYM { $$=INTERVAL_HOUR_SECOND; } - | MICROSECOND_SYM { $$=INTERVAL_MICROSECOND; } - | MINUTE_MICROSECOND_SYM { $$=INTERVAL_MINUTE_MICROSECOND; } - | MINUTE_SECOND_SYM { $$=INTERVAL_MINUTE_SECOND; } - | SECOND_MICROSECOND_SYM { $$=INTERVAL_SECOND_MICROSECOND; } - | YEAR_MONTH_SYM { $$=INTERVAL_YEAR_MONTH; }; + interval_time_st {} + | DAY_HOUR_SYM { $$=INTERVAL_DAY_HOUR; } + | DAY_MICROSECOND_SYM { $$=INTERVAL_DAY_MICROSECOND; } + | DAY_MINUTE_SYM { $$=INTERVAL_DAY_MINUTE; } + | DAY_SECOND_SYM { $$=INTERVAL_DAY_SECOND; } + | HOUR_MICROSECOND_SYM { $$=INTERVAL_HOUR_MICROSECOND; } + | HOUR_MINUTE_SYM { $$=INTERVAL_HOUR_MINUTE; } + | HOUR_SECOND_SYM { $$=INTERVAL_HOUR_SECOND; } + | MICROSECOND_SYM { $$=INTERVAL_MICROSECOND; } + | MINUTE_MICROSECOND_SYM { $$=INTERVAL_MINUTE_MICROSECOND; } + | MINUTE_SECOND_SYM { $$=INTERVAL_MINUTE_SECOND; } + | SECOND_MICROSECOND_SYM { $$=INTERVAL_SECOND_MICROSECOND; } + | YEAR_MONTH_SYM { $$=INTERVAL_YEAR_MONTH; } + ; interval_time_st: - DAY_SYM { $$=INTERVAL_DAY; } - | WEEK_SYM { $$=INTERVAL_WEEK; } - | HOUR_SYM { $$=INTERVAL_HOUR; } - | FRAC_SECOND_SYM { $$=INTERVAL_MICROSECOND; } - | MINUTE_SYM { $$=INTERVAL_MINUTE; } - | MONTH_SYM { $$=INTERVAL_MONTH; } - | QUARTER_SYM { $$=INTERVAL_QUARTER; } - | SECOND_SYM { $$=INTERVAL_SECOND; } - | YEAR_SYM { $$=INTERVAL_YEAR; } + DAY_SYM { $$=INTERVAL_DAY; } + | WEEK_SYM { $$=INTERVAL_WEEK; } + | HOUR_SYM { $$=INTERVAL_HOUR; } + | FRAC_SECOND_SYM { $$=INTERVAL_MICROSECOND; } + | MINUTE_SYM { $$=INTERVAL_MINUTE; } + | MONTH_SYM { $$=INTERVAL_MONTH; } + | QUARTER_SYM { $$=INTERVAL_QUARTER; } + | SECOND_SYM { $$=INTERVAL_SECOND; } + | YEAR_SYM { $$=INTERVAL_YEAR; } ; date_time_type: - DATE_SYM {$$=MYSQL_TIMESTAMP_DATE;} - | TIME_SYM {$$=MYSQL_TIMESTAMP_TIME;} - | DATETIME {$$=MYSQL_TIMESTAMP_DATETIME;} - | TIMESTAMP {$$=MYSQL_TIMESTAMP_DATETIME;} + DATE_SYM {$$=MYSQL_TIMESTAMP_DATE;} + | TIME_SYM {$$=MYSQL_TIMESTAMP_TIME;} + | DATETIME {$$=MYSQL_TIMESTAMP_DATETIME;} + | TIMESTAMP {$$=MYSQL_TIMESTAMP_DATETIME;} ; table_alias: - /* empty */ - | AS - | EQ; + /* empty */ + | AS + | EQ + ; opt_table_alias: - /* empty */ { $$=0; } - | table_alias ident - { $$= (LEX_STRING*) sql_memdup(&$2,sizeof(LEX_STRING)); }; + /* empty */ { $$=0; } + | table_alias ident + { $$= (LEX_STRING*) sql_memdup(&$2,sizeof(LEX_STRING)); } + ; opt_all: - /* empty */ - | ALL - ; + /* empty */ + | ALL + ; where_clause: - /* empty */ { Select->where= 0; } - | WHERE + /* empty */ { Select->where= 0; } + | WHERE { Select->parsing_place= IN_WHERE; } expr - { + { SELECT_LEX *select= Select; - select->where= $3; + select->where= $3; select->parsing_place= NO_MATTER; - if ($3) - $3->top_level_item(); - } - ; + if ($3) + $3->top_level_item(); + } + ; having_clause: - /* empty */ - | HAVING - { - Select->parsing_place= IN_HAVING; + /* empty */ + | HAVING + { + Select->parsing_place= IN_HAVING; } - expr - { - SELECT_LEX *sel= Select; - sel->having= $3; - sel->parsing_place= NO_MATTER; - if ($3) - $3->top_level_item(); - } - ; + expr + { + SELECT_LEX *sel= Select; + sel->having= $3; + sel->parsing_place= NO_MATTER; + if ($3) + $3->top_level_item(); + } + ; opt_escape: - ESCAPE_SYM simple_expr + ESCAPE_SYM simple_expr { Lex->escape_used= TRUE; $$= $2; } - | /* empty */ + | /* empty */ { Lex->escape_used= FALSE; $$= ((YYTHD->variables.sql_mode & MODE_NO_BACKSLASH_ESCAPES) ? - new Item_string("", 0, &my_charset_latin1) : + new Item_string("", 0, &my_charset_latin1) : new Item_string("\\", 1, &my_charset_latin1)); } ; - /* group by statement in select */ group_clause: - /* empty */ - | GROUP_SYM BY group_list olap_opt; + /* empty */ + | GROUP_SYM BY group_list olap_opt + ; group_list: - group_list ',' order_ident order_dir - { if (add_group_to_list(YYTHD, $3,(bool) $4)) MYSQL_YYABORT; } - | order_ident order_dir - { if (add_group_to_list(YYTHD, $1,(bool) $2)) MYSQL_YYABORT; }; + group_list ',' order_ident order_dir + { if (add_group_to_list(YYTHD, $3,(bool) $4)) MYSQL_YYABORT; } + | order_ident order_dir + { if (add_group_to_list(YYTHD, $1,(bool) $2)) MYSQL_YYABORT; } + ; olap_opt: - /* empty */ {} - | WITH CUBE_SYM + /* empty */ {} + | WITH CUBE_SYM { - LEX *lex=Lex; - if (lex->current_select->linkage == GLOBAL_OPTIONS_TYPE) - { - my_error(ER_WRONG_USAGE, MYF(0), "WITH CUBE", - "global union parameters"); - MYSQL_YYABORT; - } - lex->current_select->olap= CUBE_TYPE; - my_error(ER_NOT_SUPPORTED_YET, MYF(0), "CUBE"); - MYSQL_YYABORT; /* To be deleted in 5.1 */ - } - | WITH ROLLUP_SYM + LEX *lex=Lex; + if (lex->current_select->linkage == GLOBAL_OPTIONS_TYPE) + { + my_error(ER_WRONG_USAGE, MYF(0), "WITH CUBE", + "global union parameters"); + MYSQL_YYABORT; + } + lex->current_select->olap= CUBE_TYPE; + my_error(ER_NOT_SUPPORTED_YET, MYF(0), "CUBE"); + MYSQL_YYABORT; /* To be deleted in 5.1 */ + } + | WITH ROLLUP_SYM { - LEX *lex= Lex; - if (lex->current_select->linkage == GLOBAL_OPTIONS_TYPE) - { - my_error(ER_WRONG_USAGE, MYF(0), "WITH ROLLUP", - "global union parameters"); - MYSQL_YYABORT; - } - lex->current_select->olap= ROLLUP_TYPE; - } - ; + LEX *lex= Lex; + if (lex->current_select->linkage == GLOBAL_OPTIONS_TYPE) + { + my_error(ER_WRONG_USAGE, MYF(0), "WITH ROLLUP", + "global union parameters"); + MYSQL_YYABORT; + } + lex->current_select->olap= ROLLUP_TYPE; + } + ; /* Order by statement in ALTER TABLE @@ -7834,166 +8156,172 @@ alter_order_item: */ opt_order_clause: - /* empty */ - | order_clause; + /* empty */ + | order_clause + ; order_clause: - ORDER_SYM BY - { - LEX *lex=Lex; - SELECT_LEX *sel= lex->current_select; - SELECT_LEX_UNIT *unit= sel-> master_unit(); - if (sel->linkage != GLOBAL_OPTIONS_TYPE && - sel->olap != UNSPECIFIED_OLAP_TYPE) - { - my_error(ER_WRONG_USAGE, MYF(0), - "CUBE/ROLLUP", "ORDER BY"); - MYSQL_YYABORT; - } - if (lex->sql_command != SQLCOM_ALTER_TABLE && !unit->fake_select_lex) + ORDER_SYM BY { - /* - A query of the of the form (SELECT ...) ORDER BY order_list is - executed in the same way as the query - SELECT ... ORDER BY order_list - unless the SELECT construct contains ORDER BY or LIMIT clauses. - Otherwise we create a fake SELECT_LEX if it has not been created - yet. - */ - SELECT_LEX *first_sl= unit->first_select(); - if (!unit->is_union() && - (first_sl->order_list.elements || - first_sl->select_limit) && - unit->add_fake_select_lex(lex->thd)) + LEX *lex=Lex; + SELECT_LEX *sel= lex->current_select; + SELECT_LEX_UNIT *unit= sel-> master_unit(); + if (sel->linkage != GLOBAL_OPTIONS_TYPE && + sel->olap != UNSPECIFIED_OLAP_TYPE) + { + my_error(ER_WRONG_USAGE, MYF(0), + "CUBE/ROLLUP", "ORDER BY"); MYSQL_YYABORT; + } + if (lex->sql_command != SQLCOM_ALTER_TABLE && !unit->fake_select_lex) + { + /* + A query of the of the form (SELECT ...) ORDER BY order_list is + executed in the same way as the query + SELECT ... ORDER BY order_list + unless the SELECT construct contains ORDER BY or LIMIT clauses. + Otherwise we create a fake SELECT_LEX if it has not been created + yet. + */ + SELECT_LEX *first_sl= unit->first_select(); + if (!unit->is_union() && + (first_sl->order_list.elements || + first_sl->select_limit) && + unit->add_fake_select_lex(lex->thd)) + MYSQL_YYABORT; + } } - } order_list; + order_list + ; order_list: - order_list ',' order_ident order_dir - { if (add_order_to_list(YYTHD, $3,(bool) $4)) MYSQL_YYABORT; } - | order_ident order_dir - { if (add_order_to_list(YYTHD, $1,(bool) $2)) MYSQL_YYABORT; }; + order_list ',' order_ident order_dir + { if (add_order_to_list(YYTHD, $3,(bool) $4)) MYSQL_YYABORT; } + | order_ident order_dir + { if (add_order_to_list(YYTHD, $1,(bool) $2)) MYSQL_YYABORT; } + ; order_dir: - /* empty */ { $$ = 1; } - | ASC { $$ =1; } - | DESC { $$ =0; }; - + /* empty */ { $$ = 1; } + | ASC { $$ =1; } + | DESC { $$ =0; } + ; opt_limit_clause_init: - /* empty */ - { - LEX *lex= Lex; - SELECT_LEX *sel= lex->current_select; - sel->offset_limit= 0; - sel->select_limit= 0; - } - | limit_clause {} - ; + /* empty */ + { + LEX *lex= Lex; + SELECT_LEX *sel= lex->current_select; + sel->offset_limit= 0; + sel->select_limit= 0; + } + | limit_clause {} + ; opt_limit_clause: - /* empty */ {} - | limit_clause {} - ; + /* empty */ {} + | limit_clause {} + ; limit_clause: - LIMIT limit_options {} - ; + LIMIT limit_options {} + ; limit_options: - limit_option - { + limit_option + { SELECT_LEX *sel= Select; sel->select_limit= $1; sel->offset_limit= 0; - sel->explicit_limit= 1; - } - | limit_option ',' limit_option - { - SELECT_LEX *sel= Select; - sel->select_limit= $3; - sel->offset_limit= $1; - sel->explicit_limit= 1; - } - | limit_option OFFSET_SYM limit_option - { - SELECT_LEX *sel= Select; - sel->select_limit= $1; - sel->offset_limit= $3; - sel->explicit_limit= 1; - } - ; + sel->explicit_limit= 1; + } + | limit_option ',' limit_option + { + SELECT_LEX *sel= Select; + sel->select_limit= $3; + sel->offset_limit= $1; + sel->explicit_limit= 1; + } + | limit_option OFFSET_SYM limit_option + { + SELECT_LEX *sel= Select; + sel->select_limit= $1; + sel->offset_limit= $3; + sel->explicit_limit= 1; + } + ; + limit_option: - param_marker - { - ((Item_param *) $1)->set_strict_type(INT_RESULT); - } + param_marker + { + ((Item_param *) $1)->set_strict_type(INT_RESULT); + } | ULONGLONG_NUM { $$= new Item_uint($1.str, $1.length); } - | LONG_NUM { $$= new Item_uint($1.str, $1.length); } + | LONG_NUM { $$= new Item_uint($1.str, $1.length); } | NUM { $$= new Item_uint($1.str, $1.length); } ; delete_limit_clause: - /* empty */ - { - LEX *lex=Lex; - lex->current_select->select_limit= 0; - } - | LIMIT limit_option - { - SELECT_LEX *sel= Select; - sel->select_limit= $2; - sel->explicit_limit= 1; - }; + /* empty */ + { + LEX *lex=Lex; + lex->current_select->select_limit= 0; + } + | LIMIT limit_option + { + SELECT_LEX *sel= Select; + sel->select_limit= $2; + sel->explicit_limit= 1; + } + ; ulong_num: NUM { int error; $$= (ulong) my_strtoll10($1.str, (char**) 0, &error); } - | HEX_NUM { $$= (ulong) strtol($1.str, (char**) 0, 16); } - | LONG_NUM { int error; $$= (ulong) my_strtoll10($1.str, (char**) 0, &error); } - | ULONGLONG_NUM { int error; $$= (ulong) my_strtoll10($1.str, (char**) 0, &error); } + | HEX_NUM { $$= (ulong) strtol($1.str, (char**) 0, 16); } + | LONG_NUM { int error; $$= (ulong) my_strtoll10($1.str, (char**) 0, &error); } + | ULONGLONG_NUM { int error; $$= (ulong) my_strtoll10($1.str, (char**) 0, &error); } | DECIMAL_NUM { int error; $$= (ulong) my_strtoll10($1.str, (char**) 0, &error); } - | FLOAT_NUM { int error; $$= (ulong) my_strtoll10($1.str, (char**) 0, &error); } + | FLOAT_NUM { int error; $$= (ulong) my_strtoll10($1.str, (char**) 0, &error); } ; real_ulong_num: NUM { int error; $$= (ulong) my_strtoll10($1.str, (char**) 0, &error); } - | HEX_NUM { $$= (ulong) strtol($1.str, (char**) 0, 16); } - | LONG_NUM { int error; $$= (ulong) my_strtoll10($1.str, (char**) 0, &error); } - | ULONGLONG_NUM { int error; $$= (ulong) my_strtoll10($1.str, (char**) 0, &error); } + | HEX_NUM { $$= (ulong) strtol($1.str, (char**) 0, 16); } + | LONG_NUM { int error; $$= (ulong) my_strtoll10($1.str, (char**) 0, &error); } + | ULONGLONG_NUM { int error; $$= (ulong) my_strtoll10($1.str, (char**) 0, &error); } | dec_num_error { MYSQL_YYABORT; } ; ulonglong_num: - NUM { int error; $$= (ulonglong) my_strtoll10($1.str, (char**) 0, &error); } - | ULONGLONG_NUM { int error; $$= (ulonglong) my_strtoll10($1.str, (char**) 0, &error); } - | LONG_NUM { int error; $$= (ulonglong) my_strtoll10($1.str, (char**) 0, &error); } - | DECIMAL_NUM { int error; $$= (ulonglong) my_strtoll10($1.str, (char**) 0, &error); } - | FLOAT_NUM { int error; $$= (ulonglong) my_strtoll10($1.str, (char**) 0, &error); } - ; + NUM { int error; $$= (ulonglong) my_strtoll10($1.str, (char**) 0, &error); } + | ULONGLONG_NUM { int error; $$= (ulonglong) my_strtoll10($1.str, (char**) 0, &error); } + | LONG_NUM { int error; $$= (ulonglong) my_strtoll10($1.str, (char**) 0, &error); } + | DECIMAL_NUM { int error; $$= (ulonglong) my_strtoll10($1.str, (char**) 0, &error); } + | FLOAT_NUM { int error; $$= (ulonglong) my_strtoll10($1.str, (char**) 0, &error); } + ; real_ulonglong_num: - NUM { int error; $$= (ulonglong) my_strtoll10($1.str, (char**) 0, &error); } - | ULONGLONG_NUM { int error; $$= (ulonglong) my_strtoll10($1.str, (char**) 0, &error); } - | LONG_NUM { int error; $$= (ulonglong) my_strtoll10($1.str, (char**) 0, &error); } + NUM { int error; $$= (ulonglong) my_strtoll10($1.str, (char**) 0, &error); } + | ULONGLONG_NUM { int error; $$= (ulonglong) my_strtoll10($1.str, (char**) 0, &error); } + | LONG_NUM { int error; $$= (ulonglong) my_strtoll10($1.str, (char**) 0, &error); } | dec_num_error { MYSQL_YYABORT; } ; dec_num_error: - dec_num - { my_parse_error(ER(ER_ONLY_INTEGERS_ALLOWED)); } + dec_num + { my_parse_error(ER(ER_ONLY_INTEGERS_ALLOWED)); } ; dec_num: - DECIMAL_NUM - | FLOAT_NUM + DECIMAL_NUM + | FLOAT_NUM ; procedure_clause: - /* empty */ - | PROCEDURE ident /* Procedure name */ - { - LEX *lex=Lex; + /* empty */ + | PROCEDURE ident /* Procedure name */ + { + LEX *lex=Lex; if (! lex->parsing_options.allows_select_procedure) { @@ -8001,225 +8329,227 @@ procedure_clause: MYSQL_YYABORT; } - if (&lex->select_lex != lex->current_select) - { - my_error(ER_WRONG_USAGE, MYF(0), "PROCEDURE", "subquery"); - MYSQL_YYABORT; - } - lex->proc_list.elements=0; - lex->proc_list.first=0; - lex->proc_list.next= (uchar**) &lex->proc_list.first; - if (add_proc_to_list(lex->thd, new Item_field(&lex-> + if (&lex->select_lex != lex->current_select) + { + my_error(ER_WRONG_USAGE, MYF(0), "PROCEDURE", "subquery"); + MYSQL_YYABORT; + } + lex->proc_list.elements=0; + lex->proc_list.first=0; + lex->proc_list.next= (uchar**) &lex->proc_list.first; + if (add_proc_to_list(lex->thd, new Item_field(&lex-> current_select-> context, NULL,NULL,$2.str))) - MYSQL_YYABORT; - Lex->uncacheable(UNCACHEABLE_SIDEEFFECT); - } - '(' procedure_list ')'; - + MYSQL_YYABORT; + Lex->uncacheable(UNCACHEABLE_SIDEEFFECT); + } + '(' procedure_list ')' + ; procedure_list: - /* empty */ {} - | procedure_list2 {}; + /* empty */ {} + | procedure_list2 {} + ; procedure_list2: - procedure_list2 ',' procedure_item - | procedure_item; + procedure_list2 ',' procedure_item + | procedure_item + ; procedure_item: - remember_name expr remember_end - { + remember_name expr remember_end + { THD *thd= YYTHD; - if (add_proc_to_list(thd, $2)) - MYSQL_YYABORT; - if (!$2->name) + if (add_proc_to_list(thd, $2)) + MYSQL_YYABORT; + if (!$2->name) $2->set_name($1, (uint) ($3 - $1), thd->charset()); - } - ; - + } + ; select_var_list_init: - { - LEX *lex=Lex; - if (!lex->describe && (!(lex->result= new select_dumpvar()))) - MYSQL_YYABORT; - } - select_var_list - {} - ; + { + LEX *lex=Lex; + if (!lex->describe && (!(lex->result= new select_dumpvar()))) + MYSQL_YYABORT; + } + select_var_list + {} + ; select_var_list: - select_var_list ',' select_var_ident - | select_var_ident {} - ; + select_var_list ',' select_var_ident + | select_var_ident {} + ; select_var_ident: - '@' ident_or_text - { - LEX *lex=Lex; - if (lex->result) - ((select_dumpvar *)lex->result)->var_list.push_back( new my_var($2,0,0,(enum_field_types)0)); - else - /* - The parser won't create select_result instance only - if it's an EXPLAIN. - */ - DBUG_ASSERT(lex->describe); - } - | ident_or_text - { - LEX *lex=Lex; - sp_variable_t *t; + '@' ident_or_text + { + LEX *lex=Lex; + if (lex->result) + ((select_dumpvar *)lex->result)->var_list.push_back( new my_var($2,0,0,(enum_field_types)0)); + else + /* + The parser won't create select_result instance only + if it's an EXPLAIN. + */ + DBUG_ASSERT(lex->describe); + } + | ident_or_text + { + LEX *lex=Lex; + sp_variable_t *t; - if (!lex->spcont || !(t=lex->spcont->find_variable(&$1))) - { - my_error(ER_SP_UNDECLARED_VAR, MYF(0), $1.str); - MYSQL_YYABORT; - } - if (lex->result) - { - my_var *var; - ((select_dumpvar *)lex->result)-> - var_list.push_back(var= new my_var($1,1,t->offset,t->type)); + if (!lex->spcont || !(t=lex->spcont->find_variable(&$1))) + { + my_error(ER_SP_UNDECLARED_VAR, MYF(0), $1.str); + MYSQL_YYABORT; + } + if (lex->result) + { + my_var *var; + ((select_dumpvar *)lex->result)-> + var_list.push_back(var= new my_var($1,1,t->offset,t->type)); #ifndef DBUG_OFF - if (var) - var->sp= lex->sphead; + if (var) + var->sp= lex->sphead; #endif - } - else - { - /* - The parser won't create select_result instance only - if it's an EXPLAIN. - */ - DBUG_ASSERT(lex->describe); - } - } - ; + } + else + { + /* + The parser won't create select_result instance only + if it's an EXPLAIN. + */ + DBUG_ASSERT(lex->describe); + } + } + ; into: - INTO - { - if (! Lex->parsing_options.allows_select_into) + INTO { - my_error(ER_VIEW_SELECT_CLAUSE, MYF(0), "INTO"); - MYSQL_YYABORT; + if (! Lex->parsing_options.allows_select_into) + { + my_error(ER_VIEW_SELECT_CLAUSE, MYF(0), "INTO"); + MYSQL_YYABORT; + } } - } - into_destination + into_destination ; into_destination: - OUTFILE TEXT_STRING_filesystem - { - LEX *lex= Lex; - lex->uncacheable(UNCACHEABLE_SIDEEFFECT); - if (!(lex->exchange= new sql_exchange($2.str, 0)) || - !(lex->result= new select_export(lex->exchange))) - MYSQL_YYABORT; - } - opt_field_term opt_line_term - | DUMPFILE TEXT_STRING_filesystem - { - LEX *lex=Lex; - if (!lex->describe) - { - lex->uncacheable(UNCACHEABLE_SIDEEFFECT); - if (!(lex->exchange= new sql_exchange($2.str,1))) - MYSQL_YYABORT; - if (!(lex->result= new select_dump(lex->exchange))) - MYSQL_YYABORT; - } - } + OUTFILE TEXT_STRING_filesystem + { + LEX *lex= Lex; + lex->uncacheable(UNCACHEABLE_SIDEEFFECT); + if (!(lex->exchange= new sql_exchange($2.str, 0)) || + !(lex->result= new select_export(lex->exchange))) + MYSQL_YYABORT; + } + opt_field_term opt_line_term + | DUMPFILE TEXT_STRING_filesystem + { + LEX *lex=Lex; + if (!lex->describe) + { + lex->uncacheable(UNCACHEABLE_SIDEEFFECT); + if (!(lex->exchange= new sql_exchange($2.str,1))) + MYSQL_YYABORT; + if (!(lex->result= new select_dump(lex->exchange))) + MYSQL_YYABORT; + } + } | select_var_list_init - { - Lex->uncacheable(UNCACHEABLE_SIDEEFFECT); - } + { + Lex->uncacheable(UNCACHEABLE_SIDEEFFECT); + } ; /* DO statement */ -do: DO_SYM - { - LEX *lex=Lex; - lex->sql_command = SQLCOM_DO; - mysql_init_select(lex); - } - expr_list - { - Lex->insert_list= $3; - } - ; +do: + DO_SYM + { + LEX *lex=Lex; + lex->sql_command = SQLCOM_DO; + mysql_init_select(lex); + } + expr_list + { + Lex->insert_list= $3; + } + ; /* Drop : delete tables or index or user */ drop: - DROP opt_temporary table_or_tables if_exists table_list opt_restrict - { - LEX *lex=Lex; - lex->sql_command = SQLCOM_DROP_TABLE; - lex->drop_temporary= $2; - lex->drop_if_exists= $4; - } - | DROP INDEX_SYM ident ON table_ident {} - { - LEX *lex=Lex; - lex->sql_command= SQLCOM_DROP_INDEX; - lex->alter_info.reset(); - lex->alter_info.flags= ALTER_DROP_INDEX; - lex->alter_info.drop_list.push_back(new Alter_drop(Alter_drop::KEY, - $3.str)); - if (!lex->current_select->add_table_to_list(lex->thd, $5, NULL, - TL_OPTION_UPDATING)) - MYSQL_YYABORT; - } - | DROP DATABASE if_exists ident - { - LEX *lex=Lex; - lex->sql_command= SQLCOM_DROP_DB; - lex->drop_if_exists=$3; - lex->name= $4; - } - | DROP FUNCTION_SYM if_exists sp_name - { - LEX *lex=Lex; - if (lex->sphead) - { - my_error(ER_SP_NO_DROP_SP, MYF(0), "FUNCTION"); - MYSQL_YYABORT; - } - lex->sql_command = SQLCOM_DROP_FUNCTION; - lex->drop_if_exists= $3; - lex->spname= $4; - } - | DROP PROCEDURE if_exists sp_name - { - LEX *lex=Lex; - if (lex->sphead) - { - my_error(ER_SP_NO_DROP_SP, MYF(0), "PROCEDURE"); - MYSQL_YYABORT; - } - lex->sql_command = SQLCOM_DROP_PROCEDURE; - lex->drop_if_exists= $3; - lex->spname= $4; - } - | DROP USER clear_privileges user_list - { - Lex->sql_command = SQLCOM_DROP_USER; + DROP opt_temporary table_or_tables if_exists table_list opt_restrict + { + LEX *lex=Lex; + lex->sql_command = SQLCOM_DROP_TABLE; + lex->drop_temporary= $2; + lex->drop_if_exists= $4; + } + | DROP INDEX_SYM ident ON table_ident {} + { + LEX *lex=Lex; + lex->sql_command= SQLCOM_DROP_INDEX; + lex->alter_info.reset(); + lex->alter_info.flags= ALTER_DROP_INDEX; + lex->alter_info.drop_list.push_back(new Alter_drop(Alter_drop::KEY, + $3.str)); + if (!lex->current_select->add_table_to_list(lex->thd, $5, NULL, + TL_OPTION_UPDATING)) + MYSQL_YYABORT; + } + | DROP DATABASE if_exists ident + { + LEX *lex=Lex; + lex->sql_command= SQLCOM_DROP_DB; + lex->drop_if_exists=$3; + lex->name= $4; + } + | DROP FUNCTION_SYM if_exists sp_name + { + LEX *lex=Lex; + if (lex->sphead) + { + my_error(ER_SP_NO_DROP_SP, MYF(0), "FUNCTION"); + MYSQL_YYABORT; + } + lex->sql_command = SQLCOM_DROP_FUNCTION; + lex->drop_if_exists= $3; + lex->spname= $4; + } + | DROP PROCEDURE if_exists sp_name + { + LEX *lex=Lex; + if (lex->sphead) + { + my_error(ER_SP_NO_DROP_SP, MYF(0), "PROCEDURE"); + MYSQL_YYABORT; + } + lex->sql_command = SQLCOM_DROP_PROCEDURE; + lex->drop_if_exists= $3; + lex->spname= $4; + } + | DROP USER clear_privileges user_list + { + Lex->sql_command = SQLCOM_DROP_USER; + } + | DROP VIEW_SYM if_exists table_list opt_restrict + { + LEX *lex= Lex; + lex->sql_command= SQLCOM_DROP_VIEW; + lex->drop_if_exists= $3; } - | DROP VIEW_SYM if_exists table_list opt_restrict - { - LEX *lex= Lex; - lex->sql_command= SQLCOM_DROP_VIEW; - lex->drop_if_exists= $3; - } | DROP EVENT_SYM if_exists sp_name { Lex->drop_if_exists= $3; @@ -8232,7 +8562,7 @@ drop: lex->sql_command= SQLCOM_DROP_TRIGGER; lex->drop_if_exists= $3; lex->spname= $4; - } + } | DROP TABLESPACE tablespace_name opt_ts_engine opt_ts_wait { LEX *lex= Lex; @@ -8242,79 +8572,81 @@ drop: { LEX *lex= Lex; lex->alter_tablespace_info->ts_cmd_type= DROP_LOGFILE_GROUP; - } + } | DROP SERVER_SYM if_exists ident_or_text - { - Lex->sql_command = SQLCOM_DROP_SERVER; - Lex->drop_if_exists= $3; - Lex->server_options.server_name= $4.str; - Lex->server_options.server_name_length= $4.length; - } - ; + { + Lex->sql_command = SQLCOM_DROP_SERVER; + Lex->drop_if_exists= $3; + Lex->server_options.server_name= $4.str; + Lex->server_options.server_name_length= $4.length; + } + ; table_list: - table_name - | table_list ',' table_name; + table_name + | table_list ',' table_name + ; table_name: - table_ident - { - if (!Select->add_table_to_list(YYTHD, $1, NULL, TL_OPTION_UPDATING)) - MYSQL_YYABORT; - } - ; + table_ident + { + if (!Select->add_table_to_list(YYTHD, $1, NULL, TL_OPTION_UPDATING)) + MYSQL_YYABORT; + } + ; if_exists: - /* empty */ { $$= 0; } - | IF EXISTS { $$= 1; } - ; + /* empty */ { $$= 0; } + | IF EXISTS { $$= 1; } + ; opt_temporary: - /* empty */ { $$= 0; } - | TEMPORARY { $$= 1; } - ; + /* empty */ { $$= 0; } + | TEMPORARY { $$= 1; } + ; /* ** Insert : add new data to table */ insert: - INSERT - { - LEX *lex= Lex; - lex->sql_command= SQLCOM_INSERT; - lex->duplicates= DUP_ERROR; - mysql_init_select(lex); - /* for subselects */ - lex->lock_option= (using_update_log) ? TL_READ_NO_INSERT : TL_READ; - } insert_lock_option - opt_ignore insert2 - { - Select->set_lock_for_tables($3); - Lex->current_select= &Lex->select_lex; - } - insert_field_spec opt_insert_update - {} - ; + INSERT + { + LEX *lex= Lex; + lex->sql_command= SQLCOM_INSERT; + lex->duplicates= DUP_ERROR; + mysql_init_select(lex); + /* for subselects */ + lex->lock_option= (using_update_log) ? TL_READ_NO_INSERT : TL_READ; + } + insert_lock_option + opt_ignore insert2 + { + Select->set_lock_for_tables($3); + Lex->current_select= &Lex->select_lex; + } + insert_field_spec opt_insert_update + {} + ; replace: - REPLACE - { - LEX *lex=Lex; - lex->sql_command = SQLCOM_REPLACE; - lex->duplicates= DUP_REPLACE; - mysql_init_select(lex); - } - replace_lock_option insert2 - { - Select->set_lock_for_tables($3); - Lex->current_select= &Lex->select_lex; - } - insert_field_spec - {} - ; + REPLACE + { + LEX *lex=Lex; + lex->sql_command = SQLCOM_REPLACE; + lex->duplicates= DUP_REPLACE; + mysql_init_select(lex); + } + replace_lock_option insert2 + { + Select->set_lock_for_tables($3); + Lex->current_select= &Lex->select_lex; + } + insert_field_spec + {} + ; insert_lock_option: - /* empty */ + /* empty */ { #ifdef HAVE_QUERY_CACHE /* @@ -8327,298 +8659,321 @@ insert_lock_option: $$= TL_WRITE_CONCURRENT_INSERT; #endif } - | LOW_PRIORITY { $$= TL_WRITE_LOW_PRIORITY; } - | DELAYED_SYM { $$= TL_WRITE_DELAYED; } - | HIGH_PRIORITY { $$= TL_WRITE; } - ; + | LOW_PRIORITY { $$= TL_WRITE_LOW_PRIORITY; } + | DELAYED_SYM { $$= TL_WRITE_DELAYED; } + | HIGH_PRIORITY { $$= TL_WRITE; } + ; replace_lock_option: - opt_low_priority { $$= $1; } - | DELAYED_SYM { $$= TL_WRITE_DELAYED; }; + opt_low_priority { $$= $1; } + | DELAYED_SYM { $$= TL_WRITE_DELAYED; } + ; insert2: - INTO insert_table {} - | insert_table {}; + INTO insert_table {} + | insert_table {} + ; insert_table: - table_name - { - LEX *lex=Lex; - lex->field_list.empty(); - lex->many_values.empty(); - lex->insert_list=0; - }; + table_name + { + LEX *lex=Lex; + lex->field_list.empty(); + lex->many_values.empty(); + lex->insert_list=0; + }; insert_field_spec: - insert_values {} - | '(' ')' insert_values {} - | '(' fields ')' insert_values {} - | SET - { - LEX *lex=Lex; - if (!(lex->insert_list = new List_item) || - lex->many_values.push_back(lex->insert_list)) - MYSQL_YYABORT; - } - ident_eq_list; + insert_values {} + | '(' ')' insert_values {} + | '(' fields ')' insert_values {} + | SET + { + LEX *lex=Lex; + if (!(lex->insert_list = new List_item) || + lex->many_values.push_back(lex->insert_list)) + MYSQL_YYABORT; + } + ident_eq_list + ; fields: - fields ',' insert_ident { Lex->field_list.push_back($3); } - | insert_ident { Lex->field_list.push_back($1); }; + fields ',' insert_ident { Lex->field_list.push_back($3); } + | insert_ident { Lex->field_list.push_back($1); } + ; insert_values: - VALUES values_list {} - | VALUE_SYM values_list {} - | create_select { Select->set_braces(0);} union_clause {} - | '(' create_select ')' { Select->set_braces(1);} union_opt {} + VALUES values_list {} + | VALUE_SYM values_list {} + | create_select + { Select->set_braces(0);} + union_clause {} + | '(' create_select ')' + { Select->set_braces(1);} + union_opt {} ; values_list: - values_list ',' no_braces - | no_braces; + values_list ',' no_braces + | no_braces + ; ident_eq_list: - ident_eq_list ',' ident_eq_value - | - ident_eq_value; + ident_eq_list ',' ident_eq_value + | ident_eq_value + ; ident_eq_value: - simple_ident_nospvar equal expr_or_default - { - LEX *lex=Lex; - if (lex->field_list.push_back($1) || - lex->insert_list->push_back($3)) - MYSQL_YYABORT; - }; + simple_ident_nospvar equal expr_or_default + { + LEX *lex=Lex; + if (lex->field_list.push_back($1) || + lex->insert_list->push_back($3)) + MYSQL_YYABORT; + } + ; -equal: EQ {} - | SET_VAR {} - ; +equal: + EQ {} + | SET_VAR {} + ; opt_equal: - /* empty */ {} - | equal {} - ; + /* empty */ {} + | equal {} + ; no_braces: - '(' - { - if (!(Lex->insert_list = new List_item)) - MYSQL_YYABORT; - } - opt_values ')' - { - LEX *lex=Lex; - if (lex->many_values.push_back(lex->insert_list)) - MYSQL_YYABORT; - }; + '(' + { + if (!(Lex->insert_list = new List_item)) + MYSQL_YYABORT; + } + opt_values ')' + { + LEX *lex=Lex; + if (lex->many_values.push_back(lex->insert_list)) + MYSQL_YYABORT; + } + ; opt_values: - /* empty */ {} - | values; + /* empty */ {} + | values + ; values: - values ',' expr_or_default - { - if (Lex->insert_list->push_back($3)) - MYSQL_YYABORT; - } - | expr_or_default - { - if (Lex->insert_list->push_back($1)) - MYSQL_YYABORT; - } - ; + values ',' expr_or_default + { + if (Lex->insert_list->push_back($3)) + MYSQL_YYABORT; + } + | expr_or_default + { + if (Lex->insert_list->push_back($1)) + MYSQL_YYABORT; + } + ; expr_or_default: - expr { $$= $1;} - | DEFAULT {$$= new Item_default_value(Lex->current_context()); } - ; + expr { $$= $1;} + | DEFAULT {$$= new Item_default_value(Lex->current_context()); } + ; opt_insert_update: - /* empty */ - | ON DUPLICATE_SYM { Lex->duplicates= DUP_UPDATE; } + /* empty */ + | ON DUPLICATE_SYM { Lex->duplicates= DUP_UPDATE; } KEY_SYM UPDATE_SYM insert_update_list ; /* Update rows in a table */ update: - UPDATE_SYM - { - LEX *lex= Lex; - mysql_init_select(lex); - lex->sql_command= SQLCOM_UPDATE; - lex->lock_option= TL_UNLOCK; /* Will be set later */ - lex->duplicates= DUP_ERROR; - } - opt_low_priority opt_ignore join_table_list - SET update_list - { - LEX *lex= Lex; - if (lex->select_lex.table_list.elements > 1) - lex->sql_command= SQLCOM_UPDATE_MULTI; - else if (lex->select_lex.get_table_list()->derived) - { - /* it is single table update and it is update of derived table */ - my_error(ER_NON_UPDATABLE_TABLE, MYF(0), - lex->select_lex.get_table_list()->alias, "UPDATE"); - MYSQL_YYABORT; - } - /* - In case of multi-update setting write lock for all tables may - be too pessimistic. We will decrease lock level if possible in - mysql_multi_update(). - */ - Select->set_lock_for_tables($3); - } - where_clause opt_order_clause delete_limit_clause {} - ; + UPDATE_SYM + { + LEX *lex= Lex; + mysql_init_select(lex); + lex->sql_command= SQLCOM_UPDATE; + lex->lock_option= TL_UNLOCK; /* Will be set later */ + lex->duplicates= DUP_ERROR; + } + opt_low_priority opt_ignore join_table_list + SET update_list + { + LEX *lex= Lex; + if (lex->select_lex.table_list.elements > 1) + lex->sql_command= SQLCOM_UPDATE_MULTI; + else if (lex->select_lex.get_table_list()->derived) + { + /* it is single table update and it is update of derived table */ + my_error(ER_NON_UPDATABLE_TABLE, MYF(0), + lex->select_lex.get_table_list()->alias, "UPDATE"); + MYSQL_YYABORT; + } + /* + In case of multi-update setting write lock for all tables may + be too pessimistic. We will decrease lock level if possible in + mysql_multi_update(). + */ + Select->set_lock_for_tables($3); + } + where_clause opt_order_clause delete_limit_clause {} + ; update_list: - update_list ',' update_elem - | update_elem; + update_list ',' update_elem + | update_elem + ; update_elem: - simple_ident_nospvar equal expr_or_default - { - if (add_item_to_list(YYTHD, $1) || add_value_to_list(YYTHD, $3)) - MYSQL_YYABORT; - }; + simple_ident_nospvar equal expr_or_default + { + if (add_item_to_list(YYTHD, $1) || add_value_to_list(YYTHD, $3)) + MYSQL_YYABORT; + } + ; insert_update_list: - insert_update_list ',' insert_update_elem - | insert_update_elem; + insert_update_list ',' insert_update_elem + | insert_update_elem + ; insert_update_elem: - simple_ident_nospvar equal expr_or_default - { - LEX *lex= Lex; - if (lex->update_list.push_back($1) || - lex->value_list.push_back($3)) - MYSQL_YYABORT; - }; + simple_ident_nospvar equal expr_or_default + { + LEX *lex= Lex; + if (lex->update_list.push_back($1) || + lex->value_list.push_back($3)) + MYSQL_YYABORT; + } + ; opt_low_priority: - /* empty */ { $$= TL_WRITE_DEFAULT; } - | LOW_PRIORITY { $$= TL_WRITE_LOW_PRIORITY; }; + /* empty */ { $$= TL_WRITE_DEFAULT; } + | LOW_PRIORITY { $$= TL_WRITE_LOW_PRIORITY; } + ; /* Delete rows from a table */ delete: - DELETE_SYM - { - LEX *lex= Lex; - lex->sql_command= SQLCOM_DELETE; - mysql_init_select(lex); - lex->lock_option= TL_WRITE_DEFAULT; - lex->ignore= 0; - lex->select_lex.init_order(); - } - opt_delete_options single_multi {} - ; + DELETE_SYM + { + LEX *lex= Lex; + lex->sql_command= SQLCOM_DELETE; + mysql_init_select(lex); + lex->lock_option= TL_WRITE_DEFAULT; + lex->ignore= 0; + lex->select_lex.init_order(); + } + opt_delete_options single_multi {} + ; single_multi: - FROM table_ident - { - if (!Select->add_table_to_list(YYTHD, $2, NULL, TL_OPTION_UPDATING, - Lex->lock_option)) - MYSQL_YYABORT; - } - where_clause opt_order_clause - delete_limit_clause {} - | table_wild_list - { mysql_init_multi_delete(Lex); } + FROM table_ident + { + if (!Select->add_table_to_list(YYTHD, $2, NULL, TL_OPTION_UPDATING, + Lex->lock_option)) + MYSQL_YYABORT; + } + where_clause opt_order_clause + delete_limit_clause {} + | table_wild_list + { mysql_init_multi_delete(Lex); } FROM join_table_list where_clause { if (multi_delete_set_locks_and_link_aux_tables(Lex)) MYSQL_YYABORT; } - | FROM table_wild_list - { mysql_init_multi_delete(Lex); } - USING join_table_list where_clause + | FROM table_wild_list + { mysql_init_multi_delete(Lex); } + USING join_table_list where_clause { if (multi_delete_set_locks_and_link_aux_tables(Lex)) MYSQL_YYABORT; } - ; + ; table_wild_list: - table_wild_one {} - | table_wild_list ',' table_wild_one {}; + table_wild_one {} + | table_wild_list ',' table_wild_one {} + ; table_wild_one: - ident opt_wild opt_table_alias - { - if (!Select->add_table_to_list(YYTHD, new Table_ident($1), $3, - TL_OPTION_UPDATING | - TL_OPTION_ALIAS, Lex->lock_option)) - MYSQL_YYABORT; - } - | ident '.' ident opt_wild opt_table_alias - { - if (!Select->add_table_to_list(YYTHD, - new Table_ident(YYTHD, $1, $3, 0), - $5, - TL_OPTION_UPDATING | - TL_OPTION_ALIAS, - Lex->lock_option)) - MYSQL_YYABORT; - } - ; + ident opt_wild opt_table_alias + { + if (!Select->add_table_to_list(YYTHD, new Table_ident($1), + $3, + TL_OPTION_UPDATING | TL_OPTION_ALIAS, + Lex->lock_option)) + MYSQL_YYABORT; + } + | ident '.' ident opt_wild opt_table_alias + { + if (!Select->add_table_to_list(YYTHD, + new Table_ident(YYTHD, $1, $3, 0), + $5, + TL_OPTION_UPDATING | TL_OPTION_ALIAS, + Lex->lock_option)) + MYSQL_YYABORT; + } + ; opt_wild: - /* empty */ {} - | '.' '*' {}; - + /* empty */ {} + | '.' '*' {} + ; opt_delete_options: - /* empty */ {} - | opt_delete_option opt_delete_options {}; + /* empty */ {} + | opt_delete_option opt_delete_options {} + ; opt_delete_option: - QUICK { Select->options|= OPTION_QUICK; } - | LOW_PRIORITY { Lex->lock_option= TL_WRITE_LOW_PRIORITY; } - | IGNORE_SYM { Lex->ignore= 1; }; + QUICK { Select->options|= OPTION_QUICK; } + | LOW_PRIORITY { Lex->lock_option= TL_WRITE_LOW_PRIORITY; } + | IGNORE_SYM { Lex->ignore= 1; } + ; truncate: - TRUNCATE_SYM opt_table_sym table_name - { - LEX* lex= Lex; - lex->sql_command= SQLCOM_TRUNCATE; - lex->select_lex.options= 0; - lex->select_lex.sql_cache= SELECT_LEX::SQL_CACHE_UNSPECIFIED; - lex->select_lex.init_order(); - } - ; + TRUNCATE_SYM opt_table_sym table_name + { + LEX* lex= Lex; + lex->sql_command= SQLCOM_TRUNCATE; + lex->select_lex.options= 0; + lex->select_lex.sql_cache= SELECT_LEX::SQL_CACHE_UNSPECIFIED; + lex->select_lex.init_order(); + } + ; opt_table_sym: - /* empty */ - | TABLE_SYM; + /* empty */ + | TABLE_SYM + ; /* Show things */ -show: SHOW - { - LEX *lex=Lex; - lex->wild=0; - lex->lock_option= TL_READ; - mysql_init_select(lex); - lex->current_select->parsing_place= SELECT_LIST; - bzero((char*) &lex->create_info,sizeof(lex->create_info)); - } - show_param - {} - ; +show: + SHOW + { + LEX *lex=Lex; + lex->wild=0; + lex->lock_option= TL_READ; + mysql_init_select(lex); + lex->current_select->parsing_place= SELECT_LIST; + bzero((char*) &lex->create_info,sizeof(lex->create_info)); + } + show_param + {} + ; show_param: - DATABASES wild_and_where - { - LEX *lex= Lex; - lex->sql_command= SQLCOM_SHOW_DATABASES; - if (prepare_schema_table(YYTHD, lex, 0, SCH_SCHEMATA)) - MYSQL_YYABORT; - } + DATABASES wild_and_where + { + LEX *lex= Lex; + lex->sql_command= SQLCOM_SHOW_DATABASES; + if (prepare_schema_table(YYTHD, lex, 0, SCH_SCHEMATA)) + MYSQL_YYABORT; + } | opt_full TABLES opt_db wild_and_where { LEX *lex= Lex; @@ -8652,112 +9007,115 @@ show_param: MYSQL_YYABORT; } | OPEN_SYM TABLES opt_db wild_and_where - { - LEX *lex= Lex; + { + LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_OPEN_TABLES; - lex->select_lex.db= $3; + lex->select_lex.db= $3; if (prepare_schema_table(YYTHD, lex, 0, SCH_OPEN_TABLES)) MYSQL_YYABORT; - } + } | opt_full PLUGIN_SYM - { - LEX *lex= Lex; - WARN_DEPRECATED(yythd, "5.2", "SHOW PLUGIN", "'SHOW PLUGINS'"); - lex->sql_command= SQLCOM_SHOW_PLUGINS; - if (prepare_schema_table(YYTHD, lex, 0, SCH_PLUGINS)) - MYSQL_YYABORT; - } - | PLUGINS_SYM - { - LEX *lex= Lex; - lex->sql_command= SQLCOM_SHOW_PLUGINS; - if (prepare_schema_table(YYTHD, lex, 0, SCH_PLUGINS)) - MYSQL_YYABORT; - } - | ENGINE_SYM known_storage_engines show_engine_param - { Lex->create_info.db_type= $2; } - | ENGINE_SYM ALL show_engine_param - { Lex->create_info.db_type= NULL; } - | opt_full COLUMNS from_or_in table_ident opt_db wild_and_where - { - LEX *lex= Lex; - lex->sql_command= SQLCOM_SHOW_FIELDS; - if ($5) - $4->change_db($5); - if (prepare_schema_table(YYTHD, lex, $4, SCH_COLUMNS)) - MYSQL_YYABORT; - } - | NEW_SYM MASTER_SYM FOR_SYM SLAVE WITH MASTER_LOG_FILE_SYM EQ - TEXT_STRING_sys AND_SYM MASTER_LOG_POS_SYM EQ ulonglong_num - AND_SYM MASTER_SERVER_ID_SYM EQ - ulong_num { - Lex->sql_command = SQLCOM_SHOW_NEW_MASTER; - Lex->mi.log_file_name = $8.str; - Lex->mi.pos = $12; - Lex->mi.server_id = $16; + LEX *lex= Lex; + WARN_DEPRECATED(yythd, "5.2", "SHOW PLUGIN", "'SHOW PLUGINS'"); + lex->sql_command= SQLCOM_SHOW_PLUGINS; + if (prepare_schema_table(YYTHD, lex, 0, SCH_PLUGINS)) + MYSQL_YYABORT; + } + | PLUGINS_SYM + { + LEX *lex= Lex; + lex->sql_command= SQLCOM_SHOW_PLUGINS; + if (prepare_schema_table(YYTHD, lex, 0, SCH_PLUGINS)) + MYSQL_YYABORT; + } + | ENGINE_SYM known_storage_engines show_engine_param + { Lex->create_info.db_type= $2; } + | ENGINE_SYM ALL show_engine_param + { Lex->create_info.db_type= NULL; } + | opt_full COLUMNS from_or_in table_ident opt_db wild_and_where + { + LEX *lex= Lex; + lex->sql_command= SQLCOM_SHOW_FIELDS; + if ($5) + $4->change_db($5); + if (prepare_schema_table(YYTHD, lex, $4, SCH_COLUMNS)) + MYSQL_YYABORT; + } + | NEW_SYM MASTER_SYM FOR_SYM SLAVE + WITH MASTER_LOG_FILE_SYM EQ + TEXT_STRING_sys /* $8 */ + AND_SYM MASTER_LOG_POS_SYM EQ + ulonglong_num /* $12 */ + AND_SYM MASTER_SERVER_ID_SYM EQ + ulong_num /* $16 */ + { + Lex->sql_command = SQLCOM_SHOW_NEW_MASTER; + Lex->mi.log_file_name = $8.str; + Lex->mi.pos = $12; + Lex->mi.server_id = $16; } | master_or_binary LOGS_SYM { - Lex->sql_command = SQLCOM_SHOW_BINLOGS; + Lex->sql_command = SQLCOM_SHOW_BINLOGS; } | SLAVE HOSTS_SYM { - Lex->sql_command = SQLCOM_SHOW_SLAVE_HOSTS; + Lex->sql_command = SQLCOM_SHOW_SLAVE_HOSTS; } | BINLOG_SYM EVENTS_SYM binlog_in binlog_from { - LEX *lex= Lex; - lex->sql_command= SQLCOM_SHOW_BINLOG_EVENTS; + LEX *lex= Lex; + lex->sql_command= SQLCOM_SHOW_BINLOG_EVENTS; } opt_limit_clause_init | keys_or_index from_or_in table_ident opt_db where_clause { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_KEYS; - if ($4) - $3->change_db($4); + if ($4) + $3->change_db($4); if (prepare_schema_table(YYTHD, lex, $3, SCH_STATISTICS)) MYSQL_YYABORT; - } - | COLUMN_SYM TYPES_SYM - { - LEX *lex=Lex; - lex->sql_command= SQLCOM_SHOW_COLUMN_TYPES; - } - | TABLE_SYM TYPES_SYM - { - LEX *lex=Lex; - lex->sql_command= SQLCOM_SHOW_STORAGE_ENGINES; - WARN_DEPRECATED(yythd, "5.2", "SHOW TABLE TYPES", "'SHOW [STORAGE] ENGINES'"); + } + | COLUMN_SYM TYPES_SYM + { + LEX *lex=Lex; + lex->sql_command= SQLCOM_SHOW_COLUMN_TYPES; + } + | TABLE_SYM TYPES_SYM + { + LEX *lex=Lex; + lex->sql_command= SQLCOM_SHOW_STORAGE_ENGINES; + WARN_DEPRECATED(yythd, "5.2", "SHOW TABLE TYPES", "'SHOW [STORAGE] ENGINES'"); if (prepare_schema_table(YYTHD, lex, 0, SCH_ENGINES)) MYSQL_YYABORT; - } - | opt_storage ENGINES_SYM - { - LEX *lex=Lex; - lex->sql_command= SQLCOM_SHOW_STORAGE_ENGINES; + } + | opt_storage ENGINES_SYM + { + LEX *lex=Lex; + lex->sql_command= SQLCOM_SHOW_STORAGE_ENGINES; if (prepare_schema_table(YYTHD, lex, 0, SCH_ENGINES)) MYSQL_YYABORT; - } - | AUTHORS_SYM - { - LEX *lex=Lex; - lex->sql_command= SQLCOM_SHOW_AUTHORS; - } - | CONTRIBUTORS_SYM - { - LEX *lex=Lex; - lex->sql_command= SQLCOM_SHOW_CONTRIBUTORS; - } - | PRIVILEGES - { - LEX *lex=Lex; - lex->sql_command= SQLCOM_SHOW_PRIVILEGES; - } + } + | AUTHORS_SYM + { + LEX *lex=Lex; + lex->sql_command= SQLCOM_SHOW_AUTHORS; + } + | CONTRIBUTORS_SYM + { + LEX *lex=Lex; + lex->sql_command= SQLCOM_SHOW_CONTRIBUTORS; + } + | PRIVILEGES + { + LEX *lex=Lex; + lex->sql_command= SQLCOM_SHOW_PRIVILEGES; + } | COUNT_SYM '(' '*' ')' WARNINGS { (void) create_select_for_variable("warning_count"); } | COUNT_SYM '(' '*' ')' ERRORS - { (void) create_select_for_variable("error_count"); } + { (void) create_select_for_variable("error_count"); } | WARNINGS opt_limit_clause_init { Lex->sql_command = SQLCOM_SHOW_WARNS;} | ERRORS opt_limit_clause_init @@ -8769,7 +9127,7 @@ show_param: lex->option_type= $1; if (prepare_schema_table(YYTHD, lex, 0, SCH_STATUS)) MYSQL_YYABORT; - } + } | INNOBASE_SYM STATUS_SYM { LEX *lex= Lex; @@ -8777,33 +9135,33 @@ show_param: if (!(lex->create_info.db_type= ha_resolve_by_legacy_type(YYTHD, DB_TYPE_INNODB))) { - my_error(ER_UNKNOWN_STORAGE_ENGINE, MYF(0), "InnoDB"); - MYSQL_YYABORT; + my_error(ER_UNKNOWN_STORAGE_ENGINE, MYF(0), "InnoDB"); + MYSQL_YYABORT; } WARN_DEPRECATED(yythd, "5.2", "SHOW INNODB STATUS", "'SHOW ENGINE INNODB STATUS'"); - } + } | MUTEX_SYM STATUS_SYM { - LEX *lex= Lex; + LEX *lex= Lex; lex->sql_command = SQLCOM_SHOW_ENGINE_MUTEX; if (!(lex->create_info.db_type= ha_resolve_by_legacy_type(YYTHD, DB_TYPE_INNODB))) { - my_error(ER_UNKNOWN_STORAGE_ENGINE, MYF(0), "InnoDB"); - MYSQL_YYABORT; + my_error(ER_UNKNOWN_STORAGE_ENGINE, MYF(0), "InnoDB"); + MYSQL_YYABORT; } WARN_DEPRECATED(yythd, "5.2", "SHOW MUTEX STATUS", "'SHOW ENGINE INNODB MUTEX'"); - } - | opt_full PROCESSLIST_SYM - { Lex->sql_command= SQLCOM_SHOW_PROCESSLIST;} + } + | opt_full PROCESSLIST_SYM + { Lex->sql_command= SQLCOM_SHOW_PROCESSLIST;} | opt_var_type VARIABLES wild_and_where - { + { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_VARIABLES; lex->option_type= $1; if (prepare_schema_table(YYTHD, lex, 0, SCH_VARIABLES)) MYSQL_YYABORT; - } + } | charset wild_and_where { LEX *lex= Lex; @@ -8818,92 +9176,92 @@ show_param: if (prepare_schema_table(YYTHD, lex, 0, SCH_COLLATIONS)) MYSQL_YYABORT; } - | GRANTS - { - LEX *lex=Lex; - lex->sql_command= SQLCOM_SHOW_GRANTS; - LEX_USER *curr_user; + | GRANTS + { + LEX *lex=Lex; + lex->sql_command= SQLCOM_SHOW_GRANTS; + LEX_USER *curr_user; if (!(curr_user= (LEX_USER*) lex->thd->alloc(sizeof(st_lex_user)))) MYSQL_YYABORT; bzero(curr_user, sizeof(st_lex_user)); - lex->grant_user= curr_user; - } - | GRANTS FOR_SYM user - { - LEX *lex=Lex; - lex->sql_command= SQLCOM_SHOW_GRANTS; - lex->grant_user=$3; - lex->grant_user->password=null_lex_str; - } - | CREATE DATABASE opt_if_not_exists ident - { - Lex->sql_command=SQLCOM_SHOW_CREATE_DB; - Lex->create_info.options=$3; - Lex->name= $4; - } + lex->grant_user= curr_user; + } + | GRANTS FOR_SYM user + { + LEX *lex=Lex; + lex->sql_command= SQLCOM_SHOW_GRANTS; + lex->grant_user=$3; + lex->grant_user->password=null_lex_str; + } + | CREATE DATABASE opt_if_not_exists ident + { + Lex->sql_command=SQLCOM_SHOW_CREATE_DB; + Lex->create_info.options=$3; + Lex->name= $4; + } | CREATE TABLE_SYM table_ident { LEX *lex= Lex; - lex->sql_command = SQLCOM_SHOW_CREATE; - if (!lex->select_lex.add_table_to_list(YYTHD, $3, NULL,0)) - MYSQL_YYABORT; + lex->sql_command = SQLCOM_SHOW_CREATE; + if (!lex->select_lex.add_table_to_list(YYTHD, $3, NULL,0)) + MYSQL_YYABORT; lex->only_view= 0; - lex->create_info.storage_media= HA_SM_DEFAULT; - } + lex->create_info.storage_media= HA_SM_DEFAULT; + } | CREATE VIEW_SYM table_ident { LEX *lex= Lex; - lex->sql_command = SQLCOM_SHOW_CREATE; - if (!lex->select_lex.add_table_to_list(YYTHD, $3, NULL, 0)) - MYSQL_YYABORT; + lex->sql_command = SQLCOM_SHOW_CREATE; + if (!lex->select_lex.add_table_to_list(YYTHD, $3, NULL, 0)) + MYSQL_YYABORT; lex->only_view= 1; - } + } | MASTER_SYM STATUS_SYM { - Lex->sql_command = SQLCOM_SHOW_MASTER_STAT; + Lex->sql_command = SQLCOM_SHOW_MASTER_STAT; } | SLAVE STATUS_SYM { - Lex->sql_command = SQLCOM_SHOW_SLAVE_STAT; + Lex->sql_command = SQLCOM_SHOW_SLAVE_STAT; } - | CREATE PROCEDURE sp_name - { - LEX *lex= Lex; + | CREATE PROCEDURE sp_name + { + LEX *lex= Lex; - lex->sql_command = SQLCOM_SHOW_CREATE_PROC; - lex->spname= $3; - } - | CREATE FUNCTION_SYM sp_name - { - LEX *lex= Lex; + lex->sql_command = SQLCOM_SHOW_CREATE_PROC; + lex->spname= $3; + } + | CREATE FUNCTION_SYM sp_name + { + LEX *lex= Lex; - lex->sql_command = SQLCOM_SHOW_CREATE_FUNC; - lex->spname= $3; - } - | CREATE TRIGGER_SYM sp_name - { - LEX *lex= Lex; - lex->sql_command= SQLCOM_SHOW_CREATE_TRIGGER; - lex->spname= $3; - } - | PROCEDURE STATUS_SYM wild_and_where - { + lex->sql_command = SQLCOM_SHOW_CREATE_FUNC; + lex->spname= $3; + } + | CREATE TRIGGER_SYM sp_name + { + LEX *lex= Lex; + lex->sql_command= SQLCOM_SHOW_CREATE_TRIGGER; + lex->spname= $3; + } + | PROCEDURE STATUS_SYM wild_and_where + { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_STATUS_PROC; - if (!sp_add_to_query_tables(YYTHD, lex, "mysql", "proc", TL_READ)) - MYSQL_YYABORT; + if (!sp_add_to_query_tables(YYTHD, lex, "mysql", "proc", TL_READ)) + MYSQL_YYABORT; if (prepare_schema_table(YYTHD, lex, 0, SCH_PROCEDURES)) MYSQL_YYABORT; - } - | FUNCTION_SYM STATUS_SYM wild_and_where - { + } + | FUNCTION_SYM STATUS_SYM wild_and_where + { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_STATUS_FUNC; - if (!sp_add_to_query_tables(YYTHD, lex, "mysql", "proc", TL_READ)) - MYSQL_YYABORT; + if (!sp_add_to_query_tables(YYTHD, lex, "mysql", "proc", TL_READ)) + MYSQL_YYABORT; if (prepare_schema_table(YYTHD, lex, 0, SCH_PROCEDURES)) MYSQL_YYABORT; - } + } | PROCEDURE CODE_SYM sp_name { #ifdef DBUG_OFF @@ -8911,7 +9269,7 @@ show_param: MYSQL_YYABORT; #else Lex->sql_command= SQLCOM_SHOW_PROC_CODE; - Lex->spname= $3; + Lex->spname= $3; #endif } | FUNCTION_SYM CODE_SYM sp_name @@ -8921,7 +9279,7 @@ show_param: MYSQL_YYABORT; #else Lex->sql_command= SQLCOM_SHOW_FUNC_CODE; - Lex->spname= $3; + Lex->spname= $3; #endif } | CREATE EVENT_SYM sp_name @@ -8929,290 +9287,328 @@ show_param: Lex->spname= $3; Lex->sql_command = SQLCOM_SHOW_CREATE_EVENT; } - ; + ; show_engine_param: - STATUS_SYM - { Lex->sql_command= SQLCOM_SHOW_ENGINE_STATUS; } - | MUTEX_SYM - { Lex->sql_command= SQLCOM_SHOW_ENGINE_MUTEX; } - | LOGS_SYM - { Lex->sql_command= SQLCOM_SHOW_ENGINE_LOGS; }; + STATUS_SYM + { Lex->sql_command= SQLCOM_SHOW_ENGINE_STATUS; } + | MUTEX_SYM + { Lex->sql_command= SQLCOM_SHOW_ENGINE_MUTEX; } + | LOGS_SYM + { Lex->sql_command= SQLCOM_SHOW_ENGINE_LOGS; } + ; master_or_binary: - MASTER_SYM - | BINARY; + MASTER_SYM + | BINARY + ; opt_storage: - /* empty */ - | STORAGE_SYM; + /* empty */ + | STORAGE_SYM + ; opt_db: - /* empty */ { $$= 0; } - | from_or_in ident { $$= $2.str; }; + /* empty */ { $$= 0; } + | from_or_in ident { $$= $2.str; } + ; opt_full: - /* empty */ { Lex->verbose=0; } - | FULL { Lex->verbose=1; }; + /* empty */ { Lex->verbose=0; } + | FULL { Lex->verbose=1; } + ; from_or_in: - FROM - | IN_SYM; + FROM + | IN_SYM + ; binlog_in: - /* empty */ { Lex->mi.log_file_name = 0; } - | IN_SYM TEXT_STRING_sys { Lex->mi.log_file_name = $2.str; }; + /* empty */ { Lex->mi.log_file_name = 0; } + | IN_SYM TEXT_STRING_sys { Lex->mi.log_file_name = $2.str; } + ; binlog_from: - /* empty */ { Lex->mi.pos = 4; /* skip magic number */ } - | FROM ulonglong_num { Lex->mi.pos = $2; }; + /* empty */ { Lex->mi.pos = 4; /* skip magic number */ } + | FROM ulonglong_num { Lex->mi.pos = $2; } + ; wild_and_where: - /* empty */ - | LIKE TEXT_STRING_sys - { Lex->wild= new (YYTHD->mem_root) String($2.str, $2.length, - system_charset_info); } - | WHERE expr - { - Select->where= $2; - if ($2) - $2->top_level_item(); - } - ; - + /* empty */ + | LIKE TEXT_STRING_sys + { + Lex->wild= new (YYTHD->mem_root) String($2.str, $2.length, + system_charset_info); + } + | WHERE expr + { + Select->where= $2; + if ($2) + $2->top_level_item(); + } + ; /* A Oracle compatible synonym for show */ describe: - describe_command table_ident - { - LEX *lex= Lex; - lex->lock_option= TL_READ; - mysql_init_select(lex); - lex->current_select->parsing_place= SELECT_LIST; - lex->sql_command= SQLCOM_SHOW_FIELDS; - lex->select_lex.db= 0; - lex->verbose= 0; - if (prepare_schema_table(YYTHD, lex, $2, SCH_COLUMNS)) - MYSQL_YYABORT; - } - opt_describe_column {} - | describe_command opt_extended_describe - { Lex->describe|= DESCRIBE_NORMAL; } - select + describe_command table_ident { - LEX *lex=Lex; - lex->select_lex.options|= SELECT_DESCRIBE; - } - ; + LEX *lex= Lex; + lex->lock_option= TL_READ; + mysql_init_select(lex); + lex->current_select->parsing_place= SELECT_LIST; + lex->sql_command= SQLCOM_SHOW_FIELDS; + lex->select_lex.db= 0; + lex->verbose= 0; + if (prepare_schema_table(YYTHD, lex, $2, SCH_COLUMNS)) + MYSQL_YYABORT; + } + opt_describe_column {} + | describe_command opt_extended_describe + { Lex->describe|= DESCRIBE_NORMAL; } + select + { + LEX *lex=Lex; + lex->select_lex.options|= SELECT_DESCRIBE; + } + ; describe_command: - DESC - | DESCRIBE; + DESC + | DESCRIBE + ; opt_extended_describe: - /* empty */ {} - | EXTENDED_SYM { Lex->describe|= DESCRIBE_EXTENDED; } - | PARTITIONS_SYM { Lex->describe|= DESCRIBE_PARTITIONS; } - ; - + /* empty */ {} + | EXTENDED_SYM { Lex->describe|= DESCRIBE_EXTENDED; } + | PARTITIONS_SYM { Lex->describe|= DESCRIBE_PARTITIONS; } + ; opt_describe_column: - /* empty */ {} - | text_string { Lex->wild= $1; } - | ident - { Lex->wild= new (YYTHD->mem_root) String((const char*) $1.str,$1.length,system_charset_info); }; + /* empty */ {} + | text_string { Lex->wild= $1; } + | ident + { + Lex->wild= new (YYTHD->mem_root) String((const char*) $1.str, + $1.length, + system_charset_info); + } + ; /* flush things */ flush: - FLUSH_SYM opt_no_write_to_binlog - { - LEX *lex=Lex; - lex->sql_command= SQLCOM_FLUSH; - lex->type= 0; - lex->no_write_to_binlog= $2; - } - flush_options - {} - ; + FLUSH_SYM opt_no_write_to_binlog + { + LEX *lex=Lex; + lex->sql_command= SQLCOM_FLUSH; + lex->type= 0; + lex->no_write_to_binlog= $2; + } + flush_options + {} + ; flush_options: - flush_options ',' flush_option - | flush_option; + flush_options ',' flush_option + | flush_option + ; flush_option: - table_or_tables { Lex->type|= REFRESH_TABLES; } opt_table_list {} - | TABLES WITH READ_SYM LOCK_SYM { Lex->type|= REFRESH_TABLES | REFRESH_READ_LOCK; } - | QUERY_SYM CACHE_SYM { Lex->type|= REFRESH_QUERY_CACHE_FREE; } - | HOSTS_SYM { Lex->type|= REFRESH_HOSTS; } - | PRIVILEGES { Lex->type|= REFRESH_GRANT; } - | LOGS_SYM { Lex->type|= REFRESH_LOG; } - | STATUS_SYM { Lex->type|= REFRESH_STATUS; } - | SLAVE { Lex->type|= REFRESH_SLAVE; } - | MASTER_SYM { Lex->type|= REFRESH_MASTER; } - | DES_KEY_FILE { Lex->type|= REFRESH_DES_KEY_FILE; } - | RESOURCES { Lex->type|= REFRESH_USER_RESOURCES; }; + table_or_tables + { Lex->type|= REFRESH_TABLES; } + opt_table_list {} + | TABLES WITH READ_SYM LOCK_SYM + { Lex->type|= REFRESH_TABLES | REFRESH_READ_LOCK; } + | QUERY_SYM CACHE_SYM + { Lex->type|= REFRESH_QUERY_CACHE_FREE; } + | HOSTS_SYM + { Lex->type|= REFRESH_HOSTS; } + | PRIVILEGES + { Lex->type|= REFRESH_GRANT; } + | LOGS_SYM + { Lex->type|= REFRESH_LOG; } + | STATUS_SYM + { Lex->type|= REFRESH_STATUS; } + | SLAVE + { Lex->type|= REFRESH_SLAVE; } + | MASTER_SYM + { Lex->type|= REFRESH_MASTER; } + | DES_KEY_FILE + { Lex->type|= REFRESH_DES_KEY_FILE; } + | RESOURCES + { Lex->type|= REFRESH_USER_RESOURCES; } + ; opt_table_list: - /* empty */ {;} - | table_list {;}; + /* empty */ {} + | table_list {} + ; reset: - RESET_SYM - { - LEX *lex=Lex; - lex->sql_command= SQLCOM_RESET; lex->type=0; - } reset_options - {} - ; + RESET_SYM + { + LEX *lex=Lex; + lex->sql_command= SQLCOM_RESET; lex->type=0; + } + reset_options + {} + ; reset_options: - reset_options ',' reset_option - | reset_option; + reset_options ',' reset_option + | reset_option + ; reset_option: - SLAVE { Lex->type|= REFRESH_SLAVE; } + SLAVE { Lex->type|= REFRESH_SLAVE; } | MASTER_SYM { Lex->type|= REFRESH_MASTER; } - | QUERY_SYM CACHE_SYM { Lex->type|= REFRESH_QUERY_CACHE;}; + | QUERY_SYM CACHE_SYM { Lex->type|= REFRESH_QUERY_CACHE;} + ; purge: - PURGE - { - LEX *lex=Lex; - lex->type=0; - lex->sql_command = SQLCOM_PURGE; - } purge_options - {} - ; + PURGE + { + LEX *lex=Lex; + lex->type=0; + lex->sql_command = SQLCOM_PURGE; + } + purge_options + {} + ; purge_options: - master_or_binary LOGS_SYM purge_option - ; + master_or_binary LOGS_SYM purge_option + ; purge_option: - TO_SYM TEXT_STRING_sys - { - Lex->to_log = $2.str; - } - | BEFORE_SYM expr - { - LEX *lex= Lex; - lex->value_list.empty(); - lex->value_list.push_front($2); - lex->sql_command= SQLCOM_PURGE_BEFORE; - } - ; + TO_SYM TEXT_STRING_sys + { + Lex->to_log = $2.str; + } + | BEFORE_SYM expr + { + LEX *lex= Lex; + lex->value_list.empty(); + lex->value_list.push_front($2); + lex->sql_command= SQLCOM_PURGE_BEFORE; + } + ; /* kill threads */ kill: - KILL_SYM kill_option expr - { - LEX *lex=Lex; - lex->value_list.empty(); - lex->value_list.push_front($3); - lex->sql_command= SQLCOM_KILL; - }; + KILL_SYM kill_option expr + { + LEX *lex=Lex; + lex->value_list.empty(); + lex->value_list.push_front($3); + lex->sql_command= SQLCOM_KILL; + } + ; kill_option: - /* empty */ { Lex->type= 0; } - | CONNECTION_SYM { Lex->type= 0; } - | QUERY_SYM { Lex->type= ONLY_KILL_QUERY; } + /* empty */ { Lex->type= 0; } + | CONNECTION_SYM { Lex->type= 0; } + | QUERY_SYM { Lex->type= ONLY_KILL_QUERY; } ; /* change database */ -use: USE_SYM ident - { - LEX *lex=Lex; - lex->sql_command=SQLCOM_CHANGE_DB; - lex->select_lex.db= $2.str; - }; +use: + USE_SYM ident + { + LEX *lex=Lex; + lex->sql_command=SQLCOM_CHANGE_DB; + lex->select_lex.db= $2.str; + } + ; /* import, export of files */ -load: LOAD DATA_SYM - { - THD *thd= YYTHD; - LEX *lex= thd->lex; - Lex_input_stream *lip= thd->m_lip; +load: + LOAD DATA_SYM + { + THD *thd= YYTHD; + LEX *lex= thd->lex; + Lex_input_stream *lip= thd->m_lip; - if (lex->sphead) - { - my_error(ER_SP_BADSTATEMENT, MYF(0), "LOAD DATA"); - MYSQL_YYABORT; - } - lex->fname_start= lip->get_ptr(); - } - load_data - {} - | - LOAD TABLE_SYM table_ident FROM MASTER_SYM - { - LEX *lex=Lex; - WARN_DEPRECATED(yythd, "5.2", "LOAD TABLE FROM MASTER", - "MySQL Administrator (mysqldump, mysql)"); - if (lex->sphead) - { - my_error(ER_SP_BADSTATEMENT, MYF(0), "LOAD TABLE"); - MYSQL_YYABORT; - } - lex->sql_command = SQLCOM_LOAD_MASTER_TABLE; - if (!Select->add_table_to_list(YYTHD, $3, NULL, TL_OPTION_UPDATING)) - MYSQL_YYABORT; - }; + if (lex->sphead) + { + my_error(ER_SP_BADSTATEMENT, MYF(0), "LOAD DATA"); + MYSQL_YYABORT; + } + lex->fname_start= lip->get_ptr(); + } + load_data + {} + | LOAD TABLE_SYM table_ident FROM MASTER_SYM + { + LEX *lex=Lex; + WARN_DEPRECATED(yythd, "5.2", "LOAD TABLE FROM MASTER", + "MySQL Administrator (mysqldump, mysql)"); + if (lex->sphead) + { + my_error(ER_SP_BADSTATEMENT, MYF(0), "LOAD TABLE"); + MYSQL_YYABORT; + } + lex->sql_command = SQLCOM_LOAD_MASTER_TABLE; + if (!Select->add_table_to_list(YYTHD, $3, NULL, TL_OPTION_UPDATING)) + MYSQL_YYABORT; + } + ; load_data: - load_data_lock opt_local INFILE TEXT_STRING_filesystem - { - LEX *lex=Lex; - lex->sql_command= SQLCOM_LOAD; - lex->lock_option= $1; - lex->local_file= $2; - lex->duplicates= DUP_ERROR; - lex->ignore= 0; - if (!(lex->exchange= new sql_exchange($4.str, 0))) - MYSQL_YYABORT; - } - opt_duplicate INTO - { - THD *thd= YYTHD; - LEX *lex= thd->lex; - Lex_input_stream *lip= thd->m_lip; - lex->fname_end= lip->get_ptr(); - } - TABLE_SYM table_ident - { - LEX *lex=Lex; - if (!Select->add_table_to_list(YYTHD, $10, NULL, TL_OPTION_UPDATING, - lex->lock_option)) - MYSQL_YYABORT; - lex->field_list.empty(); - lex->update_list.empty(); - lex->value_list.empty(); - } - opt_load_data_charset - { Lex->exchange->cs= $12; } - opt_field_term opt_line_term opt_ignore_lines opt_field_or_var_spec - opt_load_data_set_spec - {} - | - FROM MASTER_SYM - { - Lex->sql_command = SQLCOM_LOAD_MASTER_DATA; - WARN_DEPRECATED(yythd, "5.2", "LOAD DATA FROM MASTER", - "mysqldump or future " - "BACKUP/RESTORE DATABASE facility"); - }; + load_data_lock opt_local INFILE TEXT_STRING_filesystem + { + LEX *lex=Lex; + lex->sql_command= SQLCOM_LOAD; + lex->lock_option= $1; + lex->local_file= $2; + lex->duplicates= DUP_ERROR; + lex->ignore= 0; + if (!(lex->exchange= new sql_exchange($4.str, 0))) + MYSQL_YYABORT; + } + opt_duplicate INTO + { + THD *thd= YYTHD; + LEX *lex= thd->lex; + Lex_input_stream *lip= thd->m_lip; + lex->fname_end= lip->get_ptr(); + } + TABLE_SYM table_ident + { + LEX *lex=Lex; + if (!Select->add_table_to_list(YYTHD, $10, NULL, TL_OPTION_UPDATING, + lex->lock_option)) + MYSQL_YYABORT; + lex->field_list.empty(); + lex->update_list.empty(); + lex->value_list.empty(); + } + opt_load_data_charset + { Lex->exchange->cs= $12; } + opt_field_term opt_line_term opt_ignore_lines opt_field_or_var_spec + opt_load_data_set_spec + {} + | FROM MASTER_SYM + { + Lex->sql_command = SQLCOM_LOAD_MASTER_DATA; + WARN_DEPRECATED(yythd, "5.2", "LOAD DATA FROM MASTER", + "mysqldump or future " + "BACKUP/RESTORE DATABASE facility"); + } + ; opt_local: - /* empty */ { $$=0;} - | LOCAL_SYM { $$=1;}; + /* empty */ { $$=0;} + | LOCAL_SYM { $$=1;} + ; load_data_lock: - /* empty */ { $$= TL_WRITE_DEFAULT; } - | CONCURRENT + /* empty */ { $$= TL_WRITE_DEFAULT; } + | CONCURRENT { #ifdef HAVE_QUERY_CACHE /* @@ -9224,35 +9620,38 @@ load_data_lock: #endif $$= TL_WRITE_CONCURRENT_INSERT; } - | LOW_PRIORITY { $$= TL_WRITE_LOW_PRIORITY; }; - + | LOW_PRIORITY { $$= TL_WRITE_LOW_PRIORITY; } + ; opt_duplicate: - /* empty */ { Lex->duplicates=DUP_ERROR; } - | REPLACE { Lex->duplicates=DUP_REPLACE; } - | IGNORE_SYM { Lex->ignore= 1; }; + /* empty */ { Lex->duplicates=DUP_ERROR; } + | REPLACE { Lex->duplicates=DUP_REPLACE; } + | IGNORE_SYM { Lex->ignore= 1; } + ; opt_field_term: - /* empty */ - | COLUMNS field_term_list; + /* empty */ + | COLUMNS field_term_list + ; field_term_list: - field_term_list field_term - | field_term; + field_term_list field_term + | field_term + ; field_term: - TERMINATED BY text_string + TERMINATED BY text_string { DBUG_ASSERT(Lex->exchange != 0); Lex->exchange->field_term= $3; } - | OPTIONALLY ENCLOSED BY text_string - { + | OPTIONALLY ENCLOSED BY text_string + { LEX *lex= Lex; DBUG_ASSERT(lex->exchange != 0); lex->exchange->enclosed= $4; lex->exchange->opt_enclosed= 1; - } + } | ENCLOSED BY text_string { DBUG_ASSERT(Lex->exchange != 0); @@ -9262,18 +9661,21 @@ field_term: { DBUG_ASSERT(Lex->exchange != 0); Lex->exchange->escaped= $3; - }; + } + ; opt_line_term: - /* empty */ - | LINES line_term_list; + /* empty */ + | LINES line_term_list + ; line_term_list: - line_term_list line_term - | line_term; + line_term_list line_term + | line_term + ; line_term: - TERMINATED BY text_string + TERMINATED BY text_string { DBUG_ASSERT(Lex->exchange != 0); Lex->exchange->line_term= $3; @@ -9282,68 +9684,71 @@ line_term: { DBUG_ASSERT(Lex->exchange != 0); Lex->exchange->line_start= $3; - }; + } + ; opt_ignore_lines: - /* empty */ + /* empty */ | IGNORE_SYM NUM LINES { DBUG_ASSERT(Lex->exchange != 0); Lex->exchange->skip_lines= atol($2.str); - }; + } + ; opt_field_or_var_spec: - /* empty */ { } - | '(' fields_or_vars ')' { } - | '(' ')' { }; + /* empty */ {} + | '(' fields_or_vars ')' {} + | '(' ')' {} + ; fields_or_vars: - fields_or_vars ',' field_or_var + fields_or_vars ',' field_or_var { Lex->field_list.push_back($3); } | field_or_var { Lex->field_list.push_back($1); } ; field_or_var: - simple_ident_nospvar {$$= $1;} + simple_ident_nospvar {$$= $1;} | '@' ident_or_text { $$= new Item_user_var_as_out_param($2); } ; opt_load_data_set_spec: - /* empty */ { } - | SET insert_update_list { }; - + /* empty */ {} + | SET insert_update_list {} + ; /* Common definitions */ text_literal: - TEXT_STRING - { - LEX_STRING tmp; - THD *thd= YYTHD; - CHARSET_INFO *cs_con= thd->variables.collation_connection; - CHARSET_INFO *cs_cli= thd->variables.character_set_client; - uint repertoire= thd->lex->text_string_is_7bit && + TEXT_STRING + { + LEX_STRING tmp; + THD *thd= YYTHD; + CHARSET_INFO *cs_con= thd->variables.collation_connection; + CHARSET_INFO *cs_cli= thd->variables.character_set_client; + uint repertoire= thd->lex->text_string_is_7bit && my_charset_is_ascii_based(cs_cli) ? - MY_REPERTOIRE_ASCII : MY_REPERTOIRE_UNICODE30; - if (thd->charset_is_collation_connection || - (repertoire == MY_REPERTOIRE_ASCII && - my_charset_is_ascii_based(cs_con))) - tmp= $1; - else - thd->convert_string(&tmp, cs_con, $1.str, $1.length, cs_cli); - $$= new Item_string(tmp.str, tmp.length, cs_con, - DERIVATION_COERCIBLE, repertoire); - } + MY_REPERTOIRE_ASCII : MY_REPERTOIRE_UNICODE30; + if (thd->charset_is_collation_connection || + (repertoire == MY_REPERTOIRE_ASCII && + my_charset_is_ascii_based(cs_con))) + tmp= $1; + else + thd->convert_string(&tmp, cs_con, $1.str, $1.length, cs_cli); + $$= new Item_string(tmp.str, tmp.length, cs_con, + DERIVATION_COERCIBLE, repertoire); + } | NCHAR_STRING - { - uint repertoire= Lex->text_string_is_7bit ? - MY_REPERTOIRE_ASCII : MY_REPERTOIRE_UNICODE30; - DBUG_ASSERT(my_charset_is_ascii_based(national_charset_info)); - $$= new Item_string($1.str, $1.length, national_charset_info, - DERIVATION_COERCIBLE, repertoire); - } + { + uint repertoire= Lex->text_string_is_7bit ? + MY_REPERTOIRE_ASCII : MY_REPERTOIRE_UNICODE30; + DBUG_ASSERT(my_charset_is_ascii_based(national_charset_info)); + $$= new Item_string($1.str, $1.length, national_charset_info, + DERIVATION_COERCIBLE, repertoire); + } | UNDERSCORE_CHARSET TEXT_STRING { $$= new Item_string($2.str, $2.length, $1); @@ -9368,75 +9773,78 @@ text_literal: ; text_string: - TEXT_STRING_literal - { $$= new (YYTHD->mem_root) String($1.str,$1.length,YYTHD->variables.collation_connection); } - | HEX_NUM - { - Item *tmp= new Item_hex_string($1.str, $1.length); - /* - it is OK only emulate fix_fields, because we need only + TEXT_STRING_literal + { + $$= new (YYTHD->mem_root) String($1.str, + $1.length, + YYTHD->variables.collation_connection); + } + | HEX_NUM + { + Item *tmp= new Item_hex_string($1.str, $1.length); + /* + it is OK only emulate fix_fields, because we need only value of constant - */ - $$= tmp ? - tmp->quick_fix_field(), tmp->val_str((String*) 0) : - (String*) 0; - } + */ + $$= tmp ? + tmp->quick_fix_field(), tmp->val_str((String*) 0) : + (String*) 0; + } | BIN_NUM { - Item *tmp= new Item_bin_string($1.str, $1.length); - /* - it is OK only emulate fix_fields, because we need only + Item *tmp= new Item_bin_string($1.str, $1.length); + /* + it is OK only emulate fix_fields, because we need only value of constant - */ - $$= tmp ? tmp->quick_fix_field(), tmp->val_str((String*) 0) : - (String*) 0; + */ + $$= tmp ? tmp->quick_fix_field(), tmp->val_str((String*) 0) : + (String*) 0; } - ; + ; param_marker: - PARAM_MARKER - { - THD *thd= YYTHD; - LEX *lex= thd->lex; - Lex_input_stream *lip= thd->m_lip; - Item_param *item; - if (! lex->parsing_options.allows_variable) + PARAM_MARKER { - my_error(ER_VIEW_SELECT_VARIABLE, MYF(0)); - MYSQL_YYABORT; + THD *thd= YYTHD; + LEX *lex= thd->lex; + Lex_input_stream *lip= thd->m_lip; + Item_param *item; + if (! lex->parsing_options.allows_variable) + { + my_error(ER_VIEW_SELECT_VARIABLE, MYF(0)); + MYSQL_YYABORT; + } + item= new Item_param((uint) (lip->get_tok_start() - thd->query)); + if (!($$= item) || lex->param_list.push_back(item)) + { + my_message(ER_OUT_OF_RESOURCES, ER(ER_OUT_OF_RESOURCES), MYF(0)); + MYSQL_YYABORT; + } } - item= new Item_param((uint) (lip->get_tok_start() - thd->query)); - if (!($$= item) || lex->param_list.push_back(item)) - { - my_message(ER_OUT_OF_RESOURCES, ER(ER_OUT_OF_RESOURCES), MYF(0)); - MYSQL_YYABORT; - } - } - ; + ; signed_literal: - literal { $$ = $1; } - | '+' NUM_literal { $$ = $2; } - | '-' NUM_literal - { - $2->max_length++; - $$= $2->neg(); - } - ; - + literal { $$ = $1; } + | '+' NUM_literal { $$ = $2; } + | '-' NUM_literal + { + $2->max_length++; + $$= $2->neg(); + } + ; literal: - text_literal { $$ = $1; } - | NUM_literal { $$ = $1; } - | NULL_SYM + text_literal { $$ = $1; } + | NUM_literal { $$ = $1; } + | NULL_SYM { $$ = new Item_null(); YYTHD->m_lip->next_state=MY_LEX_OPERATOR_OR_IDENT; } - | FALSE_SYM { $$= new Item_int((char*) "FALSE",0,1); } - | TRUE_SYM { $$= new Item_int((char*) "TRUE",1,1); } - | HEX_NUM { $$ = new Item_hex_string($1.str, $1.length);} - | BIN_NUM { $$= new Item_bin_string($1.str, $1.length); } + | FALSE_SYM { $$= new Item_int((char*) "FALSE",0,1); } + | TRUE_SYM { $$= new Item_int((char*) "TRUE",1,1); } + | HEX_NUM { $$ = new Item_hex_string($1.str, $1.length);} + | BIN_NUM { $$= new Item_bin_string($1.str, $1.length); } | UNDERSCORE_CHARSET HEX_NUM { Item *tmp= new Item_hex_string($2.str, $2.length); @@ -9453,238 +9861,249 @@ literal: if ($$) ((Item_string *) $$)->set_repertoire_from_value(); } - | UNDERSCORE_CHARSET BIN_NUM + | UNDERSCORE_CHARSET BIN_NUM { - Item *tmp= new Item_bin_string($2.str, $2.length); - /* - it is OK only emulate fix_fieds, because we need only + Item *tmp= new Item_bin_string($2.str, $2.length); + /* + it is OK only emulate fix_fieds, because we need only value of constant - */ - String *str= tmp ? - tmp->quick_fix_field(), tmp->val_str((String*) 0) : - (String*) 0; - $$= new Item_string(str ? str->ptr() : "", - str ? str->length() : 0, - Lex->charset); + */ + String *str= tmp ? + tmp->quick_fix_field(), tmp->val_str((String*) 0) : + (String*) 0; + $$= new Item_string(str ? str->ptr() : "", + str ? str->length() : 0, + Lex->charset); } - | DATE_SYM text_literal { $$ = $2; } - | TIME_SYM text_literal { $$ = $2; } - | TIMESTAMP text_literal { $$ = $2; }; + | DATE_SYM text_literal { $$ = $2; } + | TIME_SYM text_literal { $$ = $2; } + | TIMESTAMP text_literal { $$ = $2; } + ; NUM_literal: - NUM { int error; $$ = new Item_int($1.str, (longlong) my_strtoll10($1.str, NULL, &error), $1.length); } - | LONG_NUM { int error; $$ = new Item_int($1.str, (longlong) my_strtoll10($1.str, NULL, &error), $1.length); } - | ULONGLONG_NUM { $$ = new Item_uint($1.str, $1.length); } + NUM + { + int error; + $$ = new Item_int($1.str, (longlong) my_strtoll10($1.str, NULL, &error), $1.length); + } + | LONG_NUM + { + int error; + $$ = new Item_int($1.str, (longlong) my_strtoll10($1.str, NULL, &error), $1.length); + } + | ULONGLONG_NUM + { $$ = new Item_uint($1.str, $1.length); } | DECIMAL_NUM - { - $$= new Item_decimal($1.str, $1.length, YYTHD->charset()); - if (YYTHD->net.report_error) - { - MYSQL_YYABORT; - } - } - | FLOAT_NUM - { - $$ = new Item_float($1.str, $1.length); - if (YYTHD->net.report_error) - { - MYSQL_YYABORT; - } - } - ; + { + $$= new Item_decimal($1.str, $1.length, YYTHD->charset()); + if (YYTHD->net.report_error) + { + MYSQL_YYABORT; + } + } + | FLOAT_NUM + { + $$ = new Item_float($1.str, $1.length); + if (YYTHD->net.report_error) + { + MYSQL_YYABORT; + } + } + ; /********************************************************************** ** Creating different items. **********************************************************************/ insert_ident: - simple_ident_nospvar { $$=$1; } - | table_wild { $$=$1; }; + simple_ident_nospvar { $$=$1; } + | table_wild { $$=$1; } + ; table_wild: - ident '.' '*' - { - SELECT_LEX *sel= Select; - $$ = new Item_field(Lex->current_context(), NullS, $1.str, "*"); - sel->with_wild++; - } - | ident '.' ident '.' '*' - { - SELECT_LEX *sel= Select; - $$ = new Item_field(Lex->current_context(), (YYTHD->client_capabilities & - CLIENT_NO_SCHEMA ? NullS : $1.str), - $3.str,"*"); - sel->with_wild++; - } - ; + ident '.' '*' + { + SELECT_LEX *sel= Select; + $$ = new Item_field(Lex->current_context(), NullS, $1.str, "*"); + sel->with_wild++; + } + | ident '.' ident '.' '*' + { + SELECT_LEX *sel= Select; + $$ = new Item_field(Lex->current_context(), (YYTHD->client_capabilities & + CLIENT_NO_SCHEMA ? NullS : $1.str), + $3.str,"*"); + sel->with_wild++; + } + ; order_ident: - expr { $$=$1; }; + expr { $$=$1; } + ; simple_ident: - ident - { - THD *thd= YYTHD; - LEX *lex= thd->lex; - Lex_input_stream *lip= thd->m_lip; - sp_variable_t *spv; - sp_pcontext *spc = lex->spcont; - if (spc && (spv = spc->find_variable(&$1))) - { - /* We're compiling a stored procedure and found a variable */ - if (! lex->parsing_options.allows_variable) + ident + { + THD *thd= YYTHD; + LEX *lex= thd->lex; + Lex_input_stream *lip= thd->m_lip; + sp_variable_t *spv; + sp_pcontext *spc = lex->spcont; + if (spc && (spv = spc->find_variable(&$1))) { - my_error(ER_VIEW_SELECT_VARIABLE, MYF(0)); - MYSQL_YYABORT; - } + /* We're compiling a stored procedure and found a variable */ + if (! lex->parsing_options.allows_variable) + { + my_error(ER_VIEW_SELECT_VARIABLE, MYF(0)); + MYSQL_YYABORT; + } - Item_splocal *splocal; - splocal= new Item_splocal($1, spv->offset, spv->type, - lip->get_tok_start_prev() - - lex->sphead->m_tmp_query, - lip->get_tok_end() - lip->get_tok_start_prev()); + Item_splocal *splocal; + splocal= new Item_splocal($1, spv->offset, spv->type, + lip->get_tok_start_prev() - + lex->sphead->m_tmp_query, + lip->get_tok_end() - lip->get_tok_start_prev()); #ifndef DBUG_OFF - if (splocal) - splocal->m_sp= lex->sphead; + if (splocal) + splocal->m_sp= lex->sphead; #endif - $$ = (Item*) splocal; - lex->safe_to_cache_query=0; - } - else - { - SELECT_LEX *sel=Select; - $$= (sel->parsing_place != IN_HAVING || - sel->get_in_sum_expr() > 0) ? - (Item*) new Item_field(Lex->current_context(), NullS, NullS, $1.str) : - (Item*) new Item_ref(Lex->current_context(), NullS, NullS, $1.str); - } - } + $$ = (Item*) splocal; + lex->safe_to_cache_query=0; + } + else + { + SELECT_LEX *sel=Select; + $$= (sel->parsing_place != IN_HAVING || + sel->get_in_sum_expr() > 0) ? + (Item*) new Item_field(Lex->current_context(), NullS, NullS, $1.str) : + (Item*) new Item_ref(Lex->current_context(), NullS, NullS, $1.str); + } + } | simple_ident_q { $$= $1; } - ; + ; simple_ident_nospvar: - ident - { - SELECT_LEX *sel=Select; - $$= (sel->parsing_place != IN_HAVING || - sel->get_in_sum_expr() > 0) ? - (Item*) new Item_field(Lex->current_context(), NullS, NullS, $1.str) : - (Item*) new Item_ref(Lex->current_context(), NullS, NullS, $1.str); - } - | simple_ident_q { $$= $1; } - ; + ident + { + SELECT_LEX *sel=Select; + $$= (sel->parsing_place != IN_HAVING || + sel->get_in_sum_expr() > 0) ? + (Item*) new Item_field(Lex->current_context(), NullS, NullS, $1.str) : + (Item*) new Item_ref(Lex->current_context(), NullS, NullS, $1.str); + } + | simple_ident_q { $$= $1; } + ; simple_ident_q: - ident '.' ident - { - THD *thd= YYTHD; - LEX *lex= thd->lex; - - /* - FIXME This will work ok in simple_ident_nospvar case because - we can't meet simple_ident_nospvar in trigger now. But it - should be changed in future. - */ - if (lex->sphead && lex->sphead->m_type == TYPE_ENUM_TRIGGER && - (!my_strcasecmp(system_charset_info, $1.str, "NEW") || - !my_strcasecmp(system_charset_info, $1.str, "OLD"))) + ident '.' ident { - Item_trigger_field *trg_fld; - bool new_row= ($1.str[0]=='N' || $1.str[0]=='n'); - - if (lex->trg_chistics.event == TRG_EVENT_INSERT && - !new_row) - { - my_error(ER_TRG_NO_SUCH_ROW_IN_TRG, MYF(0), "OLD", "on INSERT"); - MYSQL_YYABORT; - } - - if (lex->trg_chistics.event == TRG_EVENT_DELETE && - new_row) - { - my_error(ER_TRG_NO_SUCH_ROW_IN_TRG, MYF(0), "NEW", "on DELETE"); - MYSQL_YYABORT; - } - - DBUG_ASSERT(!new_row || - (lex->trg_chistics.event == TRG_EVENT_INSERT || - lex->trg_chistics.event == TRG_EVENT_UPDATE)); - const bool read_only= - !(new_row && lex->trg_chistics.action_time == TRG_ACTION_BEFORE); - if (!(trg_fld= new Item_trigger_field(Lex->current_context(), - new_row ? - Item_trigger_field::NEW_ROW: - Item_trigger_field::OLD_ROW, - $3.str, - SELECT_ACL, - read_only))) - MYSQL_YYABORT; + THD *thd= YYTHD; + LEX *lex= thd->lex; /* - Let us add this item to list of all Item_trigger_field objects - in trigger. + FIXME This will work ok in simple_ident_nospvar case because + we can't meet simple_ident_nospvar in trigger now. But it + should be changed in future. */ - lex->trg_table_fields.link_in_list((uchar*) trg_fld, - (uchar**) &trg_fld-> - next_trg_field); + if (lex->sphead && lex->sphead->m_type == TYPE_ENUM_TRIGGER && + (!my_strcasecmp(system_charset_info, $1.str, "NEW") || + !my_strcasecmp(system_charset_info, $1.str, "OLD"))) + { + Item_trigger_field *trg_fld; + bool new_row= ($1.str[0]=='N' || $1.str[0]=='n'); - $$= (Item *)trg_fld; + if (lex->trg_chistics.event == TRG_EVENT_INSERT && + !new_row) + { + my_error(ER_TRG_NO_SUCH_ROW_IN_TRG, MYF(0), "OLD", "on INSERT"); + MYSQL_YYABORT; + } + + if (lex->trg_chistics.event == TRG_EVENT_DELETE && + new_row) + { + my_error(ER_TRG_NO_SUCH_ROW_IN_TRG, MYF(0), "NEW", "on DELETE"); + MYSQL_YYABORT; + } + + DBUG_ASSERT(!new_row || + (lex->trg_chistics.event == TRG_EVENT_INSERT || + lex->trg_chistics.event == TRG_EVENT_UPDATE)); + const bool read_only= + !(new_row && lex->trg_chistics.action_time == TRG_ACTION_BEFORE); + if (!(trg_fld= new Item_trigger_field(Lex->current_context(), + new_row ? + Item_trigger_field::NEW_ROW: + Item_trigger_field::OLD_ROW, + $3.str, + SELECT_ACL, + read_only))) + MYSQL_YYABORT; + + /* + Let us add this item to list of all Item_trigger_field objects + in trigger. + */ + lex->trg_table_fields.link_in_list((uchar*) trg_fld, + (uchar**) &trg_fld->next_trg_field); + + $$= (Item *)trg_fld; + } + else + { + SELECT_LEX *sel= lex->current_select; + if (sel->no_table_names_allowed) + { + my_error(ER_TABLENAME_NOT_ALLOWED_HERE, + MYF(0), $1.str, thd->where); + } + $$= (sel->parsing_place != IN_HAVING || + sel->get_in_sum_expr() > 0) ? + (Item*) new Item_field(Lex->current_context(), NullS, $1.str, $3.str) : + (Item*) new Item_ref(Lex->current_context(), NullS, $1.str, $3.str); + } } - else + | '.' ident '.' ident { - SELECT_LEX *sel= lex->current_select; - if (sel->no_table_names_allowed) - { - my_error(ER_TABLENAME_NOT_ALLOWED_HERE, - MYF(0), $1.str, thd->where); - } - $$= (sel->parsing_place != IN_HAVING || - sel->get_in_sum_expr() > 0) ? - (Item*) new Item_field(Lex->current_context(), NullS, $1.str, $3.str) : - (Item*) new Item_ref(Lex->current_context(), NullS, $1.str, $3.str); + THD *thd= YYTHD; + LEX *lex= thd->lex; + SELECT_LEX *sel= lex->current_select; + if (sel->no_table_names_allowed) + { + my_error(ER_TABLENAME_NOT_ALLOWED_HERE, + MYF(0), $2.str, thd->where); + } + $$= (sel->parsing_place != IN_HAVING || + sel->get_in_sum_expr() > 0) ? + (Item*) new Item_field(Lex->current_context(), NullS, $2.str, $4.str) : + (Item*) new Item_ref(Lex->current_context(), NullS, $2.str, $4.str); } - } - | '.' ident '.' ident - { - THD *thd= YYTHD; - LEX *lex= thd->lex; - SELECT_LEX *sel= lex->current_select; - if (sel->no_table_names_allowed) - { - my_error(ER_TABLENAME_NOT_ALLOWED_HERE, - MYF(0), $2.str, thd->where); - } - $$= (sel->parsing_place != IN_HAVING || - sel->get_in_sum_expr() > 0) ? - (Item*) new Item_field(Lex->current_context(), NullS, $2.str, $4.str) : - (Item*) new Item_ref(Lex->current_context(), NullS, $2.str, $4.str); - } - | ident '.' ident '.' ident - { - THD *thd= YYTHD; - LEX *lex= thd->lex; - SELECT_LEX *sel= lex->current_select; - if (sel->no_table_names_allowed) - { - my_error(ER_TABLENAME_NOT_ALLOWED_HERE, - MYF(0), $3.str, thd->where); - } - $$= (sel->parsing_place != IN_HAVING || - sel->get_in_sum_expr() > 0) ? - (Item*) new Item_field(Lex->current_context(), + | ident '.' ident '.' ident + { + THD *thd= YYTHD; + LEX *lex= thd->lex; + SELECT_LEX *sel= lex->current_select; + if (sel->no_table_names_allowed) + { + my_error(ER_TABLENAME_NOT_ALLOWED_HERE, + MYF(0), $3.str, thd->where); + } + $$= (sel->parsing_place != IN_HAVING || + sel->get_in_sum_expr() > 0) ? + (Item*) new Item_field(Lex->current_context(), + (YYTHD->client_capabilities & + CLIENT_NO_SCHEMA ? NullS : $1.str), + $3.str, $5.str) : + (Item*) new Item_ref(Lex->current_context(), (YYTHD->client_capabilities & - CLIENT_NO_SCHEMA ? NullS : $1.str), - $3.str, $5.str) : - (Item*) new Item_ref(Lex->current_context(), - (YYTHD->client_capabilities & - CLIENT_NO_SCHEMA ? NullS : $1.str), - $3.str, $5.str); - }; - + CLIENT_NO_SCHEMA ? NullS : $1.str), + $3.str, $5.str); + } + ; field_ident: - ident { $$=$1;} - | ident '.' ident '.' ident + ident { $$=$1;} + | ident '.' ident '.' ident { TABLE_LIST *table= (TABLE_LIST*) Select->table_list.first; if (my_strcasecmp(table_alias_charset, $1.str, table->db)) @@ -9700,7 +10119,7 @@ field_ident: } $$=$5; } - | ident '.' ident + | ident '.' ident { TABLE_LIST *table= (TABLE_LIST*) Select->table_list.first; if (my_strcasecmp(table_alias_charset, $1.str, table->alias)) @@ -9710,25 +10129,30 @@ field_ident: } $$=$3; } - | '.' ident { $$=$2;} /* For Delphi */; + | '.' ident { $$=$2;} /* For Delphi */ + ; table_ident: - ident { $$=new Table_ident($1); } - | ident '.' ident { $$=new Table_ident(YYTHD, $1,$3,0);} - | '.' ident { $$=new Table_ident($2);} /* For Delphi */ + ident { $$=new Table_ident($1); } + | ident '.' ident { $$=new Table_ident(YYTHD, $1,$3,0);} + | '.' ident { $$=new Table_ident($2);} /* For Delphi */ ; table_ident_nodb: - ident { LEX_STRING db={(char*) any_db,3}; $$=new Table_ident(YYTHD, db,$1,0); } + ident + { + LEX_STRING db={(char*) any_db,3}; + $$=new Table_ident(YYTHD, db,$1,0); + } ; IDENT_sys: - IDENT { $$= $1; } - | IDENT_QUOTED - { - THD *thd= YYTHD; + IDENT { $$= $1; } + | IDENT_QUOTED + { + THD *thd= YYTHD; - if (thd->charset_is_system_charset) + if (thd->charset_is_system_charset) { CHARSET_INFO *cs= system_charset_info; int dummy_error; @@ -9741,179 +10165,180 @@ IDENT_sys: cs->csname, $1.str + wlen); MYSQL_YYABORT; } - $$= $1; + $$= $1; } - else - thd->convert_string(&$$, system_charset_info, - $1.str, $1.length, thd->charset()); - } - ; + else + thd->convert_string(&$$, system_charset_info, + $1.str, $1.length, thd->charset()); + } + ; TEXT_STRING_sys: - TEXT_STRING - { - THD *thd= YYTHD; + TEXT_STRING + { + THD *thd= YYTHD; - if (thd->charset_is_system_charset) - $$= $1; - else - thd->convert_string(&$$, system_charset_info, - $1.str, $1.length, thd->charset()); - } - ; + if (thd->charset_is_system_charset) + $$= $1; + else + thd->convert_string(&$$, system_charset_info, + $1.str, $1.length, thd->charset()); + } + ; TEXT_STRING_literal: - TEXT_STRING - { - THD *thd= YYTHD; - - if (thd->charset_is_collation_connection) - $$= $1; - else - thd->convert_string(&$$, thd->variables.collation_connection, - $1.str, $1.length, thd->charset()); - } - ; + TEXT_STRING + { + THD *thd= YYTHD; + if (thd->charset_is_collation_connection) + $$= $1; + else + thd->convert_string(&$$, thd->variables.collation_connection, + $1.str, $1.length, thd->charset()); + } + ; TEXT_STRING_filesystem: - TEXT_STRING - { - THD *thd= YYTHD; + TEXT_STRING + { + THD *thd= YYTHD; - if (thd->charset_is_character_set_filesystem) - $$= $1; - else - thd->convert_string(&$$, thd->variables.character_set_filesystem, - $1.str, $1.length, thd->charset()); - } - ; + if (thd->charset_is_character_set_filesystem) + $$= $1; + else + thd->convert_string(&$$, thd->variables.character_set_filesystem, + $1.str, $1.length, thd->charset()); + } + ; ident: - IDENT_sys { $$=$1; } - | READ_ONLY_SYM - { - THD *thd= YYTHD; - $$.str= thd->strmake("read_only",9); - $$.length= 9; - } - | keyword - { - THD *thd= YYTHD; - $$.str= thd->strmake($1.str, $1.length); - $$.length= $1.length; - } - ; + IDENT_sys { $$=$1; } + | READ_ONLY_SYM + { + THD *thd= YYTHD; + $$.str= thd->strmake("read_only",9); + $$.length= 9; + } + | keyword + { + THD *thd= YYTHD; + $$.str= thd->strmake($1.str, $1.length); + $$.length= $1.length; + } + ; label_ident: - IDENT_sys { $$=$1; } - | keyword_sp - { - THD *thd= YYTHD; - $$.str= thd->strmake($1.str, $1.length); - $$.length= $1.length; - } - ; + IDENT_sys { $$=$1; } + | keyword_sp + { + THD *thd= YYTHD; + $$.str= thd->strmake($1.str, $1.length); + $$.length= $1.length; + } + ; ident_or_text: - ident { $$=$1;} - | TEXT_STRING_sys { $$=$1;} - | LEX_HOSTNAME { $$=$1;}; + ident { $$=$1;} + | TEXT_STRING_sys { $$=$1;} + | LEX_HOSTNAME { $$=$1;} + ; user: - ident_or_text - { - THD *thd= YYTHD; - if (!($$=(LEX_USER*) thd->alloc(sizeof(st_lex_user)))) - MYSQL_YYABORT; - $$->user = $1; - $$->host.str= (char *) "%"; - $$->host.length= 1; + ident_or_text + { + THD *thd= YYTHD; + if (!($$=(LEX_USER*) thd->alloc(sizeof(st_lex_user)))) + MYSQL_YYABORT; + $$->user = $1; + $$->host.str= (char *) "%"; + $$->host.length= 1; - if (check_string_char_length(&$$->user, ER(ER_USERNAME), - USERNAME_CHAR_LENGTH, - system_charset_info, 0)) - MYSQL_YYABORT; - } - | ident_or_text '@' ident_or_text - { - THD *thd= YYTHD; - if (!($$=(LEX_USER*) thd->alloc(sizeof(st_lex_user)))) - MYSQL_YYABORT; - $$->user = $1; $$->host=$3; + if (check_string_char_length(&$$->user, ER(ER_USERNAME), + USERNAME_CHAR_LENGTH, + system_charset_info, 0)) + MYSQL_YYABORT; + } + | ident_or_text '@' ident_or_text + { + THD *thd= YYTHD; + if (!($$=(LEX_USER*) thd->alloc(sizeof(st_lex_user)))) + MYSQL_YYABORT; + $$->user = $1; $$->host=$3; - if (check_string_char_length(&$$->user, ER(ER_USERNAME), + if (check_string_char_length(&$$->user, ER(ER_USERNAME), USERNAME_CHAR_LENGTH, system_charset_info, 0) || - check_string_byte_length(&$$->host, ER(ER_HOSTNAME), + check_string_byte_length(&$$->host, ER(ER_HOSTNAME), HOSTNAME_LENGTH)) - MYSQL_YYABORT; - } - | CURRENT_USER optional_braces - { - if (!($$=(LEX_USER*) YYTHD->alloc(sizeof(st_lex_user)))) - MYSQL_YYABORT; - /* - empty LEX_USER means current_user and - will be handled in the get_current_user() function - later - */ - bzero($$, sizeof(LEX_USER)); - }; + MYSQL_YYABORT; + } + | CURRENT_USER optional_braces + { + if (!($$=(LEX_USER*) YYTHD->alloc(sizeof(st_lex_user)))) + MYSQL_YYABORT; + /* + empty LEX_USER means current_user and + will be handled in the get_current_user() function + later + */ + bzero($$, sizeof(LEX_USER)); + } + ; /* Keyword that we allow for identifiers (except SP labels) */ keyword: - keyword_sp {} - | ASCII_SYM {} - | BACKUP_SYM {} - | BEGIN_SYM {} - | BYTE_SYM {} - | CACHE_SYM {} - | CHARSET {} - | CHECKSUM_SYM {} - | CLOSE_SYM {} - | COMMENT_SYM {} - | COMMIT_SYM {} - | CONTAINS_SYM {} + keyword_sp {} + | ASCII_SYM {} + | BACKUP_SYM {} + | BEGIN_SYM {} + | BYTE_SYM {} + | CACHE_SYM {} + | CHARSET {} + | CHECKSUM_SYM {} + | CLOSE_SYM {} + | COMMENT_SYM {} + | COMMIT_SYM {} + | CONTAINS_SYM {} | DEALLOCATE_SYM {} - | DO_SYM {} - | END {} - | EXECUTE_SYM {} - | FLUSH_SYM {} - | HANDLER_SYM {} - | HELP_SYM {} - | HOST_SYM {} + | DO_SYM {} + | END {} + | EXECUTE_SYM {} + | FLUSH_SYM {} + | HANDLER_SYM {} + | HELP_SYM {} + | HOST_SYM {} | INSTALL_SYM {} - | LANGUAGE_SYM {} - | NO_SYM {} - | OPEN_SYM {} - | OPTIONS_SYM {} - | OWNER_SYM {} + | LANGUAGE_SYM {} + | NO_SYM {} + | OPEN_SYM {} + | OPTIONS_SYM {} + | OWNER_SYM {} | PARSER_SYM {} - | PARTITION_SYM {} + | PARTITION_SYM {} | PORT_SYM {} | PREPARE_SYM {} - | REMOVE_SYM {} - | REPAIR {} - | RESET_SYM {} - | RESTORE_SYM {} - | ROLLBACK_SYM {} - | SAVEPOINT_SYM {} - | SECURITY_SYM {} + | REMOVE_SYM {} + | REPAIR {} + | RESET_SYM {} + | RESTORE_SYM {} + | ROLLBACK_SYM {} + | SAVEPOINT_SYM {} + | SECURITY_SYM {} | SERVER_SYM {} - | SIGNED_SYM {} - | SOCKET_SYM {} - | SLAVE {} + | SIGNED_SYM {} + | SOCKET_SYM {} + | SLAVE {} | SONAME_SYM {} - | START_SYM {} - | STOP_SYM {} - | TRUNCATE_SYM {} - | UNICODE_SYM {} + | START_SYM {} + | STOP_SYM {} + | TRUNCATE_SYM {} + | UNICODE_SYM {} | UNINSTALL_SYM {} - | WRAPPER_SYM {} + | WRAPPER_SYM {} | XA_SYM {} | UPGRADE_SYM {} - ; + ; /* * Keywords that we allow for labels in SPs. @@ -9922,586 +10347,590 @@ keyword: * conflicts. */ keyword_sp: - ACTION {} - | ADDDATE_SYM {} - | AFTER_SYM {} - | AGAINST {} - | AGGREGATE_SYM {} - | ALGORITHM_SYM {} - | ANY_SYM {} - | AT_SYM {} - | AUTHORS_SYM {} - | AUTO_INC {} - | AUTOEXTEND_SIZE_SYM {} - | AVG_ROW_LENGTH {} - | AVG_SYM {} - | BINLOG_SYM {} - | BIT_SYM {} - | BOOL_SYM {} - | BOOLEAN_SYM {} - | BTREE_SYM {} - | CASCADED {} - | CHAIN_SYM {} - | CHANGED {} - | CIPHER_SYM {} - | CLIENT_SYM {} - | COALESCE {} - | CODE_SYM {} - | COLLATION_SYM {} - | COLUMNS {} - | COMMITTED_SYM {} - | COMPACT_SYM {} - | COMPLETION_SYM {} - | COMPRESSED_SYM {} - | CONCURRENT {} - | CONNECTION_SYM {} - | CONSISTENT_SYM {} - | CONTRIBUTORS_SYM {} - | CUBE_SYM {} - | DATA_SYM {} - | DATAFILE_SYM {} - | DATETIME {} - | DATE_SYM {} - | DAY_SYM {} - | DEFINER_SYM {} - | DELAY_KEY_WRITE_SYM {} - | DES_KEY_FILE {} - | DIRECTORY_SYM {} - | DISABLE_SYM {} - | DISCARD {} - | DISK_SYM {} - | DUMPFILE {} - | DUPLICATE_SYM {} - | DYNAMIC_SYM {} - | ENDS_SYM {} - | ENUM {} - | ENGINE_SYM {} - | ENGINES_SYM {} - | ERRORS {} - | ESCAPE_SYM {} - | EVENT_SYM {} - | EVENTS_SYM {} - | EVERY_SYM {} - | EXPANSION_SYM {} - | EXTENDED_SYM {} - | EXTENT_SIZE_SYM {} - | FAST_SYM {} - | FOUND_SYM {} - | ENABLE_SYM {} - | FULL {} - | FILE_SYM {} - | FIRST_SYM {} - | FIXED_SYM {} - | FRAC_SECOND_SYM {} - | GEOMETRY_SYM {} - | GEOMETRYCOLLECTION {} - | GET_FORMAT {} - | GRANTS {} - | GLOBAL_SYM {} - | HASH_SYM {} - | HOSTS_SYM {} - | HOUR_SYM {} - | IDENTIFIED_SYM {} - | INVOKER_SYM {} - | IMPORT {} - | INDEXES {} - | INITIAL_SIZE_SYM {} - | ISOLATION {} - | ISSUER_SYM {} - | INNOBASE_SYM {} - | INSERT_METHOD {} - | KEY_BLOCK_SIZE {} - | LAST_SYM {} - | LEAVES {} - | LESS_SYM {} - | LEVEL_SYM {} - | LINESTRING {} - | LIST_SYM {} - | LOCAL_SYM {} - | LOCKS_SYM {} - | LOGFILE_SYM {} - | LOGS_SYM {} - | MAX_ROWS {} - | MASTER_SYM {} - | MASTER_HOST_SYM {} - | MASTER_PORT_SYM {} - | MASTER_LOG_FILE_SYM {} - | MASTER_LOG_POS_SYM {} - | MASTER_USER_SYM {} - | MASTER_PASSWORD_SYM {} - | MASTER_SERVER_ID_SYM {} - | MASTER_CONNECT_RETRY_SYM {} - | MASTER_SSL_SYM {} - | MASTER_SSL_CA_SYM {} - | MASTER_SSL_CAPATH_SYM {} - | MASTER_SSL_CERT_SYM {} - | MASTER_SSL_CIPHER_SYM {} - | MASTER_SSL_KEY_SYM {} - | MAX_CONNECTIONS_PER_HOUR {} - | MAX_QUERIES_PER_HOUR {} - | MAX_SIZE_SYM {} - | MAX_UPDATES_PER_HOUR {} - | MAX_USER_CONNECTIONS_SYM {} - | MAX_VALUE_SYM {} - | MEDIUM_SYM {} - | MEMORY_SYM {} - | MERGE_SYM {} - | MICROSECOND_SYM {} - | MIGRATE_SYM {} - | MINUTE_SYM {} - | MIN_ROWS {} - | MODIFY_SYM {} - | MODE_SYM {} - | MONTH_SYM {} - | MULTILINESTRING {} - | MULTIPOINT {} - | MULTIPOLYGON {} - | MUTEX_SYM {} - | NAME_SYM {} - | NAMES_SYM {} - | NATIONAL_SYM {} - | NCHAR_SYM {} - | NDBCLUSTER_SYM {} - | NEXT_SYM {} - | NEW_SYM {} - | NO_WAIT_SYM {} - | NODEGROUP_SYM {} - | NONE_SYM {} - | NVARCHAR_SYM {} - | OFFSET_SYM {} - | OLD_PASSWORD {} - | ONE_SHOT_SYM {} - | ONE_SYM {} - | PACK_KEYS_SYM {} - | PARTIAL {} - | PARTITIONING_SYM {} - | PARTITIONS_SYM {} - | PASSWORD {} - | PHASE_SYM {} - | PLUGIN_SYM {} - | PLUGINS_SYM {} - | POINT_SYM {} - | POLYGON {} - | PRESERVE_SYM {} - | PREV_SYM {} - | PRIVILEGES {} - | PROCESS {} - | PROCESSLIST_SYM {} - | QUARTER_SYM {} - | QUERY_SYM {} - | QUICK {} - | REBUILD_SYM {} - | RECOVER_SYM {} - | REDO_BUFFER_SIZE_SYM {} - | REDOFILE_SYM {} - | REDUNDANT_SYM {} - | RELAY_LOG_FILE_SYM {} - | RELAY_LOG_POS_SYM {} - | RELAY_THREAD {} - | RELOAD {} - | REORGANIZE_SYM {} - | REPEATABLE_SYM {} - | REPLICATION {} - | RESOURCES {} - | RESUME_SYM {} - | RETURNS_SYM {} - | ROLLUP_SYM {} - | ROUTINE_SYM {} - | ROWS_SYM {} - | ROW_FORMAT_SYM {} - | ROW_SYM {} - | RTREE_SYM {} - | SCHEDULE_SYM {} - | SECOND_SYM {} - | SERIAL_SYM {} - | SERIALIZABLE_SYM {} - | SESSION_SYM {} - | SIMPLE_SYM {} - | SHARE_SYM {} - | SHUTDOWN {} - | SNAPSHOT_SYM {} - | SOUNDS_SYM {} - | SQL_CACHE_SYM {} - | SQL_BUFFER_RESULT {} - | SQL_NO_CACHE_SYM {} - | SQL_THREAD {} - | STARTS_SYM {} - | STATUS_SYM {} - | STORAGE_SYM {} - | STRING_SYM {} - | SUBDATE_SYM {} - | SUBJECT_SYM {} - | SUBPARTITION_SYM {} - | SUBPARTITIONS_SYM {} - | SUPER_SYM {} - | SUSPEND_SYM {} - | TABLES {} - | TABLESPACE {} - | TEMPORARY {} - | TEMPTABLE_SYM {} - | TEXT_SYM {} - | THAN_SYM {} - | TRANSACTION_SYM {} - | TRIGGERS_SYM {} - | TIMESTAMP {} - | TIMESTAMP_ADD {} - | TIMESTAMP_DIFF {} - | TIME_SYM {} - | TYPES_SYM {} - | TYPE_SYM {} - | UDF_RETURNS_SYM {} - | FUNCTION_SYM {} - | UNCOMMITTED_SYM {} - | UNDEFINED_SYM {} - | UNDO_BUFFER_SIZE_SYM {} - | UNDOFILE_SYM {} - | UNKNOWN_SYM {} - | UNTIL_SYM {} - | USER {} - | USE_FRM {} - | VARIABLES {} - | VIEW_SYM {} - | VALUE_SYM {} - | WARNINGS {} - | WAIT_SYM {} - | WEEK_SYM {} - | WORK_SYM {} - | X509_SYM {} - | YEAR_SYM {} - ; + ACTION {} + | ADDDATE_SYM {} + | AFTER_SYM {} + | AGAINST {} + | AGGREGATE_SYM {} + | ALGORITHM_SYM {} + | ANY_SYM {} + | AT_SYM {} + | AUTHORS_SYM {} + | AUTO_INC {} + | AUTOEXTEND_SIZE_SYM {} + | AVG_ROW_LENGTH {} + | AVG_SYM {} + | BINLOG_SYM {} + | BIT_SYM {} + | BOOL_SYM {} + | BOOLEAN_SYM {} + | BTREE_SYM {} + | CASCADED {} + | CHAIN_SYM {} + | CHANGED {} + | CIPHER_SYM {} + | CLIENT_SYM {} + | COALESCE {} + | CODE_SYM {} + | COLLATION_SYM {} + | COLUMNS {} + | COMMITTED_SYM {} + | COMPACT_SYM {} + | COMPLETION_SYM {} + | COMPRESSED_SYM {} + | CONCURRENT {} + | CONNECTION_SYM {} + | CONSISTENT_SYM {} + | CONTRIBUTORS_SYM {} + | CUBE_SYM {} + | DATA_SYM {} + | DATAFILE_SYM {} + | DATETIME {} + | DATE_SYM {} + | DAY_SYM {} + | DEFINER_SYM {} + | DELAY_KEY_WRITE_SYM {} + | DES_KEY_FILE {} + | DIRECTORY_SYM {} + | DISABLE_SYM {} + | DISCARD {} + | DISK_SYM {} + | DUMPFILE {} + | DUPLICATE_SYM {} + | DYNAMIC_SYM {} + | ENDS_SYM {} + | ENUM {} + | ENGINE_SYM {} + | ENGINES_SYM {} + | ERRORS {} + | ESCAPE_SYM {} + | EVENT_SYM {} + | EVENTS_SYM {} + | EVERY_SYM {} + | EXPANSION_SYM {} + | EXTENDED_SYM {} + | EXTENT_SIZE_SYM {} + | FAST_SYM {} + | FOUND_SYM {} + | ENABLE_SYM {} + | FULL {} + | FILE_SYM {} + | FIRST_SYM {} + | FIXED_SYM {} + | FRAC_SECOND_SYM {} + | GEOMETRY_SYM {} + | GEOMETRYCOLLECTION {} + | GET_FORMAT {} + | GRANTS {} + | GLOBAL_SYM {} + | HASH_SYM {} + | HOSTS_SYM {} + | HOUR_SYM {} + | IDENTIFIED_SYM {} + | INVOKER_SYM {} + | IMPORT {} + | INDEXES {} + | INITIAL_SIZE_SYM {} + | ISOLATION {} + | ISSUER_SYM {} + | INNOBASE_SYM {} + | INSERT_METHOD {} + | KEY_BLOCK_SIZE {} + | LAST_SYM {} + | LEAVES {} + | LESS_SYM {} + | LEVEL_SYM {} + | LINESTRING {} + | LIST_SYM {} + | LOCAL_SYM {} + | LOCKS_SYM {} + | LOGFILE_SYM {} + | LOGS_SYM {} + | MAX_ROWS {} + | MASTER_SYM {} + | MASTER_HOST_SYM {} + | MASTER_PORT_SYM {} + | MASTER_LOG_FILE_SYM {} + | MASTER_LOG_POS_SYM {} + | MASTER_USER_SYM {} + | MASTER_PASSWORD_SYM {} + | MASTER_SERVER_ID_SYM {} + | MASTER_CONNECT_RETRY_SYM {} + | MASTER_SSL_SYM {} + | MASTER_SSL_CA_SYM {} + | MASTER_SSL_CAPATH_SYM {} + | MASTER_SSL_CERT_SYM {} + | MASTER_SSL_CIPHER_SYM {} + | MASTER_SSL_KEY_SYM {} + | MAX_CONNECTIONS_PER_HOUR {} + | MAX_QUERIES_PER_HOUR {} + | MAX_SIZE_SYM {} + | MAX_UPDATES_PER_HOUR {} + | MAX_USER_CONNECTIONS_SYM {} + | MAX_VALUE_SYM {} + | MEDIUM_SYM {} + | MEMORY_SYM {} + | MERGE_SYM {} + | MICROSECOND_SYM {} + | MIGRATE_SYM {} + | MINUTE_SYM {} + | MIN_ROWS {} + | MODIFY_SYM {} + | MODE_SYM {} + | MONTH_SYM {} + | MULTILINESTRING {} + | MULTIPOINT {} + | MULTIPOLYGON {} + | MUTEX_SYM {} + | NAME_SYM {} + | NAMES_SYM {} + | NATIONAL_SYM {} + | NCHAR_SYM {} + | NDBCLUSTER_SYM {} + | NEXT_SYM {} + | NEW_SYM {} + | NO_WAIT_SYM {} + | NODEGROUP_SYM {} + | NONE_SYM {} + | NVARCHAR_SYM {} + | OFFSET_SYM {} + | OLD_PASSWORD {} + | ONE_SHOT_SYM {} + | ONE_SYM {} + | PACK_KEYS_SYM {} + | PARTIAL {} + | PARTITIONING_SYM {} + | PARTITIONS_SYM {} + | PASSWORD {} + | PHASE_SYM {} + | PLUGIN_SYM {} + | PLUGINS_SYM {} + | POINT_SYM {} + | POLYGON {} + | PRESERVE_SYM {} + | PREV_SYM {} + | PRIVILEGES {} + | PROCESS {} + | PROCESSLIST_SYM {} + | QUARTER_SYM {} + | QUERY_SYM {} + | QUICK {} + | REBUILD_SYM {} + | RECOVER_SYM {} + | REDO_BUFFER_SIZE_SYM {} + | REDOFILE_SYM {} + | REDUNDANT_SYM {} + | RELAY_LOG_FILE_SYM {} + | RELAY_LOG_POS_SYM {} + | RELAY_THREAD {} + | RELOAD {} + | REORGANIZE_SYM {} + | REPEATABLE_SYM {} + | REPLICATION {} + | RESOURCES {} + | RESUME_SYM {} + | RETURNS_SYM {} + | ROLLUP_SYM {} + | ROUTINE_SYM {} + | ROWS_SYM {} + | ROW_FORMAT_SYM {} + | ROW_SYM {} + | RTREE_SYM {} + | SCHEDULE_SYM {} + | SECOND_SYM {} + | SERIAL_SYM {} + | SERIALIZABLE_SYM {} + | SESSION_SYM {} + | SIMPLE_SYM {} + | SHARE_SYM {} + | SHUTDOWN {} + | SNAPSHOT_SYM {} + | SOUNDS_SYM {} + | SQL_CACHE_SYM {} + | SQL_BUFFER_RESULT {} + | SQL_NO_CACHE_SYM {} + | SQL_THREAD {} + | STARTS_SYM {} + | STATUS_SYM {} + | STORAGE_SYM {} + | STRING_SYM {} + | SUBDATE_SYM {} + | SUBJECT_SYM {} + | SUBPARTITION_SYM {} + | SUBPARTITIONS_SYM {} + | SUPER_SYM {} + | SUSPEND_SYM {} + | TABLES {} + | TABLESPACE {} + | TEMPORARY {} + | TEMPTABLE_SYM {} + | TEXT_SYM {} + | THAN_SYM {} + | TRANSACTION_SYM {} + | TRIGGERS_SYM {} + | TIMESTAMP {} + | TIMESTAMP_ADD {} + | TIMESTAMP_DIFF {} + | TIME_SYM {} + | TYPES_SYM {} + | TYPE_SYM {} + | UDF_RETURNS_SYM {} + | FUNCTION_SYM {} + | UNCOMMITTED_SYM {} + | UNDEFINED_SYM {} + | UNDO_BUFFER_SIZE_SYM {} + | UNDOFILE_SYM {} + | UNKNOWN_SYM {} + | UNTIL_SYM {} + | USER {} + | USE_FRM {} + | VARIABLES {} + | VIEW_SYM {} + | VALUE_SYM {} + | WARNINGS {} + | WAIT_SYM {} + | WEEK_SYM {} + | WORK_SYM {} + | X509_SYM {} + | YEAR_SYM {} + ; /* Option functions */ set: - SET opt_option - { - LEX *lex=Lex; - lex->sql_command= SQLCOM_SET_OPTION; - mysql_init_select(lex); - lex->option_type=OPT_SESSION; - lex->var_list.empty(); - lex->one_shot_set= 0; - } - option_value_list - {} - ; + SET opt_option + { + LEX *lex=Lex; + lex->sql_command= SQLCOM_SET_OPTION; + mysql_init_select(lex); + lex->option_type=OPT_SESSION; + lex->var_list.empty(); + lex->one_shot_set= 0; + } + option_value_list + {} + ; opt_option: - /* empty */ {} - | OPTION {}; + /* empty */ {} + | OPTION {} + ; option_value_list: - option_type_value - | option_value_list ',' option_type_value; + option_type_value + | option_value_list ',' option_type_value + ; option_type_value: - { - THD *thd= YYTHD; - LEX *lex= thd->lex; - Lex_input_stream *lip= thd->m_lip; - - if (lex->sphead) { - /* - If we are in SP we want have own LEX for each assignment. - This is mostly because it is hard for several sp_instr_set - and sp_instr_set_trigger instructions share one LEX. - (Well, it is theoretically possible but adds some extra - overhead on preparation for execution stage and IMO less - robust). + THD *thd= YYTHD; + LEX *lex= thd->lex; + Lex_input_stream *lip= thd->m_lip; - QQ: May be we should simply prohibit group assignments in SP? - */ - lex->sphead->reset_lex(thd); - lex= thd->lex; - - /* Set new LEX as if we at start of set rule. */ - lex->sql_command= SQLCOM_SET_OPTION; - mysql_init_select(lex); - lex->option_type=OPT_SESSION; - lex->var_list.empty(); - lex->one_shot_set= 0; - lex->sphead->m_tmp_query= lip->get_tok_start(); - } - } - ext_option_value - { - THD *thd= YYTHD; - LEX *lex= thd->lex; - Lex_input_stream *lip= thd->m_lip; - - if (lex->sphead) - { - sp_head *sp= lex->sphead; - - if (!lex->var_list.is_empty()) - { + if (lex->sphead) + { /* - We have assignment to user or system variable or - option setting, so we should construct sp_instr_stmt - for it. + If we are in SP we want have own LEX for each assignment. + This is mostly because it is hard for several sp_instr_set + and sp_instr_set_trigger instructions share one LEX. + (Well, it is theoretically possible but adds some extra + overhead on preparation for execution stage and IMO less + robust). + + QQ: May be we should simply prohibit group assignments in SP? */ - LEX_STRING qbuff; - sp_instr_stmt *i; + lex->sphead->reset_lex(thd); + lex= thd->lex; - if (!(i= new sp_instr_stmt(sp->instructions(), lex->spcont, - lex))) - MYSQL_YYABORT; - - /* - Extract the query statement from the tokenizer. The - end is either lip->ptr, if there was no lookahead, - lip->tok_end otherwise. - */ - if (yychar == YYEMPTY) - qbuff.length= lip->get_ptr() - sp->m_tmp_query; - else - qbuff.length= lip->get_tok_end() - sp->m_tmp_query; - - if (!(qbuff.str= (char*) alloc_root(thd->mem_root, - qbuff.length + 5))) - MYSQL_YYABORT; - - strmake(strmake(qbuff.str, "SET ", 4), sp->m_tmp_query, - qbuff.length); - qbuff.length+= 4; - i->m_query= qbuff; - sp->add_instr(i); + /* Set new LEX as if we at start of set rule. */ + lex->sql_command= SQLCOM_SET_OPTION; + mysql_init_select(lex); + lex->option_type=OPT_SESSION; + lex->var_list.empty(); + lex->one_shot_set= 0; + lex->sphead->m_tmp_query= lip->get_tok_start(); } - lex->sphead->restore_lex(thd); } - }; + ext_option_value + { + THD *thd= YYTHD; + LEX *lex= thd->lex; + Lex_input_stream *lip= thd->m_lip; + + if (lex->sphead) + { + sp_head *sp= lex->sphead; + + if (!lex->var_list.is_empty()) + { + /* + We have assignment to user or system variable or + option setting, so we should construct sp_instr_stmt + for it. + */ + LEX_STRING qbuff; + sp_instr_stmt *i; + + if (!(i= new sp_instr_stmt(sp->instructions(), lex->spcont, + lex))) + MYSQL_YYABORT; + + /* + Extract the query statement from the tokenizer. The + end is either lip->ptr, if there was no lookahead, + lip->tok_end otherwise. + */ + if (yychar == YYEMPTY) + qbuff.length= lip->get_ptr() - sp->m_tmp_query; + else + qbuff.length= lip->get_tok_end() - sp->m_tmp_query; + + if (!(qbuff.str= (char*) alloc_root(thd->mem_root, + qbuff.length + 5))) + MYSQL_YYABORT; + + strmake(strmake(qbuff.str, "SET ", 4), sp->m_tmp_query, + qbuff.length); + qbuff.length+= 4; + i->m_query= qbuff; + sp->add_instr(i); + } + lex->sphead->restore_lex(thd); + } + } + ; option_type: - option_type2 {} - | GLOBAL_SYM { $$=OPT_GLOBAL; } - | LOCAL_SYM { $$=OPT_SESSION; } - | SESSION_SYM { $$=OPT_SESSION; } - ; + option_type2 {} + | GLOBAL_SYM { $$=OPT_GLOBAL; } + | LOCAL_SYM { $$=OPT_SESSION; } + | SESSION_SYM { $$=OPT_SESSION; } + ; option_type2: - /* empty */ { $$= OPT_DEFAULT; } - | ONE_SHOT_SYM { Lex->one_shot_set= 1; $$= OPT_SESSION; } - ; + /* empty */ { $$= OPT_DEFAULT; } + | ONE_SHOT_SYM { Lex->one_shot_set= 1; $$= OPT_SESSION; } + ; opt_var_type: - /* empty */ { $$=OPT_SESSION; } - | GLOBAL_SYM { $$=OPT_GLOBAL; } - | LOCAL_SYM { $$=OPT_SESSION; } - | SESSION_SYM { $$=OPT_SESSION; } - ; + /* empty */ { $$=OPT_SESSION; } + | GLOBAL_SYM { $$=OPT_GLOBAL; } + | LOCAL_SYM { $$=OPT_SESSION; } + | SESSION_SYM { $$=OPT_SESSION; } + ; opt_var_ident_type: - /* empty */ { $$=OPT_DEFAULT; } - | GLOBAL_SYM '.' { $$=OPT_GLOBAL; } - | LOCAL_SYM '.' { $$=OPT_SESSION; } - | SESSION_SYM '.' { $$=OPT_SESSION; } - ; + /* empty */ { $$=OPT_DEFAULT; } + | GLOBAL_SYM '.' { $$=OPT_GLOBAL; } + | LOCAL_SYM '.' { $$=OPT_SESSION; } + | SESSION_SYM '.' { $$=OPT_SESSION; } + ; ext_option_value: - sys_option_value - | option_type2 option_value; + sys_option_value + | option_type2 option_value + ; sys_option_value: - option_type internal_variable_name equal set_expr_or_default - { - LEX *lex=Lex; - - if ($2.var == trg_new_row_fake_var) + option_type internal_variable_name equal set_expr_or_default { - /* We are in trigger and assigning value to field of new row */ - Item *it; - Item_trigger_field *trg_fld; - sp_instr_set_trigger_field *sp_fld; - LINT_INIT(sp_fld); - if ($1) + LEX *lex=Lex; + + if ($2.var == trg_new_row_fake_var) { - my_parse_error(ER(ER_SYNTAX_ERROR)); - MYSQL_YYABORT; + /* We are in trigger and assigning value to field of new row */ + Item *it; + Item_trigger_field *trg_fld; + sp_instr_set_trigger_field *sp_fld; + LINT_INIT(sp_fld); + if ($1) + { + my_parse_error(ER(ER_SYNTAX_ERROR)); + MYSQL_YYABORT; + } + if ($4) + it= $4; + else + { + /* QQ: Shouldn't this be field's default value ? */ + it= new Item_null(); + } + + DBUG_ASSERT(lex->trg_chistics.action_time == TRG_ACTION_BEFORE && + (lex->trg_chistics.event == TRG_EVENT_INSERT || + lex->trg_chistics.event == TRG_EVENT_UPDATE)); + if (!(trg_fld= new Item_trigger_field(Lex->current_context(), + Item_trigger_field::NEW_ROW, + $2.base_name.str, + UPDATE_ACL, FALSE)) || + !(sp_fld= new sp_instr_set_trigger_field(lex->sphead-> + instructions(), + lex->spcont, + trg_fld, + it, lex))) + MYSQL_YYABORT; + + /* + Let us add this item to list of all Item_trigger_field + objects in trigger. + */ + lex->trg_table_fields.link_in_list((uchar *)trg_fld, + (uchar **) &trg_fld-> + next_trg_field); + + lex->sphead->add_instr(sp_fld); + } + else if ($2.var) + { /* System variable */ + if ($1) + lex->option_type= $1; + lex->var_list.push_back(new set_var(lex->option_type, $2.var, + &$2.base_name, $4)); } - if ($4) - it= $4; else { - /* QQ: Shouldn't this be field's default value ? */ - it= new Item_null(); + /* An SP local variable */ + sp_pcontext *ctx= lex->spcont; + sp_variable_t *spv; + sp_instr_set *sp_set; + Item *it; + if ($1) + { + my_parse_error(ER(ER_SYNTAX_ERROR)); + MYSQL_YYABORT; + } + + spv= ctx->find_variable(&$2.base_name); + + if ($4) + it= $4; + else if (spv->dflt) + it= spv->dflt; + else + it= new Item_null(); + sp_set= new sp_instr_set(lex->sphead->instructions(), ctx, + spv->offset, it, spv->type, lex, TRUE); + lex->sphead->add_instr(sp_set); } - - DBUG_ASSERT(lex->trg_chistics.action_time == TRG_ACTION_BEFORE && - (lex->trg_chistics.event == TRG_EVENT_INSERT || - lex->trg_chistics.event == TRG_EVENT_UPDATE)); - if (!(trg_fld= new Item_trigger_field(Lex->current_context(), - Item_trigger_field::NEW_ROW, - $2.base_name.str, - UPDATE_ACL, FALSE)) || - !(sp_fld= new sp_instr_set_trigger_field(lex->sphead-> - instructions(), - lex->spcont, - trg_fld, - it, lex))) - MYSQL_YYABORT; - - /* - Let us add this item to list of all Item_trigger_field - objects in trigger. - */ - lex->trg_table_fields.link_in_list((uchar *)trg_fld, - (uchar **) &trg_fld-> - next_trg_field); - - lex->sphead->add_instr(sp_fld); } - else if ($2.var) - { /* System variable */ - if ($1) - lex->option_type= $1; - lex->var_list.push_back(new set_var(lex->option_type, $2.var, - &$2.base_name, $4)); - } - else - { - /* An SP local variable */ - sp_pcontext *ctx= lex->spcont; - sp_variable_t *spv; - sp_instr_set *sp_set; - Item *it; - if ($1) - { - my_parse_error(ER(ER_SYNTAX_ERROR)); - MYSQL_YYABORT; - } - - spv= ctx->find_variable(&$2.base_name); - - if ($4) - it= $4; - else if (spv->dflt) - it= spv->dflt; - else - it= new Item_null(); - sp_set= new sp_instr_set(lex->sphead->instructions(), ctx, - spv->offset, it, spv->type, lex, TRUE); - lex->sphead->add_instr(sp_set); - } - } | option_type TRANSACTION_SYM ISOLATION LEVEL_SYM isolation_types - { - LEX *lex=Lex; - lex->option_type= $1; - lex->var_list.push_back(new set_var(lex->option_type, - find_sys_var(YYTHD, "tx_isolation"), - &null_lex_str, - new Item_int((int32) $5))); - } + { + LEX *lex=Lex; + lex->option_type= $1; + lex->var_list.push_back(new set_var(lex->option_type, + find_sys_var(YYTHD, "tx_isolation"), + &null_lex_str, + new Item_int((int32) $5))); + } ; option_value: - '@' ident_or_text equal expr - { - Lex->var_list.push_back(new set_var_user(new Item_func_set_user_var($2,$4))); - } - | '@' '@' opt_var_ident_type internal_variable_name equal set_expr_or_default - { - LEX *lex=Lex; - lex->var_list.push_back(new set_var($3, $4.var, &$4.base_name, $6)); - } - | charset old_or_new_charset_name_or_default - { - THD *thd= YYTHD; - LEX *lex= thd->lex; - $2= $2 ? $2: global_system_variables.character_set_client; - lex->var_list.push_back(new set_var_collation_client($2,thd->variables.collation_database,$2)); - } + '@' ident_or_text equal expr + { + Lex->var_list.push_back(new set_var_user(new Item_func_set_user_var($2,$4))); + } + | '@' '@' opt_var_ident_type internal_variable_name equal set_expr_or_default + { + LEX *lex=Lex; + lex->var_list.push_back(new set_var($3, $4.var, &$4.base_name, $6)); + } + | charset old_or_new_charset_name_or_default + { + THD *thd= YYTHD; + LEX *lex= thd->lex; + $2= $2 ? $2: global_system_variables.character_set_client; + lex->var_list.push_back(new set_var_collation_client($2,thd->variables.collation_database,$2)); + } | NAMES_SYM equal expr - { - LEX *lex= Lex; + { + LEX *lex= Lex; sp_pcontext *spc= lex->spcont; - LEX_STRING names; + LEX_STRING names; - names.str= (char *)"names"; - names.length= 5; - if (spc && spc->find_variable(&names)) + names.str= (char *)"names"; + names.length= 5; + if (spc && spc->find_variable(&names)) my_error(ER_SP_BAD_VAR_SHADOW, MYF(0), names.str); else my_parse_error(ER(ER_SYNTAX_ERROR)); - MYSQL_YYABORT; - } - | NAMES_SYM charset_name_or_default opt_collate - { - LEX *lex= Lex; - $2= $2 ? $2 : global_system_variables.character_set_client; - $3= $3 ? $3 : $2; - if (!my_charset_same($2,$3)) - { - my_error(ER_COLLATION_CHARSET_MISMATCH, MYF(0), - $3->name, $2->csname); - MYSQL_YYABORT; - } - lex->var_list.push_back(new set_var_collation_client($3,$3,$3)); - } - | PASSWORD equal text_or_password - { - THD *thd= YYTHD; - LEX *lex= thd->lex; - LEX_USER *user; + MYSQL_YYABORT; + } + | NAMES_SYM charset_name_or_default opt_collate + { + LEX *lex= Lex; + $2= $2 ? $2 : global_system_variables.character_set_client; + $3= $3 ? $3 : $2; + if (!my_charset_same($2,$3)) + { + my_error(ER_COLLATION_CHARSET_MISMATCH, MYF(0), + $3->name, $2->csname); + MYSQL_YYABORT; + } + lex->var_list.push_back(new set_var_collation_client($3,$3,$3)); + } + | PASSWORD equal text_or_password + { + THD *thd= YYTHD; + LEX *lex= thd->lex; + LEX_USER *user; sp_pcontext *spc= lex->spcont; - LEX_STRING pw; + LEX_STRING pw; - pw.str= (char *)"password"; - pw.length= 8; - if (spc && spc->find_variable(&pw)) - { + pw.str= (char *)"password"; + pw.length= 8; + if (spc && spc->find_variable(&pw)) + { my_error(ER_SP_BAD_VAR_SHADOW, MYF(0), pw.str); - MYSQL_YYABORT; - } - if (!(user=(LEX_USER*) thd->alloc(sizeof(LEX_USER)))) - MYSQL_YYABORT; - user->host=null_lex_str; - user->user.str=thd->security_ctx->priv_user; - thd->lex->var_list.push_back(new set_var_password(user, $3)); - } - | PASSWORD FOR_SYM user equal text_or_password - { - Lex->var_list.push_back(new set_var_password($3,$5)); - } - ; + MYSQL_YYABORT; + } + if (!(user=(LEX_USER*) thd->alloc(sizeof(LEX_USER)))) + MYSQL_YYABORT; + user->host=null_lex_str; + user->user.str=thd->security_ctx->priv_user; + thd->lex->var_list.push_back(new set_var_password(user, $3)); + } + | PASSWORD FOR_SYM user equal text_or_password + { + Lex->var_list.push_back(new set_var_password($3,$5)); + } + ; internal_variable_name: - ident - { - THD *thd= YYTHD; - LEX *lex= thd->lex; - sp_pcontext *spc= lex->spcont; - sp_variable_t *spv; + ident + { + THD *thd= YYTHD; + LEX *lex= thd->lex; + sp_pcontext *spc= lex->spcont; + sp_variable_t *spv; - /* We have to lookup here since local vars can shadow sysvars */ - if (!spc || !(spv = spc->find_variable(&$1))) - { - /* Not an SP local variable */ - sys_var *tmp=find_sys_var(thd, $1.str, $1.length); - if (!tmp) - MYSQL_YYABORT; - $$.var= tmp; - $$.base_name= null_lex_str; - if (spc && tmp == &sys_autocommit) + /* We have to lookup here since local vars can shadow sysvars */ + if (!spc || !(spv = spc->find_variable(&$1))) { - /* - We don't allow setting AUTOCOMMIT from a stored function - or trigger. - */ - lex->sphead->m_flags|= sp_head::HAS_SET_AUTOCOMMIT_STMT; + /* Not an SP local variable */ + sys_var *tmp=find_sys_var(thd, $1.str, $1.length); + if (!tmp) + MYSQL_YYABORT; + $$.var= tmp; + $$.base_name= null_lex_str; + if (spc && tmp == &sys_autocommit) + { + /* + We don't allow setting AUTOCOMMIT from a stored function + or trigger. + */ + lex->sphead->m_flags|= sp_head::HAS_SET_AUTOCOMMIT_STMT; + } } - } - else - { - /* An SP local variable */ - $$.var= NULL; - $$.base_name= $1; - } - } - | ident '.' ident - { + else + { + /* An SP local variable */ + $$.var= NULL; + $$.base_name= $1; + } + } + | ident '.' ident + { LEX *lex= Lex; if (check_reserved_words(&$1)) { @@ -10542,522 +10971,533 @@ internal_variable_name: $$.var= tmp; $$.base_name= $1; } - } - | DEFAULT '.' ident - { - sys_var *tmp=find_sys_var(YYTHD, $3.str, $3.length); - if (!tmp) - MYSQL_YYABORT; - if (!tmp->is_struct()) - my_error(ER_VARIABLE_IS_NOT_STRUCT, MYF(0), $3.str); - $$.var= tmp; - $$.base_name.str= (char*) "default"; - $$.base_name.length= 7; - } + } + | DEFAULT '.' ident + { + sys_var *tmp=find_sys_var(YYTHD, $3.str, $3.length); + if (!tmp) + MYSQL_YYABORT; + if (!tmp->is_struct()) + my_error(ER_VARIABLE_IS_NOT_STRUCT, MYF(0), $3.str); + $$.var= tmp; + $$.base_name.str= (char*) "default"; + $$.base_name.length= 7; + } ; isolation_types: - READ_SYM UNCOMMITTED_SYM { $$= ISO_READ_UNCOMMITTED; } - | READ_SYM COMMITTED_SYM { $$= ISO_READ_COMMITTED; } - | REPEATABLE_SYM READ_SYM { $$= ISO_REPEATABLE_READ; } - | SERIALIZABLE_SYM { $$= ISO_SERIALIZABLE; } - ; + READ_SYM UNCOMMITTED_SYM { $$= ISO_READ_UNCOMMITTED; } + | READ_SYM COMMITTED_SYM { $$= ISO_READ_COMMITTED; } + | REPEATABLE_SYM READ_SYM { $$= ISO_REPEATABLE_READ; } + | SERIALIZABLE_SYM { $$= ISO_SERIALIZABLE; } + ; text_or_password: - TEXT_STRING { $$=$1.str;} - | PASSWORD '(' TEXT_STRING ')' - { - $$= $3.length ? YYTHD->variables.old_passwords ? - Item_func_old_password::alloc(YYTHD, $3.str) : - Item_func_password::alloc(YYTHD, $3.str) : - $3.str; - } - | OLD_PASSWORD '(' TEXT_STRING ')' - { - $$= $3.length ? Item_func_old_password::alloc(YYTHD, $3.str) : - $3.str; - } - ; + TEXT_STRING { $$=$1.str;} + | PASSWORD '(' TEXT_STRING ')' + { + $$= $3.length ? YYTHD->variables.old_passwords ? + Item_func_old_password::alloc(YYTHD, $3.str) : + Item_func_password::alloc(YYTHD, $3.str) : + $3.str; + } + | OLD_PASSWORD '(' TEXT_STRING ')' + { + $$= $3.length ? Item_func_old_password::alloc(YYTHD, $3.str) : + $3.str; + } + ; set_expr_or_default: - expr { $$=$1; } - | DEFAULT { $$=0; } - | ON { $$=new Item_string("ON", 2, system_charset_info); } - | ALL { $$=new Item_string("ALL", 3, system_charset_info); } - | BINARY { $$=new Item_string("binary", 6, system_charset_info); } - ; - + expr { $$=$1; } + | DEFAULT { $$=0; } + | ON { $$=new Item_string("ON", 2, system_charset_info); } + | ALL { $$=new Item_string("ALL", 3, system_charset_info); } + | BINARY { $$=new Item_string("binary", 6, system_charset_info); } + ; /* Lock function */ lock: - LOCK_SYM table_or_tables - { - LEX *lex= Lex; + LOCK_SYM table_or_tables + { + LEX *lex= Lex; - if (lex->sphead) - { - my_error(ER_SP_BADSTATEMENT, MYF(0), "LOCK"); - MYSQL_YYABORT; - } - lex->sql_command= SQLCOM_LOCK_TABLES; - } - table_lock_list - {} - ; + if (lex->sphead) + { + my_error(ER_SP_BADSTATEMENT, MYF(0), "LOCK"); + MYSQL_YYABORT; + } + lex->sql_command= SQLCOM_LOCK_TABLES; + } + table_lock_list + {} + ; table_or_tables: - TABLE_SYM - | TABLES; + TABLE_SYM + | TABLES + ; table_lock_list: - table_lock - | table_lock_list ',' table_lock; + table_lock + | table_lock_list ',' table_lock + ; table_lock: - table_ident opt_table_alias lock_option - { - if (!Select->add_table_to_list(YYTHD, $1, $2, 0, (thr_lock_type) $3)) - MYSQL_YYABORT; - } + table_ident opt_table_alias lock_option + { + if (!Select->add_table_to_list(YYTHD, $1, $2, 0, (thr_lock_type) $3)) + MYSQL_YYABORT; + } ; lock_option: - READ_SYM { $$=TL_READ_NO_INSERT; } - | WRITE_SYM { $$=TL_WRITE_DEFAULT; } - | LOW_PRIORITY WRITE_SYM { $$=TL_WRITE_LOW_PRIORITY; } - | READ_SYM LOCAL_SYM { $$= TL_READ; } + READ_SYM { $$= TL_READ_NO_INSERT; } + | WRITE_SYM { $$= TL_WRITE_DEFAULT; } + | LOW_PRIORITY WRITE_SYM { $$= TL_WRITE_LOW_PRIORITY; } + | READ_SYM LOCAL_SYM { $$= TL_READ; } ; unlock: - UNLOCK_SYM - { - LEX *lex= Lex; + UNLOCK_SYM + { + LEX *lex= Lex; - if (lex->sphead) - { - my_error(ER_SP_BADSTATEMENT, MYF(0), "UNLOCK"); - MYSQL_YYABORT; - } - lex->sql_command= SQLCOM_UNLOCK_TABLES; - } - table_or_tables - {} + if (lex->sphead) + { + my_error(ER_SP_BADSTATEMENT, MYF(0), "UNLOCK"); + MYSQL_YYABORT; + } + lex->sql_command= SQLCOM_UNLOCK_TABLES; + } + table_or_tables + {} ; - /* ** Handler: direct access to ISAM functions */ handler: - HANDLER_SYM table_ident OPEN_SYM opt_table_alias - { - LEX *lex= Lex; - if (lex->sphead) - { - my_error(ER_SP_BADSTATEMENT, MYF(0), "HANDLER"); - MYSQL_YYABORT; - } - lex->sql_command = SQLCOM_HA_OPEN; - if (!lex->current_select->add_table_to_list(lex->thd, $2, $4, 0)) - MYSQL_YYABORT; - } - | HANDLER_SYM table_ident_nodb CLOSE_SYM - { - LEX *lex= Lex; - if (lex->sphead) - { - my_error(ER_SP_BADSTATEMENT, MYF(0), "HANDLER"); - MYSQL_YYABORT; - } - lex->sql_command = SQLCOM_HA_CLOSE; - if (!lex->current_select->add_table_to_list(lex->thd, $2, 0, 0)) - MYSQL_YYABORT; - } - | HANDLER_SYM table_ident_nodb READ_SYM - { - LEX *lex=Lex; - if (lex->sphead) - { - my_error(ER_SP_BADSTATEMENT, MYF(0), "HANDLER"); - MYSQL_YYABORT; - } - lex->expr_allows_subselect= FALSE; - lex->sql_command = SQLCOM_HA_READ; - lex->ha_rkey_mode= HA_READ_KEY_EXACT; /* Avoid purify warnings */ - lex->current_select->select_limit= new Item_int((int32) 1); - lex->current_select->offset_limit= 0; - if (!lex->current_select->add_table_to_list(lex->thd, $2, 0, 0)) - MYSQL_YYABORT; - } - handler_read_or_scan where_clause opt_limit_clause - { - Lex->expr_allows_subselect= TRUE; - } + HANDLER_SYM table_ident OPEN_SYM opt_table_alias + { + LEX *lex= Lex; + if (lex->sphead) + { + my_error(ER_SP_BADSTATEMENT, MYF(0), "HANDLER"); + MYSQL_YYABORT; + } + lex->sql_command = SQLCOM_HA_OPEN; + if (!lex->current_select->add_table_to_list(lex->thd, $2, $4, 0)) + MYSQL_YYABORT; + } + | HANDLER_SYM table_ident_nodb CLOSE_SYM + { + LEX *lex= Lex; + if (lex->sphead) + { + my_error(ER_SP_BADSTATEMENT, MYF(0), "HANDLER"); + MYSQL_YYABORT; + } + lex->sql_command = SQLCOM_HA_CLOSE; + if (!lex->current_select->add_table_to_list(lex->thd, $2, 0, 0)) + MYSQL_YYABORT; + } + | HANDLER_SYM table_ident_nodb READ_SYM + { + LEX *lex=Lex; + if (lex->sphead) + { + my_error(ER_SP_BADSTATEMENT, MYF(0), "HANDLER"); + MYSQL_YYABORT; + } + lex->expr_allows_subselect= FALSE; + lex->sql_command = SQLCOM_HA_READ; + lex->ha_rkey_mode= HA_READ_KEY_EXACT; /* Avoid purify warnings */ + lex->current_select->select_limit= new Item_int((int32) 1); + lex->current_select->offset_limit= 0; + if (!lex->current_select->add_table_to_list(lex->thd, $2, 0, 0)) + MYSQL_YYABORT; + } + handler_read_or_scan where_clause opt_limit_clause + { + Lex->expr_allows_subselect= TRUE; + } ; handler_read_or_scan: - handler_scan_function { Lex->ident= null_lex_str; } + handler_scan_function { Lex->ident= null_lex_str; } | ident handler_rkey_function { Lex->ident= $1; } ; handler_scan_function: - FIRST_SYM { Lex->ha_read_mode = RFIRST; } - | NEXT_SYM { Lex->ha_read_mode = RNEXT; } + FIRST_SYM { Lex->ha_read_mode = RFIRST; } + | NEXT_SYM { Lex->ha_read_mode = RNEXT; } ; handler_rkey_function: - FIRST_SYM { Lex->ha_read_mode = RFIRST; } - | NEXT_SYM { Lex->ha_read_mode = RNEXT; } - | PREV_SYM { Lex->ha_read_mode = RPREV; } - | LAST_SYM { Lex->ha_read_mode = RLAST; } - | handler_rkey_mode - { - LEX *lex=Lex; - lex->ha_read_mode = RKEY; - lex->ha_rkey_mode=$1; - if (!(lex->insert_list = new List_item)) - MYSQL_YYABORT; - } '(' values ')' { } + FIRST_SYM { Lex->ha_read_mode = RFIRST; } + | NEXT_SYM { Lex->ha_read_mode = RNEXT; } + | PREV_SYM { Lex->ha_read_mode = RPREV; } + | LAST_SYM { Lex->ha_read_mode = RLAST; } + | handler_rkey_mode + { + LEX *lex=Lex; + lex->ha_read_mode = RKEY; + lex->ha_rkey_mode=$1; + if (!(lex->insert_list = new List_item)) + MYSQL_YYABORT; + } + '(' values ')' + {} ; handler_rkey_mode: - EQ { $$=HA_READ_KEY_EXACT; } - | GE { $$=HA_READ_KEY_OR_NEXT; } - | LE { $$=HA_READ_KEY_OR_PREV; } - | GT_SYM { $$=HA_READ_AFTER_KEY; } - | LT { $$=HA_READ_BEFORE_KEY; } + EQ { $$=HA_READ_KEY_EXACT; } + | GE { $$=HA_READ_KEY_OR_NEXT; } + | LE { $$=HA_READ_KEY_OR_PREV; } + | GT_SYM { $$=HA_READ_AFTER_KEY; } + | LT { $$=HA_READ_BEFORE_KEY; } ; /* GRANT / REVOKE */ revoke: - REVOKE clear_privileges revoke_command - {} + REVOKE clear_privileges revoke_command + {} ; revoke_command: - grant_privileges ON opt_table grant_ident FROM grant_list - { - LEX *lex= Lex; - lex->sql_command= SQLCOM_REVOKE; - lex->type= 0; - } - | - grant_privileges ON FUNCTION_SYM grant_ident FROM grant_list - { - LEX *lex= Lex; - if (lex->columns.elements) + grant_privileges ON opt_table grant_ident FROM grant_list { - my_parse_error(ER(ER_SYNTAX_ERROR)); - MYSQL_YYABORT; + LEX *lex= Lex; + lex->sql_command= SQLCOM_REVOKE; + lex->type= 0; } - lex->sql_command= SQLCOM_REVOKE; - lex->type= TYPE_ENUM_FUNCTION; - - } - | - grant_privileges ON PROCEDURE grant_ident FROM grant_list - { - LEX *lex= Lex; - if (lex->columns.elements) + | grant_privileges ON FUNCTION_SYM grant_ident FROM grant_list { - my_parse_error(ER(ER_SYNTAX_ERROR)); - MYSQL_YYABORT; + LEX *lex= Lex; + if (lex->columns.elements) + { + my_parse_error(ER(ER_SYNTAX_ERROR)); + MYSQL_YYABORT; + } + lex->sql_command= SQLCOM_REVOKE; + lex->type= TYPE_ENUM_FUNCTION; } - lex->sql_command= SQLCOM_REVOKE; - lex->type= TYPE_ENUM_PROCEDURE; - } - | - ALL opt_privileges ',' GRANT OPTION FROM grant_list - { - Lex->sql_command = SQLCOM_REVOKE_ALL; - } - ; + | grant_privileges ON PROCEDURE grant_ident FROM grant_list + { + LEX *lex= Lex; + if (lex->columns.elements) + { + my_parse_error(ER(ER_SYNTAX_ERROR)); + MYSQL_YYABORT; + } + lex->sql_command= SQLCOM_REVOKE; + lex->type= TYPE_ENUM_PROCEDURE; + } + | ALL opt_privileges ',' GRANT OPTION FROM grant_list + { + Lex->sql_command = SQLCOM_REVOKE_ALL; + } + ; grant: - GRANT clear_privileges grant_command - {} + GRANT clear_privileges grant_command + {} ; grant_command: - grant_privileges ON opt_table grant_ident TO_SYM grant_list - require_clause grant_options - { - LEX *lex= Lex; - lex->sql_command= SQLCOM_GRANT; - lex->type= 0; - } - | - grant_privileges ON FUNCTION_SYM grant_ident TO_SYM grant_list - require_clause grant_options - { - LEX *lex= Lex; - if (lex->columns.elements) + grant_privileges ON opt_table grant_ident TO_SYM grant_list + require_clause grant_options { - my_parse_error(ER(ER_SYNTAX_ERROR)); - MYSQL_YYABORT; + LEX *lex= Lex; + lex->sql_command= SQLCOM_GRANT; + lex->type= 0; } - lex->sql_command= SQLCOM_GRANT; - lex->type= TYPE_ENUM_FUNCTION; - } - | - grant_privileges ON PROCEDURE grant_ident TO_SYM grant_list - require_clause grant_options - { - LEX *lex= Lex; - if (lex->columns.elements) + | grant_privileges ON FUNCTION_SYM grant_ident TO_SYM grant_list + require_clause grant_options { - my_parse_error(ER(ER_SYNTAX_ERROR)); - MYSQL_YYABORT; + LEX *lex= Lex; + if (lex->columns.elements) + { + my_parse_error(ER(ER_SYNTAX_ERROR)); + MYSQL_YYABORT; + } + lex->sql_command= SQLCOM_GRANT; + lex->type= TYPE_ENUM_FUNCTION; + } + | grant_privileges ON PROCEDURE grant_ident TO_SYM grant_list + require_clause grant_options + { + LEX *lex= Lex; + if (lex->columns.elements) + { + my_parse_error(ER(ER_SYNTAX_ERROR)); + MYSQL_YYABORT; + } + lex->sql_command= SQLCOM_GRANT; + lex->type= TYPE_ENUM_PROCEDURE; } - lex->sql_command= SQLCOM_GRANT; - lex->type= TYPE_ENUM_PROCEDURE; - } ; opt_table: - /* Empty */ - | TABLE_SYM ; - + /* Empty */ + | TABLE_SYM + ; + grant_privileges: - object_privilege_list { } - | ALL opt_privileges - { - Lex->all_privileges= 1; - Lex->grant= GLOBAL_ACLS; - } + object_privilege_list {} + | ALL opt_privileges + { + Lex->all_privileges= 1; + Lex->grant= GLOBAL_ACLS; + } ; opt_privileges: - /* empty */ - | PRIVILEGES - ; + /* empty */ + | PRIVILEGES + ; object_privilege_list: - object_privilege - | object_privilege_list ',' object_privilege; + object_privilege + | object_privilege_list ',' object_privilege + ; object_privilege: - SELECT_SYM { Lex->which_columns = SELECT_ACL;} opt_column_list {} - | INSERT { Lex->which_columns = INSERT_ACL;} opt_column_list {} - | UPDATE_SYM { Lex->which_columns = UPDATE_ACL; } opt_column_list {} - | REFERENCES { Lex->which_columns = REFERENCES_ACL;} opt_column_list {} - | DELETE_SYM { Lex->grant |= DELETE_ACL;} - | USAGE {} - | INDEX_SYM { Lex->grant |= INDEX_ACL;} - | ALTER { Lex->grant |= ALTER_ACL;} - | CREATE { Lex->grant |= CREATE_ACL;} - | DROP { Lex->grant |= DROP_ACL;} - | EXECUTE_SYM { Lex->grant |= EXECUTE_ACL;} - | RELOAD { Lex->grant |= RELOAD_ACL;} - | SHUTDOWN { Lex->grant |= SHUTDOWN_ACL;} - | PROCESS { Lex->grant |= PROCESS_ACL;} - | FILE_SYM { Lex->grant |= FILE_ACL;} - | GRANT OPTION { Lex->grant |= GRANT_ACL;} - | SHOW DATABASES { Lex->grant |= SHOW_DB_ACL;} - | SUPER_SYM { Lex->grant |= SUPER_ACL;} - | CREATE TEMPORARY TABLES { Lex->grant |= CREATE_TMP_ACL;} - | LOCK_SYM TABLES { Lex->grant |= LOCK_TABLES_ACL; } - | REPLICATION SLAVE { Lex->grant |= REPL_SLAVE_ACL; } - | REPLICATION CLIENT_SYM { Lex->grant |= REPL_CLIENT_ACL; } - | CREATE VIEW_SYM { Lex->grant |= CREATE_VIEW_ACL; } - | SHOW VIEW_SYM { Lex->grant |= SHOW_VIEW_ACL; } - | CREATE ROUTINE_SYM { Lex->grant |= CREATE_PROC_ACL; } - | ALTER ROUTINE_SYM { Lex->grant |= ALTER_PROC_ACL; } - | CREATE USER { Lex->grant |= CREATE_USER_ACL; } - | EVENT_SYM { Lex->grant |= EVENT_ACL;} - | TRIGGER_SYM { Lex->grant |= TRIGGER_ACL; } - ; - + SELECT_SYM + { Lex->which_columns = SELECT_ACL;} + opt_column_list {} + | INSERT + { Lex->which_columns = INSERT_ACL;} + opt_column_list {} + | UPDATE_SYM + { Lex->which_columns = UPDATE_ACL; } + opt_column_list {} + | REFERENCES + { Lex->which_columns = REFERENCES_ACL;} + opt_column_list {} + | DELETE_SYM { Lex->grant |= DELETE_ACL;} + | USAGE {} + | INDEX_SYM { Lex->grant |= INDEX_ACL;} + | ALTER { Lex->grant |= ALTER_ACL;} + | CREATE { Lex->grant |= CREATE_ACL;} + | DROP { Lex->grant |= DROP_ACL;} + | EXECUTE_SYM { Lex->grant |= EXECUTE_ACL;} + | RELOAD { Lex->grant |= RELOAD_ACL;} + | SHUTDOWN { Lex->grant |= SHUTDOWN_ACL;} + | PROCESS { Lex->grant |= PROCESS_ACL;} + | FILE_SYM { Lex->grant |= FILE_ACL;} + | GRANT OPTION { Lex->grant |= GRANT_ACL;} + | SHOW DATABASES { Lex->grant |= SHOW_DB_ACL;} + | SUPER_SYM { Lex->grant |= SUPER_ACL;} + | CREATE TEMPORARY TABLES { Lex->grant |= CREATE_TMP_ACL;} + | LOCK_SYM TABLES { Lex->grant |= LOCK_TABLES_ACL; } + | REPLICATION SLAVE { Lex->grant |= REPL_SLAVE_ACL; } + | REPLICATION CLIENT_SYM { Lex->grant |= REPL_CLIENT_ACL; } + | CREATE VIEW_SYM { Lex->grant |= CREATE_VIEW_ACL; } + | SHOW VIEW_SYM { Lex->grant |= SHOW_VIEW_ACL; } + | CREATE ROUTINE_SYM { Lex->grant |= CREATE_PROC_ACL; } + | ALTER ROUTINE_SYM { Lex->grant |= ALTER_PROC_ACL; } + | CREATE USER { Lex->grant |= CREATE_USER_ACL; } + | EVENT_SYM { Lex->grant |= EVENT_ACL;} + | TRIGGER_SYM { Lex->grant |= TRIGGER_ACL; } + ; opt_and: - /* empty */ {} - | AND_SYM {} - ; + /* empty */ {} + | AND_SYM {} + ; require_list: - require_list_element opt_and require_list - | require_list_element - ; + require_list_element opt_and require_list + | require_list_element + ; require_list_element: - SUBJECT_SYM TEXT_STRING - { - LEX *lex=Lex; - if (lex->x509_subject) - { - my_error(ER_DUP_ARGUMENT, MYF(0), "SUBJECT"); - MYSQL_YYABORT; - } - lex->x509_subject=$2.str; - } - | ISSUER_SYM TEXT_STRING - { - LEX *lex=Lex; - if (lex->x509_issuer) - { - my_error(ER_DUP_ARGUMENT, MYF(0), "ISSUER"); - MYSQL_YYABORT; - } - lex->x509_issuer=$2.str; - } - | CIPHER_SYM TEXT_STRING - { - LEX *lex=Lex; - if (lex->ssl_cipher) - { - my_error(ER_DUP_ARGUMENT, MYF(0), "CIPHER"); - MYSQL_YYABORT; - } - lex->ssl_cipher=$2.str; - } - ; + SUBJECT_SYM TEXT_STRING + { + LEX *lex=Lex; + if (lex->x509_subject) + { + my_error(ER_DUP_ARGUMENT, MYF(0), "SUBJECT"); + MYSQL_YYABORT; + } + lex->x509_subject=$2.str; + } + | ISSUER_SYM TEXT_STRING + { + LEX *lex=Lex; + if (lex->x509_issuer) + { + my_error(ER_DUP_ARGUMENT, MYF(0), "ISSUER"); + MYSQL_YYABORT; + } + lex->x509_issuer=$2.str; + } + | CIPHER_SYM TEXT_STRING + { + LEX *lex=Lex; + if (lex->ssl_cipher) + { + my_error(ER_DUP_ARGUMENT, MYF(0), "CIPHER"); + MYSQL_YYABORT; + } + lex->ssl_cipher=$2.str; + } + ; grant_ident: - '*' - { - LEX *lex= Lex; + '*' + { + LEX *lex= Lex; size_t dummy; if (lex->copy_db_to(&lex->current_select->db, &dummy)) MYSQL_YYABORT; - if (lex->grant == GLOBAL_ACLS) - lex->grant = DB_ACLS & ~GRANT_ACL; - else if (lex->columns.elements) - { - my_message(ER_ILLEGAL_GRANT_FOR_TABLE, + if (lex->grant == GLOBAL_ACLS) + lex->grant = DB_ACLS & ~GRANT_ACL; + else if (lex->columns.elements) + { + my_message(ER_ILLEGAL_GRANT_FOR_TABLE, ER(ER_ILLEGAL_GRANT_FOR_TABLE), MYF(0)); - MYSQL_YYABORT; - } - } - | ident '.' '*' - { - LEX *lex= Lex; - lex->current_select->db = $1.str; - if (lex->grant == GLOBAL_ACLS) - lex->grant = DB_ACLS & ~GRANT_ACL; - else if (lex->columns.elements) - { - my_message(ER_ILLEGAL_GRANT_FOR_TABLE, + MYSQL_YYABORT; + } + } + | ident '.' '*' + { + LEX *lex= Lex; + lex->current_select->db = $1.str; + if (lex->grant == GLOBAL_ACLS) + lex->grant = DB_ACLS & ~GRANT_ACL; + else if (lex->columns.elements) + { + my_message(ER_ILLEGAL_GRANT_FOR_TABLE, ER(ER_ILLEGAL_GRANT_FOR_TABLE), MYF(0)); - MYSQL_YYABORT; - } - } - | '*' '.' '*' - { - LEX *lex= Lex; - lex->current_select->db = NULL; - if (lex->grant == GLOBAL_ACLS) - lex->grant= GLOBAL_ACLS & ~GRANT_ACL; - else if (lex->columns.elements) - { - my_message(ER_ILLEGAL_GRANT_FOR_TABLE, + MYSQL_YYABORT; + } + } + | '*' '.' '*' + { + LEX *lex= Lex; + lex->current_select->db = NULL; + if (lex->grant == GLOBAL_ACLS) + lex->grant= GLOBAL_ACLS & ~GRANT_ACL; + else if (lex->columns.elements) + { + my_message(ER_ILLEGAL_GRANT_FOR_TABLE, ER(ER_ILLEGAL_GRANT_FOR_TABLE), MYF(0)); - MYSQL_YYABORT; - } - } - | table_ident - { - LEX *lex=Lex; - if (!lex->current_select->add_table_to_list(lex->thd, $1,NULL, + MYSQL_YYABORT; + } + } + | table_ident + { + LEX *lex=Lex; + if (!lex->current_select->add_table_to_list(lex->thd, $1,NULL, TL_OPTION_UPDATING)) - MYSQL_YYABORT; - if (lex->grant == GLOBAL_ACLS) - lex->grant = TABLE_ACLS & ~GRANT_ACL; - } - ; - + MYSQL_YYABORT; + if (lex->grant == GLOBAL_ACLS) + lex->grant = TABLE_ACLS & ~GRANT_ACL; + } + ; user_list: - user { if (Lex->users_list.push_back($1)) MYSQL_YYABORT;} - | user_list ',' user - { - if (Lex->users_list.push_back($3)) - MYSQL_YYABORT; - } - ; - + user + { + if (Lex->users_list.push_back($1)) + MYSQL_YYABORT; + } + | user_list ',' user + { + if (Lex->users_list.push_back($3)) + MYSQL_YYABORT; + } + ; grant_list: - grant_user { if (Lex->users_list.push_back($1)) MYSQL_YYABORT;} - | grant_list ',' grant_user - { - if (Lex->users_list.push_back($3)) - MYSQL_YYABORT; - } - ; - + grant_user + { + if (Lex->users_list.push_back($1)) + MYSQL_YYABORT; + } + | grant_list ',' grant_user + { + if (Lex->users_list.push_back($3)) + MYSQL_YYABORT; + } + ; grant_user: - user IDENTIFIED_SYM BY TEXT_STRING - { - $$=$1; $1->password=$4; - if ($4.length) - { - if (YYTHD->variables.old_passwords) - { - char *buff= - (char *) YYTHD->alloc(SCRAMBLED_PASSWORD_CHAR_LENGTH_323+1); - if (buff) - make_scrambled_password_323(buff, $4.str); - $1->password.str= buff; - $1->password.length= SCRAMBLED_PASSWORD_CHAR_LENGTH_323; - } - else - { - char *buff= - (char *) YYTHD->alloc(SCRAMBLED_PASSWORD_CHAR_LENGTH+1); - if (buff) - make_scrambled_password(buff, $4.str); - $1->password.str= buff; - $1->password.length= SCRAMBLED_PASSWORD_CHAR_LENGTH; - } - } - } - | user IDENTIFIED_SYM BY PASSWORD TEXT_STRING - { $$= $1; $1->password= $5; } - | user - { $$= $1; $1->password= null_lex_str; } + user IDENTIFIED_SYM BY TEXT_STRING + { + $$=$1; $1->password=$4; + if ($4.length) + { + if (YYTHD->variables.old_passwords) + { + char *buff= + (char *) YYTHD->alloc(SCRAMBLED_PASSWORD_CHAR_LENGTH_323+1); + if (buff) + make_scrambled_password_323(buff, $4.str); + $1->password.str= buff; + $1->password.length= SCRAMBLED_PASSWORD_CHAR_LENGTH_323; + } + else + { + char *buff= + (char *) YYTHD->alloc(SCRAMBLED_PASSWORD_CHAR_LENGTH+1); + if (buff) + make_scrambled_password(buff, $4.str); + $1->password.str= buff; + $1->password.length= SCRAMBLED_PASSWORD_CHAR_LENGTH; + } + } + } + | user IDENTIFIED_SYM BY PASSWORD TEXT_STRING + { $$= $1; $1->password= $5; } + | user + { $$= $1; $1->password= null_lex_str; } ; - opt_column_list: - /* empty */ - { - LEX *lex=Lex; - lex->grant |= lex->which_columns; - } - | '(' column_list ')'; - -column_list: - column_list ',' column_list_id - | column_list_id; - -column_list_id: - ident - { - String *new_str = new (YYTHD->mem_root) String((const char*) $1.str,$1.length,system_charset_info); - List_iterator iter(Lex->columns); - class LEX_COLUMN *point; - LEX *lex=Lex; - while ((point=iter++)) - { - if (!my_strcasecmp(system_charset_info, - point->column.ptr(), new_str->ptr())) - break; - } - lex->grant_tot_col|= lex->which_columns; - if (point) - point->rights |= lex->which_columns; - else - lex->columns.push_back(new LEX_COLUMN (*new_str,lex->which_columns)); - } + /* empty */ + { + LEX *lex=Lex; + lex->grant |= lex->which_columns; + } + | '(' column_list ')' ; +column_list: + column_list ',' column_list_id + | column_list_id + ; -require_clause: /* empty */ +column_list_id: + ident + { + String *new_str = new (YYTHD->mem_root) String((const char*) $1.str,$1.length,system_charset_info); + List_iterator iter(Lex->columns); + class LEX_COLUMN *point; + LEX *lex=Lex; + while ((point=iter++)) + { + if (!my_strcasecmp(system_charset_info, + point->column.ptr(), new_str->ptr())) + break; + } + lex->grant_tot_col|= lex->which_columns; + if (point) + point->rights |= lex->which_columns; + else + lex->columns.push_back(new LEX_COLUMN (*new_str,lex->which_columns)); + } + ; + +require_clause: + /* empty */ | REQUIRE_SYM require_list { Lex->ssl_type=SSL_TYPE_SPECIFIED; @@ -11070,220 +11510,223 @@ require_clause: /* empty */ { Lex->ssl_type=SSL_TYPE_X509; } - | REQUIRE_SYM NONE_SYM - { - Lex->ssl_type=SSL_TYPE_NONE; - } - ; + | REQUIRE_SYM NONE_SYM + { + Lex->ssl_type=SSL_TYPE_NONE; + } + ; grant_options: - /* empty */ {} - | WITH grant_option_list; + /* empty */ {} + | WITH grant_option_list + ; grant_option_list: - grant_option_list grant_option {} - | grant_option {} + grant_option_list grant_option {} + | grant_option {} ; grant_option: - GRANT OPTION { Lex->grant |= GRANT_ACL;} + GRANT OPTION { Lex->grant |= GRANT_ACL;} | MAX_QUERIES_PER_HOUR ulong_num - { - LEX *lex=Lex; - lex->mqh.questions=$2; - lex->mqh.specified_limits|= USER_RESOURCES::QUERIES_PER_HOUR; - } + { + LEX *lex=Lex; + lex->mqh.questions=$2; + lex->mqh.specified_limits|= USER_RESOURCES::QUERIES_PER_HOUR; + } | MAX_UPDATES_PER_HOUR ulong_num - { - LEX *lex=Lex; - lex->mqh.updates=$2; - lex->mqh.specified_limits|= USER_RESOURCES::UPDATES_PER_HOUR; - } + { + LEX *lex=Lex; + lex->mqh.updates=$2; + lex->mqh.specified_limits|= USER_RESOURCES::UPDATES_PER_HOUR; + } | MAX_CONNECTIONS_PER_HOUR ulong_num - { - LEX *lex=Lex; - lex->mqh.conn_per_hour= $2; - lex->mqh.specified_limits|= USER_RESOURCES::CONNECTIONS_PER_HOUR; - } + { + LEX *lex=Lex; + lex->mqh.conn_per_hour= $2; + lex->mqh.specified_limits|= USER_RESOURCES::CONNECTIONS_PER_HOUR; + } | MAX_USER_CONNECTIONS_SYM ulong_num - { - LEX *lex=Lex; - lex->mqh.user_conn= $2; - lex->mqh.specified_limits|= USER_RESOURCES::USER_CONNECTIONS; - } + { + LEX *lex=Lex; + lex->mqh.user_conn= $2; + lex->mqh.specified_limits|= USER_RESOURCES::USER_CONNECTIONS; + } ; begin: - BEGIN_SYM - { - LEX *lex=Lex; - lex->sql_command = SQLCOM_BEGIN; - lex->start_transaction_opt= 0; - } - opt_work {} - ; + BEGIN_SYM + { + LEX *lex=Lex; + lex->sql_command = SQLCOM_BEGIN; + lex->start_transaction_opt= 0; + } + opt_work {} + ; opt_work: - /* empty */ {} - | WORK_SYM {} + /* empty */ {} + | WORK_SYM {} ; opt_chain: - /* empty */ { $$= (YYTHD->variables.completion_type == 1); } - | AND_SYM NO_SYM CHAIN_SYM { $$=0; } - | AND_SYM CHAIN_SYM { $$=1; } - ; + /* empty */ + { $$= (YYTHD->variables.completion_type == 1); } + | AND_SYM NO_SYM CHAIN_SYM { $$=0; } + | AND_SYM CHAIN_SYM { $$=1; } + ; opt_release: - /* empty */ { $$= (YYTHD->variables.completion_type == 2); } - | RELEASE_SYM { $$=1; } - | NO_SYM RELEASE_SYM { $$=0; } - ; - + /* empty */ + { $$= (YYTHD->variables.completion_type == 2); } + | RELEASE_SYM { $$=1; } + | NO_SYM RELEASE_SYM { $$=0; } +; + opt_savepoint: - /* empty */ {} - | SAVEPOINT_SYM {} - ; + /* empty */ {} + | SAVEPOINT_SYM {} + ; commit: - COMMIT_SYM opt_work opt_chain opt_release - { - LEX *lex=Lex; - lex->sql_command= SQLCOM_COMMIT; - lex->tx_chain= $3; - lex->tx_release= $4; - } - ; + COMMIT_SYM opt_work opt_chain opt_release + { + LEX *lex=Lex; + lex->sql_command= SQLCOM_COMMIT; + lex->tx_chain= $3; + lex->tx_release= $4; + } + ; rollback: - ROLLBACK_SYM opt_work opt_chain opt_release - { - LEX *lex=Lex; - lex->sql_command= SQLCOM_ROLLBACK; - lex->tx_chain= $3; - lex->tx_release= $4; - } - | ROLLBACK_SYM opt_work - TO_SYM opt_savepoint ident - { - LEX *lex=Lex; - lex->sql_command= SQLCOM_ROLLBACK_TO_SAVEPOINT; - lex->ident= $5; - } - ; + ROLLBACK_SYM opt_work opt_chain opt_release + { + LEX *lex=Lex; + lex->sql_command= SQLCOM_ROLLBACK; + lex->tx_chain= $3; + lex->tx_release= $4; + } + | ROLLBACK_SYM opt_work + TO_SYM opt_savepoint ident + { + LEX *lex=Lex; + lex->sql_command= SQLCOM_ROLLBACK_TO_SAVEPOINT; + lex->ident= $5; + } + ; savepoint: - SAVEPOINT_SYM ident - { - LEX *lex=Lex; - lex->sql_command= SQLCOM_SAVEPOINT; - lex->ident= $2; - } - ; + SAVEPOINT_SYM ident + { + LEX *lex=Lex; + lex->sql_command= SQLCOM_SAVEPOINT; + lex->ident= $2; + } + ; release: - RELEASE_SYM SAVEPOINT_SYM ident - { - LEX *lex=Lex; - lex->sql_command= SQLCOM_RELEASE_SAVEPOINT; - lex->ident= $3; - } - ; - + RELEASE_SYM SAVEPOINT_SYM ident + { + LEX *lex=Lex; + lex->sql_command= SQLCOM_RELEASE_SAVEPOINT; + lex->ident= $3; + } + ; + /* UNIONS : glue selects together */ union_clause: - /* empty */ {} - | union_list - ; + /* empty */ {} + | union_list + ; union_list: - UNION_SYM union_option - { - LEX *lex=Lex; - if (lex->result) - { - /* Only the last SELECT can have INTO...... */ - my_error(ER_WRONG_USAGE, MYF(0), "UNION", "INTO"); - MYSQL_YYABORT; - } - if (lex->current_select->linkage == GLOBAL_OPTIONS_TYPE) - { - my_parse_error(ER(ER_SYNTAX_ERROR)); - MYSQL_YYABORT; - } - /* This counter shouldn't be incremented for UNION parts */ - Lex->nest_level--; - if (mysql_new_select(lex, 0)) - MYSQL_YYABORT; - mysql_init_select(lex); - lex->current_select->linkage=UNION_TYPE; - if ($2) /* UNION DISTINCT - remember position */ - lex->current_select->master_unit()->union_distinct= - lex->current_select; - } - select_init - { - /* - Remove from the name resolution context stack the context of the - last select in the union. - */ - Lex->pop_context(); - } - ; + UNION_SYM union_option + { + LEX *lex=Lex; + if (lex->result) + { + /* Only the last SELECT can have INTO...... */ + my_error(ER_WRONG_USAGE, MYF(0), "UNION", "INTO"); + MYSQL_YYABORT; + } + if (lex->current_select->linkage == GLOBAL_OPTIONS_TYPE) + { + my_parse_error(ER(ER_SYNTAX_ERROR)); + MYSQL_YYABORT; + } + /* This counter shouldn't be incremented for UNION parts */ + Lex->nest_level--; + if (mysql_new_select(lex, 0)) + MYSQL_YYABORT; + mysql_init_select(lex); + lex->current_select->linkage=UNION_TYPE; + if ($2) /* UNION DISTINCT - remember position */ + lex->current_select->master_unit()->union_distinct= + lex->current_select; + } + select_init + { + /* + Remove from the name resolution context stack the context of the + last select in the union. + */ + Lex->pop_context(); + } + ; union_opt: - /* Empty */ { $$= 0; } - | union_list { $$= 1; } - | union_order_or_limit { $$= 1; } - ; + /* Empty */ { $$= 0; } + | union_list { $$= 1; } + | union_order_or_limit { $$= 1; } + ; union_order_or_limit: - { - THD *thd= YYTHD; - LEX *lex= thd->lex; - DBUG_ASSERT(lex->current_select->linkage != GLOBAL_OPTIONS_TYPE); - SELECT_LEX *sel= lex->current_select; - SELECT_LEX_UNIT *unit= sel->master_unit(); - SELECT_LEX *fake= unit->fake_select_lex; - if (fake) - { - unit->global_parameters= fake; - fake->no_table_names_allowed= 1; - lex->current_select= fake; - } - thd->where= "global ORDER clause"; - } - order_or_limit { - THD *thd= YYTHD; - thd->lex->current_select->no_table_names_allowed= 0; - thd->where= ""; + THD *thd= YYTHD; + LEX *lex= thd->lex; + DBUG_ASSERT(lex->current_select->linkage != GLOBAL_OPTIONS_TYPE); + SELECT_LEX *sel= lex->current_select; + SELECT_LEX_UNIT *unit= sel->master_unit(); + SELECT_LEX *fake= unit->fake_select_lex; + if (fake) + { + unit->global_parameters= fake; + fake->no_table_names_allowed= 1; + lex->current_select= fake; + } + thd->where= "global ORDER clause"; } - ; + order_or_limit + { + THD *thd= YYTHD; + thd->lex->current_select->no_table_names_allowed= 0; + thd->where= ""; + } + ; order_or_limit: - order_clause opt_limit_clause_init - | limit_clause - ; + order_clause opt_limit_clause_init + | limit_clause + ; union_option: - /* empty */ { $$=1; } - | DISTINCT { $$=1; } - | ALL { $$=0; } + /* empty */ { $$=1; } + | DISTINCT { $$=1; } + | ALL { $$=0; } ; subselect: - SELECT_SYM subselect_start subselect_init subselect_end - { - $$= $3; - } + SELECT_SYM subselect_start subselect_init subselect_end + { + $$= $3; + } | '(' subselect_start subselect ')' { - THD *thd= YYTHD; + THD *thd= YYTHD; /* note that a local variable can't be used for $3 as it's used in local variable construction @@ -11298,49 +11741,53 @@ subselect: while ((item= it++)) add_item_to_list(thd, item); } - union_clause subselect_end { $$= $3; }; + union_clause subselect_end { $$= $3; } + ; subselect_init: - select_init2 - { - $$= Lex->current_select->master_unit()->first_select(); - }; + select_init2 + { + $$= Lex->current_select->master_unit()->first_select(); + } + ; subselect_start: - { - LEX *lex=Lex; - if (!lex->expr_allows_subselect || - lex->sql_command == (int)SQLCOM_PURGE) - { - my_parse_error(ER(ER_SYNTAX_ERROR)); - MYSQL_YYABORT; - } - /* - we are making a "derived table" for the parenthesis - as we need to have a lex level to fit the union - after the parenthesis, e.g. - (SELECT .. ) UNION ... becomes - SELECT * FROM ((SELECT ...) UNION ...) - */ - if (mysql_new_select(Lex, 1)) - MYSQL_YYABORT; - }; + { + LEX *lex=Lex; + if (!lex->expr_allows_subselect || + lex->sql_command == (int)SQLCOM_PURGE) + { + my_parse_error(ER(ER_SYNTAX_ERROR)); + MYSQL_YYABORT; + } + /* + we are making a "derived table" for the parenthesis + as we need to have a lex level to fit the union + after the parenthesis, e.g. + (SELECT .. ) UNION ... becomes + SELECT * FROM ((SELECT ...) UNION ...) + */ + if (mysql_new_select(Lex, 1)) + MYSQL_YYABORT; + } + ; subselect_end: - { - LEX *lex=Lex; - lex->pop_context(); - SELECT_LEX *child= lex->current_select; - lex->current_select = lex->current_select->return_after_parsing(); - lex->nest_level--; - lex->current_select->n_child_sum_items += child->n_sum_items; - /* - A subselect can add fields to an outer select. Reserve space for - them. - */ - lex->current_select->select_n_where_fields+= + { + LEX *lex=Lex; + lex->pop_context(); + SELECT_LEX *child= lex->current_select; + lex->current_select = lex->current_select->return_after_parsing(); + lex->nest_level--; + lex->current_select->n_child_sum_items += child->n_sum_items; + /* + A subselect can add fields to an outer select. Reserve space for + them. + */ + lex->current_select->select_n_where_fields+= child->select_n_where_fields; - }; + } + ; /************************************************************************** @@ -11349,22 +11796,22 @@ subselect_end: **************************************************************************/ view_or_trigger_or_sp_or_event: - definer view_or_trigger_or_sp_or_event_tail - {} - | view_replace_or_algorithm definer view_tail - {} - ; + definer view_or_trigger_or_sp_or_event_tail + {} + | view_replace_or_algorithm definer view_tail + {} + ; view_or_trigger_or_sp_or_event_tail: - view_tail - {} - | trigger_tail - {} - | sp_tail - {} - | event_tail - {} - ; + view_tail + {} + | trigger_tail + {} + | sp_tail + {} + | event_tail + {} + ; /************************************************************************** @@ -11373,22 +11820,22 @@ view_or_trigger_or_sp_or_event_tail: **************************************************************************/ definer: - /* empty */ - { - /* - We have to distinguish missing DEFINER-clause from case when - CURRENT_USER specified as definer explicitly in order to properly - handle CREATE TRIGGER statements which come to replication thread - from older master servers (i.e. to create non-suid trigger in this - case). - */ - YYTHD->lex->definer= 0; - } - | DEFINER_SYM EQ user - { - YYTHD->lex->definer= get_current_user(YYTHD, $3); - } - ; + /* empty */ + { + /* + We have to distinguish missing DEFINER-clause from case when + CURRENT_USER specified as definer explicitly in order to properly + handle CREATE TRIGGER statements which come to replication thread + from older master servers (i.e. to create non-suid trigger in this + case). + */ + YYTHD->lex->definer= 0; + } + | DEFINER_SYM EQ user + { + YYTHD->lex->definer= get_current_user(YYTHD, $3); + } + ; /************************************************************************** @@ -11397,128 +11844,128 @@ definer: **************************************************************************/ view_replace_or_algorithm: - view_replace - {} - | view_replace view_algorithm - {} - | view_algorithm - {} - ; + view_replace + {} + | view_replace view_algorithm + {} + | view_algorithm + {} + ; view_replace: - OR_SYM REPLACE - { Lex->create_view_mode= VIEW_CREATE_OR_REPLACE; } - ; + OR_SYM REPLACE + { Lex->create_view_mode= VIEW_CREATE_OR_REPLACE; } + ; view_algorithm: - ALGORITHM_SYM EQ UNDEFINED_SYM - { Lex->create_view_algorithm= VIEW_ALGORITHM_UNDEFINED; } - | ALGORITHM_SYM EQ MERGE_SYM - { Lex->create_view_algorithm= VIEW_ALGORITHM_MERGE; } - | ALGORITHM_SYM EQ TEMPTABLE_SYM - { Lex->create_view_algorithm= VIEW_ALGORITHM_TMPTABLE; } - ; + ALGORITHM_SYM EQ UNDEFINED_SYM + { Lex->create_view_algorithm= VIEW_ALGORITHM_UNDEFINED; } + | ALGORITHM_SYM EQ MERGE_SYM + { Lex->create_view_algorithm= VIEW_ALGORITHM_MERGE; } + | ALGORITHM_SYM EQ TEMPTABLE_SYM + { Lex->create_view_algorithm= VIEW_ALGORITHM_TMPTABLE; } + ; view_suid: - /* empty */ - { Lex->create_view_suid= VIEW_SUID_DEFAULT; } - | SQL_SYM SECURITY_SYM DEFINER_SYM - { Lex->create_view_suid= VIEW_SUID_DEFINER; } - | SQL_SYM SECURITY_SYM INVOKER_SYM - { Lex->create_view_suid= VIEW_SUID_INVOKER; } - ; + /* empty */ + { Lex->create_view_suid= VIEW_SUID_DEFAULT; } + | SQL_SYM SECURITY_SYM DEFINER_SYM + { Lex->create_view_suid= VIEW_SUID_DEFINER; } + | SQL_SYM SECURITY_SYM INVOKER_SYM + { Lex->create_view_suid= VIEW_SUID_INVOKER; } + ; view_tail: - view_suid VIEW_SYM table_ident - { - THD *thd= YYTHD; - LEX *lex= thd->lex; - lex->sql_command= SQLCOM_CREATE_VIEW; - /* first table in list is target VIEW name */ - if (!lex->select_lex.add_table_to_list(thd, $3, NULL, TL_OPTION_UPDATING)) - MYSQL_YYABORT; - } - view_list_opt AS - { - THD *thd= YYTHD; - Lex_input_stream *lip= thd->m_lip; + view_suid VIEW_SYM table_ident + { + THD *thd= YYTHD; + LEX *lex= thd->lex; + lex->sql_command= SQLCOM_CREATE_VIEW; + /* first table in list is target VIEW name */ + if (!lex->select_lex.add_table_to_list(thd, $3, NULL, TL_OPTION_UPDATING)) + MYSQL_YYABORT; + } + view_list_opt AS + { + THD *thd= YYTHD; + Lex_input_stream *lip= thd->m_lip; - lip->body_utf8_start(thd, lip->get_cpp_ptr()); - } - view_select - { - THD *thd= YYTHD; - LEX *lex= thd->lex; - Lex_input_stream *lip= thd->m_lip; + lip->body_utf8_start(thd, lip->get_cpp_ptr()); + } + view_select + { + THD *thd= YYTHD; + LEX *lex= thd->lex; + Lex_input_stream *lip= thd->m_lip; - lip->body_utf8_append(lip->get_cpp_ptr()); + lip->body_utf8_append(lip->get_cpp_ptr()); - lex->view_body_utf8.str= thd->strmake(lip->get_body_utf8_str(), - lip->get_body_utf8_length()); - lex->view_body_utf8.length= lip->get_body_utf8_length(); + lex->view_body_utf8.str= thd->strmake(lip->get_body_utf8_str(), + lip->get_body_utf8_length()); + lex->view_body_utf8.length= lip->get_body_utf8_length(); - trim_whitespace(&my_charset_utf8_general_ci, &lex->view_body_utf8); - } - ; + trim_whitespace(&my_charset_utf8_general_ci, &lex->view_body_utf8); + } + ; view_list_opt: - /* empty */ - {} - | '(' view_list ')' - ; + /* empty */ + {} + | '(' view_list ')' + ; view_list: - ident - { - Lex->view_list.push_back((LEX_STRING*) - sql_memdup(&$1, sizeof(LEX_STRING))); - } - | view_list ',' ident - { - Lex->view_list.push_back((LEX_STRING*) - sql_memdup(&$3, sizeof(LEX_STRING))); - } - ; + ident + { + Lex->view_list.push_back((LEX_STRING*) + sql_memdup(&$1, sizeof(LEX_STRING))); + } + | view_list ',' ident + { + Lex->view_list.push_back((LEX_STRING*) + sql_memdup(&$3, sizeof(LEX_STRING))); + } + ; view_select: - { - THD *thd= YYTHD; - LEX *lex= Lex; - Lex_input_stream *lip= thd->m_lip; - lex->parsing_options.allows_variable= FALSE; - lex->parsing_options.allows_select_into= FALSE; - lex->parsing_options.allows_select_procedure= FALSE; - lex->parsing_options.allows_derived= FALSE; - lex->create_view_select_start= lip->get_cpp_ptr(); - } - view_select_aux view_check_option - { - THD *thd= YYTHD; - LEX *lex= Lex; - Lex_input_stream *lip= thd->m_lip; - lex->parsing_options.allows_variable= TRUE; - lex->parsing_options.allows_select_into= TRUE; - lex->parsing_options.allows_select_procedure= TRUE; - lex->parsing_options.allows_derived= TRUE; - lex->create_view_select_end= lip->get_cpp_ptr(); - } + { + THD *thd= YYTHD; + LEX *lex= Lex; + Lex_input_stream *lip= thd->m_lip; + lex->parsing_options.allows_variable= FALSE; + lex->parsing_options.allows_select_into= FALSE; + lex->parsing_options.allows_select_procedure= FALSE; + lex->parsing_options.allows_derived= FALSE; + lex->create_view_select_start= lip->get_cpp_ptr(); + } + view_select_aux view_check_option + { + THD *thd= YYTHD; + LEX *lex= Lex; + Lex_input_stream *lip= thd->m_lip; + lex->parsing_options.allows_variable= TRUE; + lex->parsing_options.allows_select_into= TRUE; + lex->parsing_options.allows_select_procedure= TRUE; + lex->parsing_options.allows_derived= TRUE; + lex->create_view_select_end= lip->get_cpp_ptr(); + } ; view_select_aux: - SELECT_SYM select_init2 + SELECT_SYM select_init2 | '(' select_paren ')' union_opt ; view_check_option: - /* empty */ - { Lex->create_view_check= VIEW_CHECK_NONE; } - | WITH CHECK_SYM OPTION - { Lex->create_view_check= VIEW_CHECK_CASCADED; } - | WITH CASCADED CHECK_SYM OPTION - { Lex->create_view_check= VIEW_CHECK_CASCADED; } - | WITH LOCAL_SYM CHECK_SYM OPTION - { Lex->create_view_check= VIEW_CHECK_LOCAL; } - ; + /* empty */ + { Lex->create_view_check= VIEW_CHECK_NONE; } + | WITH CHECK_SYM OPTION + { Lex->create_view_check= VIEW_CHECK_CASCADED; } + | WITH CASCADED CHECK_SYM OPTION + { Lex->create_view_check= VIEW_CHECK_CASCADED; } + | WITH LOCAL_SYM CHECK_SYM OPTION + { Lex->create_view_check= VIEW_CHECK_LOCAL; } + ; /************************************************************************** @@ -11527,93 +11974,93 @@ view_check_option: **************************************************************************/ trigger_tail: - TRIGGER_SYM - remember_name - sp_name - trg_action_time - trg_event - ON - remember_name /* $7 */ - { /* $8 */ - THD *thd= YYTHD; - LEX *lex= thd->lex; - Lex_input_stream *lip= thd->m_lip; - lex->raw_trg_on_table_name_begin= lip->get_tok_start(); - } - table_ident /* $9 */ - FOR_SYM - remember_name /* $11 */ - { /* $12 */ - THD *thd= YYTHD; - LEX *lex= thd->lex; - Lex_input_stream *lip= thd->m_lip; - lex->raw_trg_on_table_name_end= lip->get_tok_start(); - } - EACH_SYM - ROW_SYM - { /* $15 */ - THD *thd= YYTHD; - LEX *lex= thd->lex; - Lex_input_stream *lip= thd->m_lip; - sp_head *sp; + TRIGGER_SYM + remember_name + sp_name + trg_action_time + trg_event + ON + remember_name /* $7 */ + { /* $8 */ + THD *thd= YYTHD; + LEX *lex= thd->lex; + Lex_input_stream *lip= thd->m_lip; + lex->raw_trg_on_table_name_begin= lip->get_tok_start(); + } + table_ident /* $9 */ + FOR_SYM + remember_name /* $11 */ + { /* $12 */ + THD *thd= YYTHD; + LEX *lex= thd->lex; + Lex_input_stream *lip= thd->m_lip; + lex->raw_trg_on_table_name_end= lip->get_tok_start(); + } + EACH_SYM + ROW_SYM + { /* $15 */ + THD *thd= YYTHD; + LEX *lex= thd->lex; + Lex_input_stream *lip= thd->m_lip; + sp_head *sp; - if (lex->sphead) - { - my_error(ER_SP_NO_RECURSIVE_CREATE, MYF(0), "TRIGGER"); - MYSQL_YYABORT; - } + if (lex->sphead) + { + my_error(ER_SP_NO_RECURSIVE_CREATE, MYF(0), "TRIGGER"); + MYSQL_YYABORT; + } - if (!(sp= new sp_head())) - MYSQL_YYABORT; - sp->reset_thd_mem_root(thd); - sp->init(lex); - sp->m_type= TYPE_ENUM_TRIGGER; - sp->init_sp_name(thd, $3); - lex->stmt_definition_begin= $2; - lex->ident.str= $7; - lex->ident.length= $11 - $7; + if (!(sp= new sp_head())) + MYSQL_YYABORT; + sp->reset_thd_mem_root(thd); + sp->init(lex); + sp->m_type= TYPE_ENUM_TRIGGER; + sp->init_sp_name(thd, $3); + lex->stmt_definition_begin= $2; + lex->ident.str= $7; + lex->ident.length= $11 - $7; - lex->sphead= sp; - lex->spname= $3; - /* - We have to turn of CLIENT_MULTI_QUERIES while parsing a - stored procedure, otherwise yylex will chop it into pieces - at each ';'. - */ - $$= thd->client_capabilities & CLIENT_MULTI_QUERIES; - thd->client_capabilities &= ~CLIENT_MULTI_QUERIES; + lex->sphead= sp; + lex->spname= $3; + /* + We have to turn of CLIENT_MULTI_QUERIES while parsing a + stored procedure, otherwise yylex will chop it into pieces + at each ';'. + */ + $$= thd->client_capabilities & CLIENT_MULTI_QUERIES; + thd->client_capabilities &= ~CLIENT_MULTI_QUERIES; - bzero((char *)&lex->sp_chistics, sizeof(st_sp_chistics)); - lex->sphead->m_chistics= &lex->sp_chistics; - lex->sphead->set_body_start(thd, lip->get_cpp_ptr()); - } - sp_proc_stmt /* $16 */ - { /* $17 */ - LEX *lex= Lex; - sp_head *sp= lex->sphead; + bzero((char *)&lex->sp_chistics, sizeof(st_sp_chistics)); + lex->sphead->m_chistics= &lex->sp_chistics; + lex->sphead->set_body_start(thd, lip->get_cpp_ptr()); + } + sp_proc_stmt /* $16 */ + { /* $17 */ + LEX *lex= Lex; + sp_head *sp= lex->sphead; - lex->sql_command= SQLCOM_CREATE_TRIGGER; - sp->set_stmt_end(YYTHD); - /* Restore flag if it was cleared above */ + lex->sql_command= SQLCOM_CREATE_TRIGGER; + sp->set_stmt_end(YYTHD); + /* Restore flag if it was cleared above */ - YYTHD->client_capabilities |= $15; - sp->restore_thd_mem_root(YYTHD); + YYTHD->client_capabilities |= $15; + sp->restore_thd_mem_root(YYTHD); - if (sp->is_not_allowed_in_function("trigger")) - MYSQL_YYABORT; + if (sp->is_not_allowed_in_function("trigger")) + MYSQL_YYABORT; - /* - We have to do it after parsing trigger body, because some of - sp_proc_stmt alternatives are not saving/restoring LEX, so - lex->query_tables can be wiped out. - */ - if (!lex->select_lex.add_table_to_list(YYTHD, $9, - (LEX_STRING*) 0, - TL_OPTION_UPDATING, - TL_IGNORE)) - MYSQL_YYABORT; - } - ; + /* + We have to do it after parsing trigger body, because some of + sp_proc_stmt alternatives are not saving/restoring LEX, so + lex->query_tables can be wiped out. + */ + if (!lex->select_lex.add_table_to_list(YYTHD, $9, + (LEX_STRING*) 0, + TL_OPTION_UPDATING, + TL_IGNORE)) + MYSQL_YYABORT; + } + ; /************************************************************************** @@ -11622,181 +12069,189 @@ trigger_tail: **************************************************************************/ sp_tail: - udf_func_type remember_name FUNCTION_SYM sp_name - { - LEX *lex=Lex; - lex->udf.type= $1; - lex->stmt_definition_begin= $2; - lex->spname= $4; - } - create_function_tail - {} - | PROCEDURE remember_name sp_name - { - LEX *lex= Lex; - sp_head *sp; + udf_func_type remember_name FUNCTION_SYM sp_name + { + LEX *lex=Lex; + lex->udf.type= $1; + lex->stmt_definition_begin= $2; + lex->spname= $4; + } + create_function_tail + {} + | PROCEDURE remember_name sp_name + { + LEX *lex= Lex; + sp_head *sp; - if (lex->sphead) - { - my_error(ER_SP_NO_RECURSIVE_CREATE, MYF(0), "PROCEDURE"); - MYSQL_YYABORT; - } + if (lex->sphead) + { + my_error(ER_SP_NO_RECURSIVE_CREATE, MYF(0), "PROCEDURE"); + MYSQL_YYABORT; + } - lex->stmt_definition_begin= $2; + lex->stmt_definition_begin= $2; - /* Order is important here: new - reset - init */ - sp= new sp_head(); - sp->reset_thd_mem_root(YYTHD); - sp->init(lex); - sp->m_type= TYPE_ENUM_PROCEDURE; - sp->init_sp_name(YYTHD, $3); + /* Order is important here: new - reset - init */ + sp= new sp_head(); + sp->reset_thd_mem_root(YYTHD); + sp->init(lex); + sp->m_type= TYPE_ENUM_PROCEDURE; + sp->init_sp_name(YYTHD, $3); - lex->sphead= sp; - /* - * We have to turn of CLIENT_MULTI_QUERIES while parsing a - * stored procedure, otherwise yylex will chop it into pieces - * at each ';'. - */ - $$= YYTHD->client_capabilities & CLIENT_MULTI_QUERIES; - YYTHD->client_capabilities &= (~CLIENT_MULTI_QUERIES); - } - '(' - { - THD *thd= YYTHD; - LEX *lex= thd->lex; - Lex_input_stream *lip= thd->m_lip; - const char* tmp_param_begin; + lex->sphead= sp; + /* + * We have to turn of CLIENT_MULTI_QUERIES while parsing a + * stored procedure, otherwise yylex will chop it into pieces + * at each ';'. + */ + $$= YYTHD->client_capabilities & CLIENT_MULTI_QUERIES; + YYTHD->client_capabilities &= (~CLIENT_MULTI_QUERIES); + } + '(' + { + THD *thd= YYTHD; + LEX *lex= thd->lex; + Lex_input_stream *lip= thd->m_lip; + const char* tmp_param_begin; - tmp_param_begin= lip->get_cpp_tok_start(); - tmp_param_begin++; - lex->sphead->m_param_begin= tmp_param_begin; - } - sp_pdparam_list - ')' - { - THD *thd= YYTHD; - LEX *lex= thd->lex; - Lex_input_stream *lip= thd->m_lip; + tmp_param_begin= lip->get_cpp_tok_start(); + tmp_param_begin++; + lex->sphead->m_param_begin= tmp_param_begin; + } + sp_pdparam_list + ')' + { + THD *thd= YYTHD; + LEX *lex= thd->lex; + Lex_input_stream *lip= thd->m_lip; - lex->sphead->m_param_end= lip->get_cpp_tok_start(); - bzero((char *)&lex->sp_chistics, sizeof(st_sp_chistics)); - } - sp_c_chistics - { - THD *thd= YYTHD; - LEX *lex= thd->lex; - Lex_input_stream *lip= thd->m_lip; + lex->sphead->m_param_end= lip->get_cpp_tok_start(); + bzero((char *)&lex->sp_chistics, sizeof(st_sp_chistics)); + } + sp_c_chistics + { + THD *thd= YYTHD; + LEX *lex= thd->lex; + Lex_input_stream *lip= thd->m_lip; - lex->sphead->m_chistics= &lex->sp_chistics; - lex->sphead->set_body_start(thd, lip->get_cpp_tok_start()); - } - sp_proc_stmt - { - LEX *lex= Lex; - sp_head *sp= lex->sphead; + lex->sphead->m_chistics= &lex->sp_chistics; + lex->sphead->set_body_start(thd, lip->get_cpp_tok_start()); + } + sp_proc_stmt + { + LEX *lex= Lex; + sp_head *sp= lex->sphead; - sp->set_stmt_end(YYTHD); - lex->sql_command= SQLCOM_CREATE_PROCEDURE; - /* - Restore flag if it was cleared above - Be careful with counting. the block where we save the value - is $4. - */ - YYTHD->client_capabilities |= $4; - sp->restore_thd_mem_root(YYTHD); - } - ; + sp->set_stmt_end(YYTHD); + lex->sql_command= SQLCOM_CREATE_PROCEDURE; + /* + Restore flag if it was cleared above + Be careful with counting. the block where we save the value + is $4. + */ + YYTHD->client_capabilities |= $4; + sp->restore_thd_mem_root(YYTHD); + } + ; /*************************************************************************/ -xa: XA_SYM begin_or_start xid opt_join_or_resume - { - Lex->sql_command = SQLCOM_XA_START; - } - | XA_SYM END xid opt_suspend - { - Lex->sql_command = SQLCOM_XA_END; - } - | XA_SYM PREPARE_SYM xid - { - Lex->sql_command = SQLCOM_XA_PREPARE; - } - | XA_SYM COMMIT_SYM xid opt_one_phase - { - Lex->sql_command = SQLCOM_XA_COMMIT; - } - | XA_SYM ROLLBACK_SYM xid - { - Lex->sql_command = SQLCOM_XA_ROLLBACK; - } - | XA_SYM RECOVER_SYM - { - Lex->sql_command = SQLCOM_XA_RECOVER; - } - ; +xa: + XA_SYM begin_or_start xid opt_join_or_resume + { + Lex->sql_command = SQLCOM_XA_START; + } + | XA_SYM END xid opt_suspend + { + Lex->sql_command = SQLCOM_XA_END; + } + | XA_SYM PREPARE_SYM xid + { + Lex->sql_command = SQLCOM_XA_PREPARE; + } + | XA_SYM COMMIT_SYM xid opt_one_phase + { + Lex->sql_command = SQLCOM_XA_COMMIT; + } + | XA_SYM ROLLBACK_SYM xid + { + Lex->sql_command = SQLCOM_XA_ROLLBACK; + } + | XA_SYM RECOVER_SYM + { + Lex->sql_command = SQLCOM_XA_RECOVER; + } + ; -xid: text_string - { - MYSQL_YYABORT_UNLESS($1->length() <= MAXGTRIDSIZE); - if (!(Lex->xid=(XID *)YYTHD->alloc(sizeof(XID)))) - MYSQL_YYABORT; - Lex->xid->set(1L, $1->ptr(), $1->length(), 0, 0); - } - | text_string ',' text_string - { - MYSQL_YYABORT_UNLESS($1->length() <= MAXGTRIDSIZE && $3->length() <= MAXBQUALSIZE); - if (!(Lex->xid=(XID *)YYTHD->alloc(sizeof(XID)))) - MYSQL_YYABORT; - Lex->xid->set(1L, $1->ptr(), $1->length(), $3->ptr(), $3->length()); - } - | text_string ',' text_string ',' ulong_num - { - MYSQL_YYABORT_UNLESS($1->length() <= MAXGTRIDSIZE && $3->length() <= MAXBQUALSIZE); - if (!(Lex->xid=(XID *)YYTHD->alloc(sizeof(XID)))) - MYSQL_YYABORT; - Lex->xid->set($5, $1->ptr(), $1->length(), $3->ptr(), $3->length()); - } - ; +xid: + text_string + { + MYSQL_YYABORT_UNLESS($1->length() <= MAXGTRIDSIZE); + if (!(Lex->xid=(XID *)YYTHD->alloc(sizeof(XID)))) + MYSQL_YYABORT; + Lex->xid->set(1L, $1->ptr(), $1->length(), 0, 0); + } + | text_string ',' text_string + { + MYSQL_YYABORT_UNLESS($1->length() <= MAXGTRIDSIZE && $3->length() <= MAXBQUALSIZE); + if (!(Lex->xid=(XID *)YYTHD->alloc(sizeof(XID)))) + MYSQL_YYABORT; + Lex->xid->set(1L, $1->ptr(), $1->length(), $3->ptr(), $3->length()); + } + | text_string ',' text_string ',' ulong_num + { + MYSQL_YYABORT_UNLESS($1->length() <= MAXGTRIDSIZE && $3->length() <= MAXBQUALSIZE); + if (!(Lex->xid=(XID *)YYTHD->alloc(sizeof(XID)))) + MYSQL_YYABORT; + Lex->xid->set($5, $1->ptr(), $1->length(), $3->ptr(), $3->length()); + } + ; -begin_or_start: BEGIN_SYM {} - | START_SYM {} - ; +begin_or_start: + BEGIN_SYM {} + | START_SYM {} + ; opt_join_or_resume: - /* nothing */ { Lex->xa_opt=XA_NONE; } - | JOIN_SYM { Lex->xa_opt=XA_JOIN; } - | RESUME_SYM { Lex->xa_opt=XA_RESUME; } - ; + /* nothing */ { Lex->xa_opt=XA_NONE; } + | JOIN_SYM { Lex->xa_opt=XA_JOIN; } + | RESUME_SYM { Lex->xa_opt=XA_RESUME; } + ; opt_one_phase: - /* nothing */ { Lex->xa_opt=XA_NONE; } - | ONE_SYM PHASE_SYM { Lex->xa_opt=XA_ONE_PHASE; } - ; + /* nothing */ { Lex->xa_opt=XA_NONE; } + | ONE_SYM PHASE_SYM { Lex->xa_opt=XA_ONE_PHASE; } + ; opt_suspend: - /* nothing */ { Lex->xa_opt=XA_NONE; } - | SUSPEND_SYM { Lex->xa_opt=XA_SUSPEND; } - opt_migrate - ; + /* nothing */ + { Lex->xa_opt=XA_NONE; } + | SUSPEND_SYM + { Lex->xa_opt=XA_SUSPEND; } + opt_migrate + ; opt_migrate: - /* nothing */ { } - | FOR_SYM MIGRATE_SYM { Lex->xa_opt=XA_FOR_MIGRATE; } - ; + /* nothing */ {} + | FOR_SYM MIGRATE_SYM { Lex->xa_opt=XA_FOR_MIGRATE; } + ; install: - INSTALL_SYM PLUGIN_SYM ident SONAME_SYM TEXT_STRING_sys - { - LEX *lex= Lex; - lex->sql_command= SQLCOM_INSTALL_PLUGIN; - lex->comment= $3; - lex->ident= $5; - }; + INSTALL_SYM PLUGIN_SYM ident SONAME_SYM TEXT_STRING_sys + { + LEX *lex= Lex; + lex->sql_command= SQLCOM_INSTALL_PLUGIN; + lex->comment= $3; + lex->ident= $5; + } + ; uninstall: - UNINSTALL_SYM PLUGIN_SYM ident - { - LEX *lex= Lex; - lex->sql_command= SQLCOM_UNINSTALL_PLUGIN; - lex->comment= $3; - }; + UNINSTALL_SYM PLUGIN_SYM ident + { + LEX *lex= Lex; + lex->sql_command= SQLCOM_UNINSTALL_PLUGIN; + lex->comment= $3; + } + ; + From 01f8130aa68392d14f36cc17c01e1b349bf844f5 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 15 Aug 2007 09:23:44 +0200 Subject: [PATCH 065/194] bug#28570: handler::index_read() is called with different find_flag when ORDER BY is used The range analysis module did not correctly signal to the handler that a range represents a ref (EQ_RANGE flag). This causes non-range queries like SELECT ... FROM ... WHERE keypart_1=const, ..., keypart_n=const ORDER BY ... FOR UPDATE to wait for a lock unneccesarily if another running transaction uses SELECT ... FOR UPDATE on the same table. Fixed by setting EQ_RANGE for all range accesses that represent an equality predicate. mysql-test/r/innodb_mysql.result: bug#28570: Test Result mysql-test/t/innodb_mysql.test: bug#28570: Test Case sql/handler.cc: bug#28570: Updated comment sql/opt_range.cc: bug#28570: Removed the criterion that key has to be unique (HA_NOSAME) in order for the EQ_RANGE flag to be set. It is sufficient that the range represent a ref access. --- mysql-test/r/innodb_mysql.result | 18 ++++++++++++++++++ mysql-test/t/innodb_mysql.test | 29 +++++++++++++++++++++++++++++ sql/handler.cc | 3 ++- sql/opt_range.cc | 3 +-- 4 files changed, 50 insertions(+), 3 deletions(-) diff --git a/mysql-test/r/innodb_mysql.result b/mysql-test/r/innodb_mysql.result index 5b3ca972467..0bb93318557 100644 --- a/mysql-test/r/innodb_mysql.result +++ b/mysql-test/r/innodb_mysql.result @@ -1007,4 +1007,22 @@ CALL p1(); CALL p1(); DROP PROCEDURE p1; DROP TABLE t1; +CREATE TABLE t1 ( +a INT, +b INT, +KEY (b) +) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1,10), (2,10), (2,20), (3,30); +START TRANSACTION; +SELECT * FROM t1 WHERE b=20 FOR UPDATE; +a b +2 20 +START TRANSACTION; +SELECT * FROM t1 WHERE b=10 ORDER BY A FOR UPDATE; +a b +1 10 +2 10 +ROLLBACK; +ROLLBACK; +DROP TABLE t1; End of 5.0 tests diff --git a/mysql-test/t/innodb_mysql.test b/mysql-test/t/innodb_mysql.test index 63431e10bbf..e27db9944fe 100644 --- a/mysql-test/t/innodb_mysql.test +++ b/mysql-test/t/innodb_mysql.test @@ -840,5 +840,34 @@ DISCONNECT con2; DROP PROCEDURE p1; DROP TABLE t1; +# +# Bug #28570: handler::index_read() is called with different find_flag when +# ORDER BY is used +# + +CREATE TABLE t1 ( + a INT, + b INT, + KEY (b) +) ENGINE=InnoDB; + +INSERT INTO t1 VALUES (1,10), (2,10), (2,20), (3,30); + +START TRANSACTION; +SELECT * FROM t1 WHERE b=20 FOR UPDATE; + +--connect (conn2, localhost, root,,test) + +# This statement gives a "failed: 1205: Lock wait timeout exceeded; try +# restarting transaction" message when the bug is present. +START TRANSACTION; +SELECT * FROM t1 WHERE b=10 ORDER BY A FOR UPDATE; +ROLLBACK; + +--disconnect conn2 +--connection default + +ROLLBACK; +DROP TABLE t1; --echo End of 5.0 tests diff --git a/sql/handler.cc b/sql/handler.cc index 8ef14ce8906..bfb7e8c369f 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -2610,7 +2610,8 @@ int handler::read_multi_range_next(KEY_MULTI_RANGE **found_range_p) read_range_first() start_key Start key. Is 0 if no min range end_key End key. Is 0 if no max range - eq_range_arg Set to 1 if start_key == end_key + eq_range_arg Set to 1 if start_key == end_key and the range endpoints + will not change during query execution. sorted Set to 1 if result should be sorted per key NOTES diff --git a/sql/opt_range.cc b/sql/opt_range.cc index 247f0eada49..39f0321955d 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -6369,8 +6369,7 @@ QUICK_RANGE_SELECT *get_quick_select_for_ref(THD *thd, TABLE *table, range->min_key=range->max_key=(char*) ref->key_buff; range->min_length=range->max_length=ref->key_length; range->flag= ((ref->key_length == key_info->key_length && - (key_info->flags & (HA_NOSAME | HA_END_SPACE_KEY)) == - HA_NOSAME) ? EQ_RANGE : 0); + (key_info->flags & HA_END_SPACE_KEY) == 0) ? EQ_RANGE : 0); if (!(quick->key_parts=key_part=(KEY_PART *) alloc_root(&quick->alloc,sizeof(KEY_PART)*ref->key_parts))) From 2adb4942e4be292a94db8083731f7534f7d0962b Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 15 Aug 2007 02:18:41 -0600 Subject: [PATCH 066/194] Update result formatting for embedded runs of ps_1general and trigger tests, to match build_table_filename behavior. mysql-test/t/ps_1general.test: Adjust how the datadir file name is normalized, to match new build_table_filename behavior. This fixes the test result when run with the embedded server. mysql-test/t/trigger.test: Adjust how the datadir file name is normalized, to match new build_table_filename behavior. This fixes the test result when run with the embedded server. --- mysql-test/t/ps_1general.test | 2 +- mysql-test/t/trigger.test | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/mysql-test/t/ps_1general.test b/mysql-test/t/ps_1general.test index 13773504fb0..42bf39890de 100644 --- a/mysql-test/t/ps_1general.test +++ b/mysql-test/t/ps_1general.test @@ -577,7 +577,7 @@ prepare stmt1 from ' rename table t5 to t6, t7 to t8 ' ; create table t5 (a int) ; # rename must fail, t7 does not exist # Clean up the filename here because embedded server reports whole path ---replace_result \\ / $MYSQLTEST_VARDIR . /master-data/ "" t7.frm t7 +--replace_result $MYSQLTEST_VARDIR . master-data/ '' t7.frm t7 --error 1017 execute stmt1 ; create table t7 (a int) ; diff --git a/mysql-test/t/trigger.test b/mysql-test/t/trigger.test index c7251040544..9f4634e1e17 100644 --- a/mysql-test/t/trigger.test +++ b/mysql-test/t/trigger.test @@ -1146,7 +1146,8 @@ write_file $MYSQLTEST_VARDIR/master-data/test/t1_ai.TRN~; dummy EOF chmod 0000 $MYSQLTEST_VARDIR/master-data/test/t1_ai.TRN~; ---replace_result $MYSQLTEST_VARDIR . master-data// '' +# Normalize the datadir path; the embedded server doesn't chdir to datadir +--replace_result $MYSQLTEST_VARDIR . master-data/ '' --error 1 rename table t1 to t2; # 't1' should be still there and triggers should work correctly From 37714be9b3bcf00a163742b2464bcbec955bb98d Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 15 Aug 2007 14:53:14 +0400 Subject: [PATCH 067/194] Fixed path to tmp directory for rpl_mixed_dml.inc mysql-test/suite/rpl/include/rpl_mixed_dml.inc: Fixed path to tmp directory --- mysql-test/suite/rpl/include/rpl_mixed_dml.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysql-test/suite/rpl/include/rpl_mixed_dml.inc b/mysql-test/suite/rpl/include/rpl_mixed_dml.inc index ea5dd58bab2..154890e495d 100644 --- a/mysql-test/suite/rpl/include/rpl_mixed_dml.inc +++ b/mysql-test/suite/rpl/include/rpl_mixed_dml.inc @@ -51,7 +51,7 @@ DELETE FROM t2 WHERE a = 2; --echo --echo ******************** LOAD DATA INFILE ******************** ---exec cp ./suite/rpl/data/rpl_mixed.dat ./var/tmp/ +--exec cp ./suite/rpl/data/rpl_mixed.dat $MYSQLTEST_VARDIR/tmp/ LOAD DATA INFILE '../tmp/rpl_mixed.dat' INTO TABLE t1 FIELDS TERMINATED BY '|' ; --exec rm ./var/tmp/rpl_mixed.dat SELECT * FROM t1; From 8d9ebcf04468d23ea2a6ec746056dee5e00b7faa Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 15 Aug 2007 15:51:27 +0400 Subject: [PATCH 068/194] disabled rpl_innodb_mixed_dml mysql-test/suite/rpl/include/rpl_mixed_dml.inc: fix for tmp directory --- mysql-test/suite/rpl/include/rpl_mixed_dml.inc | 2 +- mysql-test/suite/rpl/t/disabled.def | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mysql-test/suite/rpl/include/rpl_mixed_dml.inc b/mysql-test/suite/rpl/include/rpl_mixed_dml.inc index 154890e495d..1accf40160a 100644 --- a/mysql-test/suite/rpl/include/rpl_mixed_dml.inc +++ b/mysql-test/suite/rpl/include/rpl_mixed_dml.inc @@ -53,7 +53,7 @@ DELETE FROM t2 WHERE a = 2; --echo ******************** LOAD DATA INFILE ******************** --exec cp ./suite/rpl/data/rpl_mixed.dat $MYSQLTEST_VARDIR/tmp/ LOAD DATA INFILE '../tmp/rpl_mixed.dat' INTO TABLE t1 FIELDS TERMINATED BY '|' ; ---exec rm ./var/tmp/rpl_mixed.dat +--exec rm $MYSQLTEST_VARDIR/tmp/rpl_mixed.dat SELECT * FROM t1; --source suite/rpl/include/rpl_mixed_check_select.inc --source suite/rpl/include/rpl_mixed_clear_tables.inc diff --git a/mysql-test/suite/rpl/t/disabled.def b/mysql-test/suite/rpl/t/disabled.def index 34a8d6988a9..d1b636ad9a2 100644 --- a/mysql-test/suite/rpl/t/disabled.def +++ b/mysql-test/suite/rpl/t/disabled.def @@ -12,7 +12,7 @@ rpl_ddl : BUG#26418 2007-03-01 mleich Slave out of sync after CREATE/DROP TEMPORARY TABLE + ROLLBACK on master #rpl_innodb_mixed_ddl : Bug #29363 rpl.rpl_innodb_mixed_* test failures -#rpl_innodb_mixed_dml : Bug #29363 rpl.rpl_innodb_mixed_* test failures +rpl_innodb_mixed_dml : Bug #29363 rpl.rpl_innodb_mixed_* test failures rpl_invoked_features : BUG#29020 2007-06-21 Lars Non-deterministic test case rpl_auto_increment_11932 : Bug#29809 2007-07-16 ingo Slave SQL errors in warnings file rpl_stm_extraColmaster_ndb : WL#3915 : Statement-based replication not supported in ndb. Enable test when supported. From c514373cf306e2f3dcd5a8e3ee84d4001bb1f7f4 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 15 Aug 2007 17:43:08 +0400 Subject: [PATCH 069/194] Fix doxygen warnings. client/mysqldump.c: Fix doxygen warnings mysys/test_charset.c: Fix doxygen warnings sql/event_db_repository.cc: Fix doxygen warnings sql/events.cc: Fix doxygen warnings sql/events.h: Fix doxygen warnings sql/item_create.cc: Fix doxygen warnings, style. sql/item_create.h: Fix coding style. sql/item_subselect.cc: Fix doxygen warnings sql/lock.cc: Fix doxygen warnings sql/sp.cc: Fix doxygen warnings sql/sp_head.h: Fix doxygen warnings sql/sql_analyse.cc: Fix doxygen warnings sql/sql_analyse.h: Fix doxygen warnings sql/sql_base.cc: Fix doxygen warnings sql/sql_db.cc: Fix doxygen warnings sql/sql_lex.cc: Fix doxygen warnings sql/sql_lex.h: Fix doxygen warnings sql/sql_parse.cc: Fix doxygen warnings sql/sql_plugin.cc: Fix doxygen warnings sql/sql_prepare.cc: Fix doxygen warnings sql/sql_show.cc: Fix doxygen warnings sql/sql_trigger.cc: Fix doxygen warnings sql/sql_update.cc: Fix doxygen warnings sql/table.h: Fix doxygen warnings --- client/mysqldump.c | 4 +- mysys/test_charset.c | 2 +- sql/event_db_repository.cc | 6 +- sql/events.cc | 3 +- sql/events.h | 9 +- sql/item_create.cc | 330 ++++++++++++++++++------------------- sql/item_create.h | 8 +- sql/item_subselect.cc | 2 +- sql/lock.cc | 13 +- sql/sp.cc | 2 +- sql/sp_head.h | 2 +- sql/sql_analyse.cc | 2 +- sql/sql_analyse.h | 2 +- sql/sql_base.cc | 6 +- sql/sql_db.cc | 2 +- sql/sql_lex.cc | 15 +- sql/sql_lex.h | 19 +-- sql/sql_parse.cc | 11 +- sql/sql_plugin.cc | 2 +- sql/sql_prepare.cc | 1 - sql/sql_show.cc | 4 +- sql/sql_trigger.cc | 16 +- sql/sql_update.cc | 8 +- sql/table.h | 10 +- 24 files changed, 247 insertions(+), 232 deletions(-) diff --git a/client/mysqldump.c b/client/mysqldump.c index 566760d2db3..3d2aec92dea 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -1308,8 +1308,8 @@ static char *cover_definer_clause_in_trigger(const char *trigger_def_str, @note This function will go away when WL#3995 is implemented. - @param[in] def_str CREATE FUNCTION|PROCEDURE statement string. - @param[in] def_length length of the def_str. + @param[in] def_str CREATE FUNCTION|PROCEDURE statement string. + @param[in] def_str_length length of the def_str. @return pointer to the new allocated query string. */ diff --git a/mysys/test_charset.c b/mysys/test_charset.c index 08154e67863..d867b49304e 100644 --- a/mysys/test_charset.c +++ b/mysys/test_charset.c @@ -77,7 +77,7 @@ int main(int argc, char **argv) { _print_csinfo(cs); fflush(stdout); -#define NOT_USED_ANYMORE +#ifdef NOT_USED_ANYMORE cs_list = list_charsets(MYF(MY_CS_COMPILED | MY_CS_CONFIG)); printf("LIST OF CHARSETS (compiled + *.conf):\n%s\n", cs_list); my_free(cs_list,MYF(0)); diff --git a/sql/event_db_repository.cc b/sql/event_db_repository.cc index b7bcb6344fd..96c01ad9a0e 100644 --- a/sql/event_db_repository.cc +++ b/sql/event_db_repository.cc @@ -556,7 +556,7 @@ Event_db_repository::open_event_table(THD *thd, enum thr_lock_type lock_type, only creates a record on disk. @pre The thread handle has no open tables. - @param[in,out] THD + @param[in,out] thd THD @param[in] parse_data Parsed event definition @param[in] create_if_not TRUE if IF NOT EXISTS clause was provided to CREATE EVENT statement @@ -657,7 +657,7 @@ end: @param[in,out] thd thread handle @param[in] parse_data parsed event definition - @paran[in[ new_dbname not NULL if ALTER EVENT RENAME + @param[in] new_dbname not NULL if ALTER EVENT RENAME points at a new database name @param[in] new_name not NULL if ALTER EVENT RENAME points at a new event name @@ -812,7 +812,7 @@ end: @retval FALSE an event with such db/name key exists - @reval TRUE no record found or an error occured. + @retval TRUE no record found or an error occured. */ bool diff --git a/sql/events.cc b/sql/events.cc index 8d32580816f..bdb9512647f 100644 --- a/sql/events.cc +++ b/sql/events.cc @@ -790,8 +790,7 @@ Events::show_create_event(THD *thd, LEX_STRING dbname, LEX_STRING name) Check access rights and fill INFORMATION_SCHEMA.events table. @param[in,out] thd Thread context - @param[in] table The temporary table to fill. - cond Unused + @param[in] tables The temporary table to fill. In MySQL INFORMATION_SCHEMA tables are temporary tables that are created and filled on demand. In this function, we fill diff --git a/sql/events.h b/sql/events.h index 1b99b072fd7..078ab63041b 100644 --- a/sql/events.h +++ b/sql/events.h @@ -15,9 +15,11 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -/* +/** @file A public interface of Events Scheduler module. + @defgroup Event Scheduler + @{ */ class Event_parse_data; @@ -42,7 +44,7 @@ int sortcmp_lex_string(LEX_STRING s, LEX_STRING t, CHARSET_INFO *cs); /** - @class Events -- a facade to the functionality of the Event Scheduler. + @brief A facade to the functionality of the Event Scheduler. Every public operation against the scheduler has to be executed via the interface provided by a static method of this class. No instance of this @@ -152,5 +154,8 @@ private: void operator=(Events &); }; +/** + @} (end of group Event Scheduler) +*/ #endif /* _EVENT_H_ */ diff --git a/sql/item_create.cc b/sql/item_create.cc index fa15b992e5c..03424da80a8 100644 --- a/sql/item_create.cc +++ b/sql/item_create.cc @@ -37,7 +37,7 @@ class Create_native_func : public Create_func { public: - virtual Item* create(THD *thd, LEX_STRING name, List *item_list); + virtual Item *create(THD *thd, LEX_STRING name, List *item_list); /** Builder method, with no arguments. @@ -46,7 +46,7 @@ public: @param item_list The function parameters, none of which are named @return An item representing the function call */ - virtual Item* create_native(THD *thd, LEX_STRING name, + virtual Item *create_native(THD *thd, LEX_STRING name, List *item_list) = 0; protected: @@ -64,14 +64,14 @@ protected: class Create_func_arg0 : public Create_func { public: - virtual Item* create(THD *thd, LEX_STRING name, List *item_list); + virtual Item *create(THD *thd, LEX_STRING name, List *item_list); /** Builder method, with no arguments. @param thd The current thread @return An item representing the function call */ - virtual Item* create(THD *thd) = 0; + virtual Item *create(THD *thd) = 0; protected: /** Constructor. */ @@ -88,7 +88,7 @@ protected: class Create_func_arg1 : public Create_func { public: - virtual Item* create(THD *thd, LEX_STRING name, List *item_list); + virtual Item *create(THD *thd, LEX_STRING name, List *item_list); /** Builder method, with one argument. @@ -96,7 +96,7 @@ public: @param arg1 The first argument of the function @return An item representing the function call */ - virtual Item* create(THD *thd, Item *arg1) = 0; + virtual Item *create(THD *thd, Item *arg1) = 0; protected: /** Constructor. */ @@ -113,7 +113,7 @@ protected: class Create_func_arg2 : public Create_func { public: - virtual Item* create(THD *thd, LEX_STRING name, List *item_list); + virtual Item *create(THD *thd, LEX_STRING name, List *item_list); /** Builder method, with two arguments. @@ -122,7 +122,7 @@ public: @param arg2 The second argument of the function @return An item representing the function call */ - virtual Item* create(THD *thd, Item *arg1, Item *arg2) = 0; + virtual Item *create(THD *thd, Item *arg1, Item *arg2) = 0; protected: /** Constructor. */ @@ -139,7 +139,7 @@ protected: class Create_func_arg3 : public Create_func { public: - virtual Item* create(THD *thd, LEX_STRING name, List *item_list); + virtual Item *create(THD *thd, LEX_STRING name, List *item_list); /** Builder method, with three arguments. @@ -149,7 +149,7 @@ public: @param arg3 The third argument of the function @return An item representing the function call */ - virtual Item* create(THD *thd, Item *arg1, Item *arg2, Item *arg3) = 0; + virtual Item *create(THD *thd, Item *arg1, Item *arg2, Item *arg3) = 0; protected: /** Constructor. */ @@ -166,7 +166,7 @@ protected: class Create_sp_func : public Create_qfunc { public: - virtual Item* create(THD *thd, LEX_STRING db, LEX_STRING name, + virtual Item *create(THD *thd, LEX_STRING db, LEX_STRING name, bool use_explicit_name, List *item_list); static Create_sp_func s_singleton; @@ -189,7 +189,7 @@ protected: class Create_func_no_geom : public Create_func { public: - virtual Item* create(THD *thd, LEX_STRING name, List *item_list); + virtual Item *create(THD *thd, LEX_STRING name, List *item_list); /** Singleton. */ static Create_func_no_geom s_singleton; @@ -212,7 +212,7 @@ protected: class Create_func_abs : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_abs s_singleton; @@ -225,7 +225,7 @@ protected: class Create_func_acos : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_acos s_singleton; @@ -238,7 +238,7 @@ protected: class Create_func_addtime : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_addtime s_singleton; @@ -251,7 +251,7 @@ protected: class Create_func_aes_encrypt : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_aes_encrypt s_singleton; @@ -264,7 +264,7 @@ protected: class Create_func_aes_decrypt : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_aes_decrypt s_singleton; @@ -278,7 +278,7 @@ protected: class Create_func_area : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_area s_singleton; @@ -293,7 +293,7 @@ protected: class Create_func_as_wkb : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_as_wkb s_singleton; @@ -308,7 +308,7 @@ protected: class Create_func_as_wkt : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_as_wkt s_singleton; @@ -322,7 +322,7 @@ protected: class Create_func_asin : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_asin s_singleton; @@ -335,7 +335,7 @@ protected: class Create_func_atan : public Create_native_func { public: - virtual Item* create_native(THD *thd, LEX_STRING name, List *item_list); + virtual Item *create_native(THD *thd, LEX_STRING name, List *item_list); static Create_func_atan s_singleton; @@ -348,7 +348,7 @@ protected: class Create_func_benchmark : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_benchmark s_singleton; @@ -361,7 +361,7 @@ protected: class Create_func_bin : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_bin s_singleton; @@ -374,7 +374,7 @@ protected: class Create_func_bit_count : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_bit_count s_singleton; @@ -387,7 +387,7 @@ protected: class Create_func_bit_length : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_bit_length s_singleton; @@ -400,7 +400,7 @@ protected: class Create_func_ceiling : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg); + virtual Item *create(THD *thd, Item *arg1); static Create_func_ceiling s_singleton; @@ -414,7 +414,7 @@ protected: class Create_func_centroid : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_centroid s_singleton; @@ -428,7 +428,7 @@ protected: class Create_func_char_length : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_char_length s_singleton; @@ -441,7 +441,7 @@ protected: class Create_func_coercibility : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_coercibility s_singleton; @@ -454,7 +454,7 @@ protected: class Create_func_compress : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_compress s_singleton; @@ -467,7 +467,7 @@ protected: class Create_func_concat : public Create_native_func { public: - virtual Item* create_native(THD *thd, LEX_STRING name, List *item_list); + virtual Item *create_native(THD *thd, LEX_STRING name, List *item_list); static Create_func_concat s_singleton; @@ -480,7 +480,7 @@ protected: class Create_func_concat_ws : public Create_native_func { public: - virtual Item* create_native(THD *thd, LEX_STRING name, List *item_list); + virtual Item *create_native(THD *thd, LEX_STRING name, List *item_list); static Create_func_concat_ws s_singleton; @@ -493,7 +493,7 @@ protected: class Create_func_connection_id : public Create_func_arg0 { public: - virtual Item* create(THD *thd); + virtual Item *create(THD *thd); static Create_func_connection_id s_singleton; @@ -507,7 +507,7 @@ protected: class Create_func_contains : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_contains s_singleton; @@ -521,7 +521,7 @@ protected: class Create_func_conv : public Create_func_arg3 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2, Item *arg3); + virtual Item *create(THD *thd, Item *arg1, Item *arg2, Item *arg3); static Create_func_conv s_singleton; @@ -534,7 +534,7 @@ protected: class Create_func_convert_tz : public Create_func_arg3 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2, Item *arg3); + virtual Item *create(THD *thd, Item *arg1, Item *arg2, Item *arg3); static Create_func_convert_tz s_singleton; @@ -547,7 +547,7 @@ protected: class Create_func_cos : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_cos s_singleton; @@ -560,7 +560,7 @@ protected: class Create_func_cot : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_cot s_singleton; @@ -573,7 +573,7 @@ protected: class Create_func_crc32 : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_crc32 s_singleton; @@ -587,7 +587,7 @@ protected: class Create_func_crosses : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_crosses s_singleton; @@ -601,7 +601,7 @@ protected: class Create_func_date_format : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_date_format s_singleton; @@ -614,7 +614,7 @@ protected: class Create_func_datediff : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_datediff s_singleton; @@ -627,7 +627,7 @@ protected: class Create_func_dayname : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_dayname s_singleton; @@ -640,7 +640,7 @@ protected: class Create_func_dayofmonth : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_dayofmonth s_singleton; @@ -653,7 +653,7 @@ protected: class Create_func_dayofweek : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_dayofweek s_singleton; @@ -666,7 +666,7 @@ protected: class Create_func_dayofyear : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_dayofyear s_singleton; @@ -679,7 +679,7 @@ protected: class Create_func_decode : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_decode s_singleton; @@ -692,7 +692,7 @@ protected: class Create_func_degrees : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_degrees s_singleton; @@ -705,7 +705,7 @@ protected: class Create_func_des_decrypt : public Create_native_func { public: - virtual Item* create_native(THD *thd, LEX_STRING name, List *item_list); + virtual Item *create_native(THD *thd, LEX_STRING name, List *item_list); static Create_func_des_decrypt s_singleton; @@ -718,7 +718,7 @@ protected: class Create_func_des_encrypt : public Create_native_func { public: - virtual Item* create_native(THD *thd, LEX_STRING name, List *item_list); + virtual Item *create_native(THD *thd, LEX_STRING name, List *item_list); static Create_func_des_encrypt s_singleton; @@ -732,7 +732,7 @@ protected: class Create_func_dimension : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_dimension s_singleton; @@ -747,7 +747,7 @@ protected: class Create_func_disjoint : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_disjoint s_singleton; @@ -761,7 +761,7 @@ protected: class Create_func_elt : public Create_native_func { public: - virtual Item* create_native(THD *thd, LEX_STRING name, List *item_list); + virtual Item *create_native(THD *thd, LEX_STRING name, List *item_list); static Create_func_elt s_singleton; @@ -774,7 +774,7 @@ protected: class Create_func_encode : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_encode s_singleton; @@ -787,7 +787,7 @@ protected: class Create_func_encrypt : public Create_native_func { public: - virtual Item* create_native(THD *thd, LEX_STRING name, List *item_list); + virtual Item *create_native(THD *thd, LEX_STRING name, List *item_list); static Create_func_encrypt s_singleton; @@ -801,7 +801,7 @@ protected: class Create_func_endpoint : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_endpoint s_singleton; @@ -816,7 +816,7 @@ protected: class Create_func_envelope : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_envelope s_singleton; @@ -831,7 +831,7 @@ protected: class Create_func_equals : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_equals s_singleton; @@ -845,7 +845,7 @@ protected: class Create_func_exp : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_exp s_singleton; @@ -858,7 +858,7 @@ protected: class Create_func_export_set : public Create_native_func { public: - virtual Item* create_native(THD *thd, LEX_STRING name, List *item_list); + virtual Item *create_native(THD *thd, LEX_STRING name, List *item_list); static Create_func_export_set s_singleton; @@ -872,7 +872,7 @@ protected: class Create_func_exteriorring : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_exteriorring s_singleton; @@ -886,7 +886,7 @@ protected: class Create_func_field : public Create_native_func { public: - virtual Item* create_native(THD *thd, LEX_STRING name, List *item_list); + virtual Item *create_native(THD *thd, LEX_STRING name, List *item_list); static Create_func_field s_singleton; @@ -899,7 +899,7 @@ protected: class Create_func_find_in_set : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_find_in_set s_singleton; @@ -912,7 +912,7 @@ protected: class Create_func_floor : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_floor s_singleton; @@ -925,7 +925,7 @@ protected: class Create_func_format : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_format s_singleton; @@ -938,7 +938,7 @@ protected: class Create_func_found_rows : public Create_func_arg0 { public: - virtual Item* create(THD *thd); + virtual Item *create(THD *thd); static Create_func_found_rows s_singleton; @@ -951,7 +951,7 @@ protected: class Create_func_from_days : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_from_days s_singleton; @@ -964,7 +964,7 @@ protected: class Create_func_from_unixtime : public Create_native_func { public: - virtual Item* create_native(THD *thd, LEX_STRING name, List *item_list); + virtual Item *create_native(THD *thd, LEX_STRING name, List *item_list); static Create_func_from_unixtime s_singleton; @@ -978,7 +978,7 @@ protected: class Create_func_geometry_from_text : public Create_native_func { public: - virtual Item* create_native(THD *thd, LEX_STRING name, List *item_list); + virtual Item *create_native(THD *thd, LEX_STRING name, List *item_list); static Create_func_geometry_from_text s_singleton; @@ -993,7 +993,7 @@ protected: class Create_func_geometry_from_wkb : public Create_native_func { public: - virtual Item* create_native(THD *thd, LEX_STRING name, List *item_list); + virtual Item *create_native(THD *thd, LEX_STRING name, List *item_list); static Create_func_geometry_from_wkb s_singleton; @@ -1008,7 +1008,7 @@ protected: class Create_func_geometry_type : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_geometry_type s_singleton; @@ -1023,7 +1023,7 @@ protected: class Create_func_geometryn : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_geometryn s_singleton; @@ -1037,7 +1037,7 @@ protected: class Create_func_get_lock : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_get_lock s_singleton; @@ -1051,7 +1051,7 @@ protected: class Create_func_glength : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_glength s_singleton; @@ -1065,7 +1065,7 @@ protected: class Create_func_greatest : public Create_native_func { public: - virtual Item* create_native(THD *thd, LEX_STRING name, List *item_list); + virtual Item *create_native(THD *thd, LEX_STRING name, List *item_list); static Create_func_greatest s_singleton; @@ -1078,7 +1078,7 @@ protected: class Create_func_hex : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_hex s_singleton; @@ -1091,7 +1091,7 @@ protected: class Create_func_ifnull : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_ifnull s_singleton; @@ -1104,7 +1104,7 @@ protected: class Create_func_inet_ntoa : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_inet_ntoa s_singleton; @@ -1117,7 +1117,7 @@ protected: class Create_func_inet_aton : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_inet_aton s_singleton; @@ -1130,7 +1130,7 @@ protected: class Create_func_instr : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_instr s_singleton; @@ -1144,7 +1144,7 @@ protected: class Create_func_interiorringn : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_interiorringn s_singleton; @@ -1159,7 +1159,7 @@ protected: class Create_func_intersects : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_intersects s_singleton; @@ -1173,7 +1173,7 @@ protected: class Create_func_is_free_lock : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_is_free_lock s_singleton; @@ -1186,7 +1186,7 @@ protected: class Create_func_is_used_lock : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_is_used_lock s_singleton; @@ -1200,7 +1200,7 @@ protected: class Create_func_isclosed : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_isclosed s_singleton; @@ -1215,7 +1215,7 @@ protected: class Create_func_isempty : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_isempty s_singleton; @@ -1229,7 +1229,7 @@ protected: class Create_func_isnull : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_isnull s_singleton; @@ -1243,7 +1243,7 @@ protected: class Create_func_issimple : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_issimple s_singleton; @@ -1257,7 +1257,7 @@ protected: class Create_func_last_day : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_last_day s_singleton; @@ -1270,7 +1270,7 @@ protected: class Create_func_last_insert_id : public Create_native_func { public: - virtual Item* create_native(THD *thd, LEX_STRING name, List *item_list); + virtual Item *create_native(THD *thd, LEX_STRING name, List *item_list); static Create_func_last_insert_id s_singleton; @@ -1283,7 +1283,7 @@ protected: class Create_func_lcase : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_lcase s_singleton; @@ -1296,7 +1296,7 @@ protected: class Create_func_least : public Create_native_func { public: - virtual Item* create_native(THD *thd, LEX_STRING name, List *item_list); + virtual Item *create_native(THD *thd, LEX_STRING name, List *item_list); static Create_func_least s_singleton; @@ -1309,7 +1309,7 @@ protected: class Create_func_length : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_length s_singleton; @@ -1322,7 +1322,7 @@ protected: class Create_func_ln : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_ln s_singleton; @@ -1335,7 +1335,7 @@ protected: class Create_func_load_file : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_load_file s_singleton; @@ -1348,7 +1348,7 @@ protected: class Create_func_locate : public Create_native_func { public: - virtual Item* create_native(THD *thd, LEX_STRING name, List *item_list); + virtual Item *create_native(THD *thd, LEX_STRING name, List *item_list); static Create_func_locate s_singleton; @@ -1361,7 +1361,7 @@ protected: class Create_func_log : public Create_native_func { public: - virtual Item* create_native(THD *thd, LEX_STRING name, List *item_list); + virtual Item *create_native(THD *thd, LEX_STRING name, List *item_list); static Create_func_log s_singleton; @@ -1374,7 +1374,7 @@ protected: class Create_func_log10 : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_log10 s_singleton; @@ -1387,7 +1387,7 @@ protected: class Create_func_log2 : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_log2 s_singleton; @@ -1400,7 +1400,7 @@ protected: class Create_func_lpad : public Create_func_arg3 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2, Item *arg3); + virtual Item *create(THD *thd, Item *arg1, Item *arg2, Item *arg3); static Create_func_lpad s_singleton; @@ -1413,7 +1413,7 @@ protected: class Create_func_ltrim : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_ltrim s_singleton; @@ -1426,7 +1426,7 @@ protected: class Create_func_makedate : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_makedate s_singleton; @@ -1439,7 +1439,7 @@ protected: class Create_func_maketime : public Create_func_arg3 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2, Item *arg3); + virtual Item *create(THD *thd, Item *arg1, Item *arg2, Item *arg3); static Create_func_maketime s_singleton; @@ -1452,7 +1452,7 @@ protected: class Create_func_make_set : public Create_native_func { public: - virtual Item* create_native(THD *thd, LEX_STRING name, List *item_list); + virtual Item *create_native(THD *thd, LEX_STRING name, List *item_list); static Create_func_make_set s_singleton; @@ -1465,7 +1465,7 @@ protected: class Create_func_master_pos_wait : public Create_native_func { public: - virtual Item* create_native(THD *thd, LEX_STRING name, List *item_list); + virtual Item *create_native(THD *thd, LEX_STRING name, List *item_list); static Create_func_master_pos_wait s_singleton; @@ -1478,7 +1478,7 @@ protected: class Create_func_md5 : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_md5 s_singleton; @@ -1491,7 +1491,7 @@ protected: class Create_func_monthname : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_monthname s_singleton; @@ -1504,7 +1504,7 @@ protected: class Create_func_name_const : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_name_const s_singleton; @@ -1517,7 +1517,7 @@ protected: class Create_func_nullif : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_nullif s_singleton; @@ -1531,7 +1531,7 @@ protected: class Create_func_numgeometries : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_numgeometries s_singleton; @@ -1546,7 +1546,7 @@ protected: class Create_func_numinteriorring : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_numinteriorring s_singleton; @@ -1561,7 +1561,7 @@ protected: class Create_func_numpoints : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_numpoints s_singleton; @@ -1575,7 +1575,7 @@ protected: class Create_func_oct : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_oct s_singleton; @@ -1588,7 +1588,7 @@ protected: class Create_func_ord : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_ord s_singleton; @@ -1602,7 +1602,7 @@ protected: class Create_func_overlaps : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_overlaps s_singleton; @@ -1616,7 +1616,7 @@ protected: class Create_func_period_add : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_period_add s_singleton; @@ -1629,7 +1629,7 @@ protected: class Create_func_period_diff : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_period_diff s_singleton; @@ -1642,7 +1642,7 @@ protected: class Create_func_pi : public Create_func_arg0 { public: - virtual Item* create(THD *thd); + virtual Item *create(THD *thd); static Create_func_pi s_singleton; @@ -1656,7 +1656,7 @@ protected: class Create_func_pointn : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_pointn s_singleton; @@ -1670,7 +1670,7 @@ protected: class Create_func_pow : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_pow s_singleton; @@ -1683,7 +1683,7 @@ protected: class Create_func_quote : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_quote s_singleton; @@ -1696,7 +1696,7 @@ protected: class Create_func_radians : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_radians s_singleton; @@ -1709,7 +1709,7 @@ protected: class Create_func_rand : public Create_native_func { public: - virtual Item* create_native(THD *thd, LEX_STRING name, List *item_list); + virtual Item *create_native(THD *thd, LEX_STRING name, List *item_list); static Create_func_rand s_singleton; @@ -1722,7 +1722,7 @@ protected: class Create_func_release_lock : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_release_lock s_singleton; @@ -1735,7 +1735,7 @@ protected: class Create_func_reverse : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_reverse s_singleton; @@ -1748,7 +1748,7 @@ protected: class Create_func_round : public Create_native_func { public: - virtual Item* create_native(THD *thd, LEX_STRING name, List *item_list); + virtual Item *create_native(THD *thd, LEX_STRING name, List *item_list); static Create_func_round s_singleton; @@ -1761,7 +1761,7 @@ protected: class Create_func_row_count : public Create_func_arg0 { public: - virtual Item* create(THD *thd); + virtual Item *create(THD *thd); static Create_func_row_count s_singleton; @@ -1774,7 +1774,7 @@ protected: class Create_func_rpad : public Create_func_arg3 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2, Item *arg3); + virtual Item *create(THD *thd, Item *arg1, Item *arg2, Item *arg3); static Create_func_rpad s_singleton; @@ -1787,7 +1787,7 @@ protected: class Create_func_rtrim : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_rtrim s_singleton; @@ -1800,7 +1800,7 @@ protected: class Create_func_sec_to_time : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_sec_to_time s_singleton; @@ -1813,7 +1813,7 @@ protected: class Create_func_sha : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_sha s_singleton; @@ -1826,7 +1826,7 @@ protected: class Create_func_sign : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_sign s_singleton; @@ -1839,7 +1839,7 @@ protected: class Create_func_sin : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_sin s_singleton; @@ -1852,7 +1852,7 @@ protected: class Create_func_sleep : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_sleep s_singleton; @@ -1865,7 +1865,7 @@ protected: class Create_func_soundex : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_soundex s_singleton; @@ -1878,7 +1878,7 @@ protected: class Create_func_space : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_space s_singleton; @@ -1891,7 +1891,7 @@ protected: class Create_func_sqrt : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_sqrt s_singleton; @@ -1905,7 +1905,7 @@ protected: class Create_func_srid : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_srid s_singleton; @@ -1920,7 +1920,7 @@ protected: class Create_func_startpoint : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_startpoint s_singleton; @@ -1934,7 +1934,7 @@ protected: class Create_func_str_to_date : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_str_to_date s_singleton; @@ -1947,7 +1947,7 @@ protected: class Create_func_strcmp : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_strcmp s_singleton; @@ -1960,7 +1960,7 @@ protected: class Create_func_substr_index : public Create_func_arg3 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2, Item *arg3); + virtual Item *create(THD *thd, Item *arg1, Item *arg2, Item *arg3); static Create_func_substr_index s_singleton; @@ -1973,7 +1973,7 @@ protected: class Create_func_subtime : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_subtime s_singleton; @@ -1986,7 +1986,7 @@ protected: class Create_func_tan : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_tan s_singleton; @@ -1999,7 +1999,7 @@ protected: class Create_func_time_format : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_time_format s_singleton; @@ -2012,7 +2012,7 @@ protected: class Create_func_time_to_sec : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_time_to_sec s_singleton; @@ -2025,7 +2025,7 @@ protected: class Create_func_timediff : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_timediff s_singleton; @@ -2038,7 +2038,7 @@ protected: class Create_func_to_days : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_to_days s_singleton; @@ -2052,7 +2052,7 @@ protected: class Create_func_touches : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_touches s_singleton; @@ -2066,7 +2066,7 @@ protected: class Create_func_ucase : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_ucase s_singleton; @@ -2079,7 +2079,7 @@ protected: class Create_func_uncompress : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_uncompress s_singleton; @@ -2092,7 +2092,7 @@ protected: class Create_func_uncompressed_length : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_uncompressed_length s_singleton; @@ -2105,7 +2105,7 @@ protected: class Create_func_unhex : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_unhex s_singleton; @@ -2118,7 +2118,7 @@ protected: class Create_func_unix_timestamp : public Create_native_func { public: - virtual Item* create_native(THD *thd, LEX_STRING name, List *item_list); + virtual Item *create_native(THD *thd, LEX_STRING name, List *item_list); static Create_func_unix_timestamp s_singleton; @@ -2131,7 +2131,7 @@ protected: class Create_func_uuid : public Create_func_arg0 { public: - virtual Item* create(THD *thd); + virtual Item *create(THD *thd); static Create_func_uuid s_singleton; @@ -2157,7 +2157,7 @@ protected: class Create_func_version : public Create_func_arg0 { public: - virtual Item* create(THD *thd); + virtual Item *create(THD *thd); static Create_func_version s_singleton; @@ -2170,7 +2170,7 @@ protected: class Create_func_weekday : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_weekday s_singleton; @@ -2183,7 +2183,7 @@ protected: class Create_func_weekofyear : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_weekofyear s_singleton; @@ -2197,7 +2197,7 @@ protected: class Create_func_within : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_within s_singleton; @@ -2212,7 +2212,7 @@ protected: class Create_func_x : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_x s_singleton; @@ -2226,7 +2226,7 @@ protected: class Create_func_xml_extractvalue : public Create_func_arg2 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2); + virtual Item *create(THD *thd, Item *arg1, Item *arg2); static Create_func_xml_extractvalue s_singleton; @@ -2239,7 +2239,7 @@ protected: class Create_func_xml_update : public Create_func_arg3 { public: - virtual Item* create(THD *thd, Item *arg1, Item *arg2, Item *arg3); + virtual Item *create(THD *thd, Item *arg1, Item *arg2, Item *arg3); static Create_func_xml_update s_singleton; @@ -2253,7 +2253,7 @@ protected: class Create_func_y : public Create_func_arg1 { public: - virtual Item* create(THD *thd, Item *arg1); + virtual Item *create(THD *thd, Item *arg1); static Create_func_y s_singleton; @@ -2267,7 +2267,7 @@ protected: class Create_func_year_week : public Create_native_func { public: - virtual Item* create_native(THD *thd, LEX_STRING name, List *item_list); + virtual Item *create_native(THD *thd, LEX_STRING name, List *item_list); static Create_func_year_week s_singleton; diff --git a/sql/item_create.h b/sql/item_create.h index 7ace4032515..a3ba6bd26a6 100644 --- a/sql/item_create.h +++ b/sql/item_create.h @@ -53,7 +53,7 @@ public: @param item_list The list of arguments to the function, can be NULL @return An item representing the parsed function call, or NULL */ - virtual Item* create(THD *thd, LEX_STRING name, List *item_list) = 0; + virtual Item *create(THD *thd, LEX_STRING name, List *item_list) = 0; protected: /** Constructor */ @@ -80,7 +80,7 @@ public: @param item_list The list of arguments to the function, can be NULL @return An item representing the parsed function call */ - virtual Item* create(THD *thd, LEX_STRING name, List *item_list); + virtual Item *create(THD *thd, LEX_STRING name, List *item_list); /** The builder create method, for qualified functions. @@ -127,7 +127,7 @@ extern Create_qfunc * find_qualified_function_builder(THD *thd); class Create_udf_func : public Create_func { public: - virtual Item* create(THD *thd, LEX_STRING name, List *item_list); + virtual Item *create(THD *thd, LEX_STRING name, List *item_list); /** The builder create method, for User Defined Functions. @@ -136,7 +136,7 @@ public: @param item_list The list of arguments to the function, can be NULL @return An item representing the parsed function call */ - Item* create(THD *thd, udf_func *fct, List *item_list); + Item *create(THD *thd, udf_func *fct, List *item_list); /** Singleton. */ static Create_udf_func s_singleton; diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc index 1d042860d73..6d4207e89ec 100644 --- a/sql/item_subselect.cc +++ b/sql/item_subselect.cc @@ -624,7 +624,7 @@ void Item_exists_subselect::print(String *str) } -bool Item_in_subselect::test_limit(SELECT_LEX_UNIT *unit_arg) +bool Item_in_subselect::test_limit(st_select_lex_unit *unit_arg) { if (unit_arg->fake_select_lex && unit_arg->fake_select_lex->test_limit()) diff --git a/sql/lock.cc b/sql/lock.cc index 20fb7d73c1c..8b98c2303a8 100644 --- a/sql/lock.cc +++ b/sql/lock.cc @@ -472,6 +472,9 @@ void mysql_unlock_read_tables(THD *thd, MYSQL_LOCK *sql_lock) unlock_external() we call handler::external_lock(F_UNLCK) only if table->current_lock is not F_UNLCK. + @param thd thread context + @param locked list of locked tables + @param table the table to unlock @param always_unlock specify explicitly if the legacy side effect is desired. */ @@ -1174,8 +1177,9 @@ bool lock_table_names_exclusively(THD *thd, TABLE_LIST *table_list) /** @brief Test is 'table' is protected by an exclusive name lock. - @param[in] thd The current thread handler - @param[in] table Table container containing the single table to be tested + @param[in] thd The current thread handler + @param[in] table_list Table container containing the single table to be + tested @note Needs to be protected by LOCK_open mutex. @@ -1201,8 +1205,9 @@ is_table_name_exclusively_locked_by_this_thread(THD *thd, /** @brief Test is 'table key' is protected by an exclusive name lock. - @param[in] thd The current thread handler. - @param[in] table Table container containing the single table to be tested. + @param[in] thd The current thread handler. + @param[in] key + @param[in] key_length @note Needs to be protected by LOCK_open mutex diff --git a/sql/sp.cc b/sql/sp.cc index 372aa9c6780..7b69842669f 100644 --- a/sql/sp.cc +++ b/sql/sp.cc @@ -84,7 +84,7 @@ class Stored_routine_creation_ctx : public Stored_program_creation_ctx, { public: static Stored_routine_creation_ctx * - load_from_db(THD *thd, const class sp_name *name, TABLE *proc_tbl); + load_from_db(THD *thd, const sp_name *name, TABLE *proc_tbl); public: virtual Stored_program_creation_ctx *clone(MEM_ROOT *mem_root) diff --git a/sql/sp_head.h b/sql/sp_head.h index f6764fbc90e..41cf8167376 100644 --- a/sql/sp_head.h +++ b/sql/sp_head.h @@ -186,7 +186,7 @@ public: LEX_STRING m_qname; // db.name /** Key representing routine in the set of stored routines used by statement. - [routine_type]db.name\0 + [routine_type]db.name @sa sp_name::m_sroutines_key */ LEX_STRING m_sroutines_key; diff --git a/sql/sql_analyse.cc b/sql/sql_analyse.cc index 6b4aaa26236..490cc5e28c1 100644 --- a/sql/sql_analyse.cc +++ b/sql/sql_analyse.cc @@ -668,7 +668,7 @@ void field_ulonglong::add() } // field_ulonglong::add -int analyse::send_row(List &field_list __attribute__((unused))) +int analyse::send_row(List & /* field_list */) { field_info **f = f_info; diff --git a/sql/sql_analyse.h b/sql/sql_analyse.h index ae5d88bf93e..827b6f4b217 100644 --- a/sql/sql_analyse.h +++ b/sql/sql_analyse.h @@ -348,7 +348,7 @@ public: } virtual void add() {} virtual bool change_columns(List &fields); - virtual int send_row(List &fields); + virtual int send_row(List &field_list); virtual void end_group(void) {} virtual bool end_of_records(void); friend Procedure *proc_analyse_init(THD *thd, ORDER *param, diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 24c6979c0f6..cdec96a8526 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -2148,9 +2148,9 @@ bool lock_table_name_if_not_cached(THD *thd, const char *db, @brief Check that table exists in table definition cache, on disk or in some storage engine. - @param thd Thread context - @param table Table list element - @param exists[out] Out parameter which is set to TRUE if table + @param thd Thread context + @param table Table list element + @param[out] exists Out parameter which is set to TRUE if table exists and to FALSE otherwise. @note This function assumes that caller owns LOCK_open mutex. diff --git a/sql/sql_db.cc b/sql/sql_db.cc index 575db5b80f7..23e18f85a3c 100644 --- a/sql/sql_db.cc +++ b/sql/sql_db.cc @@ -1350,7 +1350,7 @@ static void mysql_change_db_impl(THD *thd, @brief Change the current database. @param thd thread handle - @param name database name + @param new_db_name database name @param force_switch if this flag is set (TRUE), mysql_change_db() will switch to NULL db if the specified database is not available anymore. Corresponding warning will be diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index c83c7a1c894..8d13e3c7554 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -173,7 +173,7 @@ void Lex_input_stream::body_utf8_start(THD *thd, const char *begin_ptr) } /** - The operation appends unprocessed part of pre-processed buffer till + @brief The operation appends unprocessed part of pre-processed buffer till the given pointer (ptr) and sets m_cpp_utf8_processed_ptr to end_ptr. The idea is that some tokens in the pre-processed buffer (like character @@ -1400,6 +1400,19 @@ int MYSQLlex(void *arg, void *yythd) } +/** + Construct a copy of this object to be used for mysql_alter_table + and mysql_create_table. + + Historically, these two functions modify their Alter_info + arguments. This behaviour breaks re-execution of prepared + statements and stored procedures and is compensated by always + supplying a copy of Alter_info to these functions. + + @return You need to use check the error in THD for out + of memory condition after calling this function. +*/ + Alter_info::Alter_info(const Alter_info &rhs, MEM_ROOT *mem_root) :drop_list(rhs.drop_list, mem_root), alter_list(rhs.alter_list, mem_root), diff --git a/sql/sql_lex.h b/sql/sql_lex.h index 11273bba314..94feddf6e77 100644 --- a/sql/sql_lex.h +++ b/sql/sql_lex.h @@ -859,8 +859,8 @@ public: uint no_parts; enum_alter_table_change_level change_level; Create_field *datetime_field; - bool error_if_not_empty; - + bool error_if_not_empty; + Alter_info() : flags(0), @@ -887,16 +887,6 @@ public: datetime_field= 0; error_if_not_empty= FALSE; } - /** - Construct a copy of this object to be used for mysql_alter_table - and mysql_create_table. Historically, these two functions modify - their Alter_info arguments. This behaviour breaks re-execution of - prepared statements and stored procedures and is compensated by - always supplying a copy of Alter_info to these functions. - - @return You need to use check the error in THD for out - of memory condition after calling this function. - */ Alter_info(const Alter_info &rhs, MEM_ROOT *mem_root); private: Alter_info &operator=(const Alter_info &rhs); // not implemented @@ -1102,8 +1092,9 @@ enum enum_comment_state /** - This class represents the character input stream consumed during + @brief This class represents the character input stream consumed during lexical analysis. + In addition to consuming the input stream, this class performs some comment pre processing, by filtering out out of bound special text from the query input stream. @@ -1113,6 +1104,7 @@ enum enum_comment_state is the pre-processed buffer that contains only the query text that should be seen once out-of-bound data is removed. */ + class Lex_input_stream { public: @@ -1121,6 +1113,7 @@ public: /** Set the echo mode. + When echo is true, characters parsed from the raw input stream are preserved. When false, characters parsed are silently ignored. @param echo the echo mode. diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index d38c9bd8643..cef551b812b 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -5370,11 +5370,12 @@ void mysql_init_multi_delete(LEX *lex) /** Parse a query. - @param thd Current thread - @param inBuf Begining of the query text - @param length Length of the query text - @param [out] semicolon For multi queries, position of the character of - the next query in the query text. + + @param thd Current thread + @param inBuf Begining of the query text + @param length Length of the query text + @param[out] found_semicolon For multi queries, position of the character of + the next query in the query text. */ void mysql_parse(THD *thd, const char *inBuf, uint length, diff --git a/sql/sql_plugin.cc b/sql/sql_plugin.cc index 0d088063462..56aef9f9b95 100644 --- a/sql/sql_plugin.cc +++ b/sql/sql_plugin.cc @@ -2444,7 +2444,7 @@ void plugin_thdvar_cleanup(THD *thd) /** @brief Free values of thread variables of a plugin. - @detail This must be called before a plugin is deleted. Otherwise its + This must be called before a plugin is deleted. Otherwise its variables are no longer accessible and the value space is lost. Note that only string values with PLUGIN_VAR_MEMALLOC are allocated and must be freed. diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index a97bd908468..6b60f89b8e3 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -112,7 +112,6 @@ public: /****************************************************************************/ /** - @class Prepared_statement @brief Prepared_statement: a statement that can contain placeholders */ diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 5a1619aa5cf..9df652a679e 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -2459,8 +2459,8 @@ static COND * make_cond_for_info_schema(COND *cond, TABLE_LIST *table) @param[in] thd thread handler @param[in] cond WHERE condition - @param[in] table I_S table - @param[in, out] lookup_field_vals Struct which holds lookup values + @param[in] tables I_S table + @param[in, out] lookup_field_values Struct which holds lookup values @return void */ diff --git a/sql/sql_trigger.cc b/sql/sql_trigger.cc index fa0154dc39e..ce26b025430 100644 --- a/sql/sql_trigger.cc +++ b/sql/sql_trigger.cc @@ -1882,7 +1882,7 @@ end: @param thd @param event - @param time_type, + @param time_type @param old_row_is_record1 @return Error status. @@ -2074,9 +2074,9 @@ process_unknown_string(char *&unknown_key, uchar* base, MEM_ROOT *mem_root, /** Contruct path to TRN-file. - @param thd[in] Thread context. - @param trg_name[in] Trigger name. - @param trn_path[out] Variable to store constructed path + @param[in] thd Thread context. + @param[in] trg_name Trigger name. + @param[out] trn_path Variable to store constructed path */ void build_trn_path(THD *thd, const sp_name *trg_name, LEX_STRING *trn_path) @@ -2109,10 +2109,10 @@ bool check_trn_exists(const LEX_STRING *trn_path) /** Retrieve table name for given trigger. - @param thd[in] Thread context. - @param trg_name[in] Trigger name. - @param trn_path[in] Path to the corresponding TRN-file. - @param tbl_name[out] Variable to store retrieved table name. + @param[in] thd Thread context. + @param[in] trg_name Trigger name. + @param[in] trn_path Path to the corresponding TRN-file. + @param[out] tbl_name Variable to store retrieved table name. @return Error status. @retval FALSE on success. diff --git a/sql/sql_update.cc b/sql/sql_update.cc index cb3f2fece89..d4df805d006 100644 --- a/sql/sql_update.cc +++ b/sql/sql_update.cc @@ -86,10 +86,10 @@ static bool check_fields(THD *thd, List &items) /** @brief Re-read record if more columns are needed for error message. - @detail If we got a duplicate key error, we want to write an error - message containing the value of the duplicate key. If we do not have - all fields of the key value in record[0], we need to re-read the - record with a proper read_set. + If we got a duplicate key error, we want to write an error + message containing the value of the duplicate key. If we do not have + all fields of the key value in record[0], we need to re-read the + record with a proper read_set. @param[in] error error number @param[in] table table diff --git a/sql/table.h b/sql/table.h index ffe7350f250..5ef2467341a 100644 --- a/sql/table.h +++ b/sql/table.h @@ -157,7 +157,7 @@ enum enum_table_category - FLUSH TABLES WITH READ LOCK - SET GLOBAL READ_ONLY = ON do not apply to this table. - Note that LOCK TABLE FOR READ/WRITE + Note that LOCK TABLE t FOR READ/WRITE can be used on temporary tables. Temporary tables are not part of the table cache. */ @@ -166,7 +166,7 @@ enum enum_table_category /** User table. These tables do honor: - - LOCK TABLE FOR READ/WRITE + - LOCK TABLE t FOR READ/WRITE - FLUSH TABLES WITH READ LOCK - SET GLOBAL READ_ONLY = ON User tables are cached in the table cache. @@ -176,7 +176,7 @@ enum enum_table_category /** System table, maintained by the server. These tables do honor: - - LOCK TABLE FOR READ/WRITE + - LOCK TABLE t FOR READ/WRITE - FLUSH TABLES WITH READ LOCK - SET GLOBAL READ_ONLY = ON Typically, writes to system tables are performed by @@ -190,7 +190,7 @@ enum enum_table_category These tables are an interface provided by the system to inspect the system metadata. These tables do *not* honor: - - LOCK TABLE FOR READ/WRITE + - LOCK TABLE t FOR READ/WRITE - FLUSH TABLES WITH READ LOCK - SET GLOBAL READ_ONLY = ON as there is no point in locking explicitely @@ -212,7 +212,7 @@ enum enum_table_category These tables are an interface provided by the system to inspect the system performance data. These tables do *not* honor: - - LOCK TABLE FOR READ/WRITE + - LOCK TABLE t FOR READ/WRITE - FLUSH TABLES WITH READ LOCK - SET GLOBAL READ_ONLY = ON as there is no point in locking explicitely From bbf2211bdcd43581b9ddf54f1bfc731384e289c7 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 15 Aug 2007 18:21:58 +0400 Subject: [PATCH 070/194] mysql_client_test.c: Post fix for the bug#29948. tests/mysql_client_test.c: Post fix for the bug#29948. --- tests/mysql_client_test.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/mysql_client_test.c b/tests/mysql_client_test.c index dd6b0b5585f..c335b0128f7 100644 --- a/tests/mysql_client_test.c +++ b/tests/mysql_client_test.c @@ -15746,7 +15746,7 @@ static void test_bug29948() char kill_buf[20]; const char *query; int buf; - unsigned long length; + unsigned long length, cursor_type; dbc = mysql_init(NULL); DIE_UNLESS(dbc); @@ -15779,8 +15779,8 @@ static void test_bug29948() stmt= mysql_stmt_init(dbc); check_stmt(stmt); - buf= CURSOR_TYPE_READ_ONLY; - res= mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, (void *)&buf); + cursor_type= CURSOR_TYPE_READ_ONLY; + res= mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, (void *)&cursor_type); myquery(res); query= "SELECT * from t1 where a=?"; From a87a8764c3fee484cc6866dc215e35eb3fdd2c26 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 15 Aug 2007 18:41:18 +0400 Subject: [PATCH 071/194] fixed diff --- mysql-test/suite/rpl/include/rpl_mixed_ddl.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysql-test/suite/rpl/include/rpl_mixed_ddl.inc b/mysql-test/suite/rpl/include/rpl_mixed_ddl.inc index 0b13116300e..6a00dcc6e50 100644 --- a/mysql-test/suite/rpl/include/rpl_mixed_ddl.inc +++ b/mysql-test/suite/rpl/include/rpl_mixed_ddl.inc @@ -83,4 +83,4 @@ sync_slave_with_master; # will be created. You will need to go to the mysql-test dir and diff # the files your self to see what is not matching ---exec diff $MYSQLTEST_VARDIR/tmp/rpl_switch_stm_row_mixed_master.sql $MYSQLTEST_VARDIR/tmp/rpl_switch_stm_row_mixed_slave.sql; +--exec diff $MYSQLTEST_VARDIR/tmp/rpl_switch_stm_row_mixed_master.sql $MYSQLTEST_VARDIR/tmp/rpl_switch_stm_row_mixed_slave.sql From 7691bbbfe31750df01aab8f8643e6b9a2b76a3aa Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 15 Aug 2007 19:08:44 +0400 Subject: [PATCH 072/194] Provide initial module structure to Doxygen. sql/event_data_objects.cc: Add module comments. sql/event_data_objects.h: Add module comments. sql/event_db_repository.cc: Add module comments. sql/event_db_repository.h: Add module comments. sql/event_queue.cc: Add module comments. sql/event_queue.h: Add module comments. sql/event_scheduler.cc: Add module comments. sql/event_scheduler.h: Add module comments. sql/events.cc: Add module comments. sql/events.h: Add module comments. sql/lock.cc: Add module comments. sql/sp_head.h: Add module comments. sql/sql_base.cc: Add module comments. sql/sql_lex.h: Add module comments. sql/sql_parse.cc: Add module comments. sql/sql_select.cc: Add module comments. sql/sql_yacc.yy: Add module comments. --- sql/event_data_objects.cc | 8 ++++++++ sql/event_data_objects.h | 9 +++++++++ sql/event_db_repository.cc | 9 +++++++++ sql/event_db_repository.h | 13 +++++++++++-- sql/event_queue.cc | 8 ++++++++ sql/event_queue.h | 17 +++++++++++++++++ sql/event_scheduler.cc | 9 +++++++++ sql/event_scheduler.h | 18 +++++++++++++++--- sql/events.cc | 9 +++++++++ sql/events.h | 9 ++++++--- sql/lock.cc | 9 ++++++++- sql/sp_head.h | 9 +++++++++ sql/sql_base.cc | 7 +++++++ sql/sql_lex.h | 7 +++++++ sql/sql_parse.cc | 9 +++++++++ sql/sql_select.cc | 8 ++++++++ sql/sql_yacc.yy | 8 ++++++++ 17 files changed, 157 insertions(+), 9 deletions(-) diff --git a/sql/event_data_objects.cc b/sql/event_data_objects.cc index 2ab77ad6b11..787b04c12c6 100644 --- a/sql/event_data_objects.cc +++ b/sql/event_data_objects.cc @@ -20,6 +20,10 @@ #include "event_db_repository.h" #include "sp_head.h" +/** + @addtogroup Event_Scheduler + @{ +*/ #define EVEX_MAX_INTERVAL_VALUE 1000000000L @@ -2082,3 +2086,7 @@ event_basic_identifier_equal(LEX_STRING db, LEX_STRING name, Event_basic *b) return !sortcmp_lex_string(name, b->name, system_charset_info) && !sortcmp_lex_string(db, b->dbname, system_charset_info); } + +/** + @} (End of group Event_Scheduler) +*/ diff --git a/sql/event_data_objects.h b/sql/event_data_objects.h index a8e7d1720ca..7a49d1597d6 100644 --- a/sql/event_data_objects.h +++ b/sql/event_data_objects.h @@ -15,6 +15,12 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +/** + @addtogroup Event_Scheduler + @{ + + @file event_data_objects.h +*/ #define EVEX_GET_FIELD_FAILED -2 #define EVEX_BAD_PARAMS -5 @@ -280,5 +286,8 @@ event_basic_db_equal(LEX_STRING db, Event_basic *et); bool event_basic_identifier_equal(LEX_STRING db, LEX_STRING name, Event_basic *b); +/** + @} (End of group Event_Scheduler) +*/ #endif /* _EVENT_DATA_OBJECTS_H_ */ diff --git a/sql/event_db_repository.cc b/sql/event_db_repository.cc index 96c01ad9a0e..37afbabad43 100644 --- a/sql/event_db_repository.cc +++ b/sql/event_db_repository.cc @@ -20,6 +20,11 @@ #include "events.h" #include "sql_show.h" +/** + @addtogroup Event_Scheduler + @{ +*/ + static const TABLE_FIELD_W_TYPE event_table_fields[ET_FIELD_COUNT] = { @@ -1112,3 +1117,7 @@ Event_db_repository::check_system_tables(THD *thd) DBUG_RETURN(test(ret)); } + +/** + @} (End of group Event_Scheduler) +*/ diff --git a/sql/event_db_repository.h b/sql/event_db_repository.h index b60d2ea7afc..ef778407d1e 100644 --- a/sql/event_db_repository.h +++ b/sql/event_db_repository.h @@ -15,8 +15,14 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -/* - @file +/** + @addtogroup Event_Scheduler + @{ + + @file event_db_repository.h + + Data Dictionary related operations of Event Scheduler. + This is a private header file of Events module. Please do not include it directly. All public declarations of Events module should be stored in events.h and event_data_objects.h. @@ -119,4 +125,7 @@ private: void operator=(Event_db_repository &); }; +/** + @} (End of group Event_Scheduler) +*/ #endif /* _EVENT_DB_REPOSITORY_H_ */ diff --git a/sql/event_queue.cc b/sql/event_queue.cc index 95f207844fc..71ae5c7652f 100644 --- a/sql/event_queue.cc +++ b/sql/event_queue.cc @@ -17,6 +17,10 @@ #include "event_queue.h" #include "event_data_objects.h" +/** + @addtogroup Event_Scheduler + @{ +*/ #define EVENT_QUEUE_INITIAL_SIZE 30 #define EVENT_QUEUE_EXTENT 30 @@ -749,3 +753,7 @@ Event_queue::dump_internal_status() DBUG_VOID_RETURN; } + +/** + @} (End of group Event_Scheduler) +*/ diff --git a/sql/event_queue.h b/sql/event_queue.h index ac4a4f2bfd7..2870ecb4d0b 100644 --- a/sql/event_queue.h +++ b/sql/event_queue.h @@ -15,12 +15,26 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +/** + + @addtogroup Event_Scheduler + @{ + + @file event_queue.h + + Queue of events awaiting execution. +*/ + class Event_basic; class Event_queue_element; class Event_queue_element_for_exec; class THD; +/** + Queue of active events awaiting execution. +*/ + class Event_queue { public: @@ -105,5 +119,8 @@ private: bool mutex_queue_data_attempting_lock; bool waiting_on_cond; }; +/** + @} (End of group Event_Scheduler) +*/ #endif /* _EVENT_QUEUE_H_ */ diff --git a/sql/event_scheduler.cc b/sql/event_scheduler.cc index 3092521fd4c..b03b51f1134 100644 --- a/sql/event_scheduler.cc +++ b/sql/event_scheduler.cc @@ -20,6 +20,11 @@ #include "event_queue.h" #include "event_db_repository.h" +/** + @addtogroup Event_Scheduler + @{ +*/ + #ifdef __GNUC__ #if __GNUC__ >= 2 #define SCHED_FUNC __FUNCTION__ @@ -790,3 +795,7 @@ Event_scheduler::dump_internal_status() DBUG_VOID_RETURN; } + +/** + @} (End of group Event_Scheduler) +*/ diff --git a/sql/event_scheduler.h b/sql/event_scheduler.h index eba66c68d42..0be93a65d33 100644 --- a/sql/event_scheduler.h +++ b/sql/event_scheduler.h @@ -15,11 +15,19 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +/** + @addtogroup Event_Scheduler + @{ +*/ /** @file - This file is internal to Events module. Please do not include it directly. - All public declarations of Events module are in events.h and - event_data_objects.h. + + Declarations of the scheduler thread class + and related functionality. + + This file is internal to Event_Scheduler module. Please do not + include it directly. All public declarations of Event_Scheduler + module are in events.h and event_data_objects.h. */ @@ -140,4 +148,8 @@ private: void operator=(Event_scheduler &); }; +/** + @} (End of group Event_Scheduler) +*/ + #endif /* _EVENT_SCHEDULER_H_ */ diff --git a/sql/events.cc b/sql/events.cc index bdb9512647f..5246bccc388 100644 --- a/sql/events.cc +++ b/sql/events.cc @@ -21,6 +21,11 @@ #include "event_scheduler.h" #include "sp_head.h" // for Stored_program_creation_ctx +/** + @addtogroup Event_Scheduler + @{ +*/ + /* TODO list : - CREATE EVENT should not go into binary log! Does it now? The SQL statements @@ -1186,3 +1191,7 @@ end: DBUG_RETURN(ret); } + +/** + @} (End of group Event_Scheduler) +*/ diff --git a/sql/events.h b/sql/events.h index 078ab63041b..2bc87517748 100644 --- a/sql/events.h +++ b/sql/events.h @@ -16,10 +16,13 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /** - @file - A public interface of Events Scheduler module. - @defgroup Event Scheduler + @defgroup Event_Scheduler Event Scheduler + @ingroup Runtime_Environment @{ + + @file events.h + + A public interface of Events_Scheduler module. */ class Event_parse_data; diff --git a/sql/lock.cc b/sql/lock.cc index 8b98c2303a8..f859f028504 100644 --- a/sql/lock.cc +++ b/sql/lock.cc @@ -74,6 +74,11 @@ TODO: #include #include +/** + @defgroup Locking Locking + @{ +*/ + extern HASH open_cache; /* flags for get_lock_data */ @@ -1590,4 +1595,6 @@ void broadcast_refresh(void) VOID(pthread_cond_broadcast(&COND_global_read_lock)); } - +/** + @} (end of group Locking) +*/ diff --git a/sql/sp_head.h b/sql/sp_head.h index 41cf8167376..3a8b41acd4c 100644 --- a/sql/sp_head.h +++ b/sql/sp_head.h @@ -23,6 +23,11 @@ #include +/** + @defgroup Stored_Routines Stored Routines + @ingroup Runtime_Environment + @{ +*/ // Values for the type enum. This reflects the order of the enum declaration // in the CREATE TABLE command. #define TYPE_ENUM_FUNCTION 1 @@ -1322,4 +1327,8 @@ sp_prepare_func_item(THD* thd, Item **it_addr); bool sp_eval_expr(THD *thd, Field *result_field, Item **expr_item_ptr); +/** + @} (end of group Stored_Routines) +*/ + #endif /* _SP_HEAD_H_ */ diff --git a/sql/sql_base.cc b/sql/sql_base.cc index cdec96a8526..e15bc1c3137 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -82,6 +82,10 @@ bool Prelock_error_handler::safely_trapped_errors() return ((m_handled_errors > 0) && (m_unhandled_errors == 0)); } +/** + @defgroup Data_Dictionary Data Dictionary + @{ +*/ TABLE *unused_tables; /* Used by mysql_test */ HASH open_cache; /* Used by mysql_test */ @@ -7802,3 +7806,6 @@ void close_performance_schema_table(THD *thd, Open_tables_state *backup) thd->restore_backup_open_tables_state(backup); } +/** + @} (end of group Data_Dictionary) +*/ diff --git a/sql/sql_lex.h b/sql/sql_lex.h index 94feddf6e77..22c7eb2ffb1 100644 --- a/sql/sql_lex.h +++ b/sql/sql_lex.h @@ -13,6 +13,9 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +/** + @defgroup Semantic_Analysis Semantic Analysis +*/ /* YACC and LEX Definitions */ @@ -1823,4 +1826,8 @@ extern void trim_whitespace(CHARSET_INFO *cs, LEX_STRING *str); extern bool is_lex_native_function(const LEX_STRING *name); +/** + @} (End of group Semantic_Analysis) +*/ + #endif /* MYSQL_SERVER */ diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index cef551b812b..3e6218c5aa8 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -28,6 +28,11 @@ #include "events.h" #include "sql_trigger.h" +/** + @defgroup Runtime_Environment Runtime Environment + @{ +*/ + /* Used in error handling only */ #define SP_TYPE_STRING(LP) \ ((LP)->sphead->m_type == TYPE_ENUM_FUNCTION ? "FUNCTION" : "PROCEDURE") @@ -7242,3 +7247,7 @@ bool parse_sql(THD *thd, return err_status; } + +/** + @} (end of group Runtime_Environment) +*/ diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 0da3b4af547..14e5beada8b 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -13,6 +13,10 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +/** + @defgroup Query_Optimizer Query Optimizer + @{ +*/ /* mysql_select and join optimization */ @@ -16037,3 +16041,7 @@ bool JOIN::change_result(select_result *res) } DBUG_RETURN(FALSE); } + +/** + @} (end of group Query_Optimizer) +*/ diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 3bbb3abaa54..8f66e41b338 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -15,6 +15,11 @@ /* sql_yacc.yy */ +/** + @defgroup Parser Parser + @{ +*/ + %{ /* thd is passed as an argument to yyparse(), and subsequently to yylex(). ** The type will be void*, so it must be cast to (THD*) when used. @@ -12255,3 +12260,6 @@ uninstall: } ; +/** + @} (end of group Parser) +*/ From 9c1ffac09a120989b438603fd89d110b95691bed Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 15 Aug 2007 12:13:34 -0300 Subject: [PATCH 073/194] Bug#25856 (HANDLER table OPEN in one connection lock DROP TABLE in another one) mysql_ha_open calls mysql_ha_close on the error path (unsupported) to close the (opened) table before inserting it into the tables hash list handler_tables_hash) but mysql_ha_close only closes tables which are on the hash list, causing the table to be left open and locked. This change moves the table close logic into a separate function that is always called on the error path of mysql_ha_open or on a normal handler close (mysql_ha_close). mysql-test/r/handler.result: Bug#25856 test result mysql-test/t/handler.test: Bug#25856 test case sql/sql_handler.cc: Move the table close logic into a separate function that is always called on the error path of mysql_ha_open or on a normal handler close --- mysql-test/r/handler.result | 7 ++++ mysql-test/t/handler.test | 14 +++++++ sql/sql_handler.cc | 80 ++++++++++++++++++++++--------------- 3 files changed, 68 insertions(+), 33 deletions(-) diff --git a/mysql-test/r/handler.result b/mysql-test/r/handler.result index 85cf47b5806..5e123df9103 100644 --- a/mysql-test/r/handler.result +++ b/mysql-test/r/handler.result @@ -482,3 +482,10 @@ ERROR 42S02: Table 'test.t1' doesn't exist drop table if exists t1; Warnings: Note 1051 Unknown table 't1' +drop table if exists t1; +create table t1 (a int) ENGINE=MEMORY; +--> client 2 +handler t1 open; +ERROR HY000: Table storage engine for 't1' doesn't have this option +--> client 1 +drop table t1; diff --git a/mysql-test/t/handler.test b/mysql-test/t/handler.test index bf18b8da941..4edd5b5ec32 100644 --- a/mysql-test/t/handler.test +++ b/mysql-test/t/handler.test @@ -427,3 +427,17 @@ select * from t1; # Just to be sure and not confuse the next test case writer. drop table if exists t1; +# +# Bug#25856 - HANDLER table OPEN in one connection lock DROP TABLE in another one +# +--disable_warnings +drop table if exists t1; +--enable_warnings +create table t1 (a int) ENGINE=MEMORY; +--echo --> client 2 +connection con2; +--error 1031 +handler t1 open; +--echo --> client 1 +connection default; +drop table t1; diff --git a/sql/sql_handler.cc b/sql/sql_handler.cc index e1318aa2736..e00d9110378 100644 --- a/sql/sql_handler.cc +++ b/sql/sql_handler.cc @@ -119,6 +119,44 @@ static void mysql_ha_hash_free(TABLE_LIST *tables) my_free((char*) tables, MYF(0)); } +/** + * Close a HANDLER table. + * + * @param thd Thread identifier. + * @param A list of tables with the first entry to close. + * + * @note Though this function takes a list of tables, only the first list entry + * will be closed. + * @note Broadcasts refresh if it closed the table. + */ + +static void mysql_ha_close_table(THD *thd, TABLE_LIST *tables) +{ + TABLE **table_ptr; + + /* + Though we could take the table pointer from hash_tables->table, + we must follow the thd->handler_tables chain anyway, as we need the + address of the 'next' pointer referencing this table + for close_thread_table(). + */ + for (table_ptr= &(thd->handler_tables); + *table_ptr && (*table_ptr != tables->table); + table_ptr= &(*table_ptr)->next) + ; + + if (*table_ptr) + { + (*table_ptr)->file->ha_index_or_rnd_end(); + VOID(pthread_mutex_lock(&LOCK_open)); + if (close_thread_table(thd, table_ptr)) + { + /* Tell threads waiting for refresh that something has happened */ + broadcast_refresh(); + } + VOID(pthread_mutex_unlock(&LOCK_open)); + } +} /* Open a HANDLER table. @@ -145,7 +183,7 @@ static void mysql_ha_hash_free(TABLE_LIST *tables) bool mysql_ha_open(THD *thd, TABLE_LIST *tables, bool reopen) { - TABLE_LIST *hash_tables; + TABLE_LIST *hash_tables = NULL; char *db, *name, *alias; uint dblen, namelen, aliaslen, counter; int error; @@ -197,7 +235,6 @@ bool mysql_ha_open(THD *thd, TABLE_LIST *tables, bool reopen) { if (! reopen) my_error(ER_ILLEGAL_HA, MYF(0), tables->alias); - mysql_ha_close(thd, tables); goto err; } @@ -225,11 +262,7 @@ bool mysql_ha_open(THD *thd, TABLE_LIST *tables, bool reopen) /* add to hash */ if (my_hash_insert(&thd->handler_tables_hash, (byte*) hash_tables)) - { - my_free((char*) hash_tables, MYF(0)); - mysql_ha_close(thd, tables); goto err; - } } if (! reopen) @@ -238,13 +271,17 @@ bool mysql_ha_open(THD *thd, TABLE_LIST *tables, bool reopen) DBUG_RETURN(FALSE); err: + if (hash_tables) + my_free((char*) hash_tables, MYF(0)); + if (tables->table) + mysql_ha_close_table(thd, tables); DBUG_PRINT("exit",("ERROR")); DBUG_RETURN(TRUE); } /* - Close a HANDLER table. + Close a HANDLER table by alias or table name SYNOPSIS mysql_ha_close() @@ -252,9 +289,8 @@ err: tables A list of tables with the first entry to close. DESCRIPTION - Though this function takes a list of tables, only the first list entry - will be closed. - Broadcasts refresh if it closed the table. + Closes the table that is associated (on the handler tables hash) with the + name (table->alias) of the specified table. RETURN FALSE ok @@ -264,7 +300,6 @@ err: bool mysql_ha_close(THD *thd, TABLE_LIST *tables) { TABLE_LIST *hash_tables; - TABLE **table_ptr; DBUG_ENTER("mysql_ha_close"); DBUG_PRINT("enter",("'%s'.'%s' as '%s'", tables->db, tables->table_name, tables->alias)); @@ -273,28 +308,7 @@ bool mysql_ha_close(THD *thd, TABLE_LIST *tables) (byte*) tables->alias, strlen(tables->alias) + 1))) { - /* - Though we could take the table pointer from hash_tables->table, - we must follow the thd->handler_tables chain anyway, as we need the - address of the 'next' pointer referencing this table - for close_thread_table(). - */ - for (table_ptr= &(thd->handler_tables); - *table_ptr && (*table_ptr != hash_tables->table); - table_ptr= &(*table_ptr)->next) - ; - - if (*table_ptr) - { - (*table_ptr)->file->ha_index_or_rnd_end(); - VOID(pthread_mutex_lock(&LOCK_open)); - if (close_thread_table(thd, table_ptr)) - { - /* Tell threads waiting for refresh that something has happened */ - broadcast_refresh(); - } - VOID(pthread_mutex_unlock(&LOCK_open)); - } + mysql_ha_close_table(thd, hash_tables); hash_delete(&thd->handler_tables_hash, (byte*) hash_tables); } else From 8f060c1d731ad267083ac0c70aaf1da629330800 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 15 Aug 2007 20:11:16 +0400 Subject: [PATCH 074/194] Add replication group (comments). --- sql/slave.h | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/sql/slave.h b/sql/slave.h index 731728bde4f..791f95ef7ae 100644 --- a/sql/slave.h +++ b/sql/slave.h @@ -16,6 +16,12 @@ #ifndef SLAVE_H #define SLAVE_H +/** + @defgroup Replication Replication + @{ + + @file +*/ #ifdef HAVE_REPLICATION #include "log.h" @@ -214,6 +220,8 @@ extern I_List threads; #define SLAVE_IO 1 #define SLAVE_SQL 2 +/** + @} (end of group Replication) +*/ + #endif - - From a8f8e5483e7925ce804c3900752f88fdf43cb3ee Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 15 Aug 2007 10:24:18 -0700 Subject: [PATCH 075/194] Fixed bug #30396. The bug caused memory corruption for some queries with top OR level in the WHERE condition if they contained equality predicates and other sargable predicates in disjunctive parts of the condition. The corruption happened because the upper bound of the memory allocated for KEY_FIELD and SARGABLE_PARAM internal structures containing info about potential lookup keys was calculated incorrectly in some cases. In particular it was calculated incorrectly when the WHERE condition was an OR formula with disjuncts being AND formulas including equalities and other sargable predicates. mysql-test/r/select.result: Added a test case for bug #30396. mysql-test/t/select.test: Added a test case for bug #30396. sql/item_cmpfunc.h: Removed max_members from the COND_EQUAL class as not useful anymore. sql/sql_base.cc: Added the max_equal_elems field to the st_select_lex structure. sql/sql_lex.cc: Added the max_equal_elems field to the st_select_lex structure. sql/sql_lex.h: Added the max_equal_elems field to the st_select_lex structure. The field contains the maximal number of elements in multiple equalities built for the query conditions. sql/sql_select.cc: Fixed bug #30396. The bug caused memory corruption for some queries with top OR level in the WHERE condition if they contained equality predicates and other sargable predicates in disjunctive parts of the condition. The corruption happened because the upper bound of the memory allocated for KEY_FIELD and SARGABLE_PARAM internal structures containing info about potential lookup keys was calculated incorrectly in some cases. In particular it was calculated incorrectly when the WHERE condition was an OR formula with disjuncts being AND formulas including equalities and other sargable predicates. The max_equal_elems field to the st_select_lex structure is used now to calculate the above mentioned upper bound. The field contains the maximal number of elements in multiple equalities built for the query conditions. --- mysql-test/r/select.result | 57 ++++++++++++++++++++++++++++++++++++ mysql-test/t/select.test | 60 ++++++++++++++++++++++++++++++++++++++ sql/item_cmpfunc.h | 1 - sql/sql_base.cc | 1 + sql/sql_lex.cc | 1 + sql/sql_lex.h | 3 +- sql/sql_select.cc | 38 ++++++++---------------- 7 files changed, 133 insertions(+), 28 deletions(-) diff --git a/mysql-test/r/select.result b/mysql-test/r/select.result index 5930c36029f..2cf1316bb47 100644 --- a/mysql-test/r/select.result +++ b/mysql-test/r/select.result @@ -4005,4 +4005,61 @@ id select_type table type possible_keys key key_len ref rows Extra EXPLAIN SELECT c1 FROM t1 WHERE (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT COUNT(c2))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) > 0; ERROR HY000: Too high level of nesting for select DROP TABLE t1; +CREATE TABLE t1 ( +c1 int(11) NOT NULL AUTO_INCREMENT, +c2 varchar(1000) DEFAULT NULL, +c3 bigint(20) DEFAULT NULL, +c4 bigint(20) DEFAULT NULL, +PRIMARY KEY (c1) +); +EXPLAIN EXTENDED +SELECT join_2.c1 +FROM +t1 AS join_0, +t1 AS join_1, +t1 AS join_2, +t1 AS join_3, +t1 AS join_4, +t1 AS join_5, +t1 AS join_6, +t1 AS join_7 +WHERE +join_0.c1=join_1.c1 AND +join_1.c1=join_2.c1 AND +join_2.c1=join_3.c1 AND +join_3.c1=join_4.c1 AND +join_4.c1=join_5.c1 AND +join_5.c1=join_6.c1 AND +join_6.c1=join_7.c1 +OR +join_0.c2 < '?' AND +join_1.c2 < '?' AND +join_2.c2 > '?' AND +join_2.c2 < '!' AND +join_3.c2 > '?' AND +join_4.c2 = '?' AND +join_5.c2 <> '?' AND +join_6.c2 <> '?' AND +join_7.c2 >= '?' AND +join_0.c1=join_1.c1 AND +join_1.c1=join_2.c1 AND +join_2.c1=join_3.c1 AND +join_3.c1=join_4.c1 AND +join_4.c1=join_5.c1 AND +join_5.c1=join_6.c1 AND +join_6.c1=join_7.c1 +GROUP BY +join_3.c1, +join_2.c1, +join_7.c1, +join_1.c1, +join_0.c1; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +Warnings: +Note 1003 select '0' AS `c1` from `test`.`t1` `join_0` join `test`.`t1` `join_1` join `test`.`t1` `join_2` join `test`.`t1` `join_3` join `test`.`t1` `join_4` join `test`.`t1` `join_5` join `test`.`t1` `join_6` join `test`.`t1` `join_7` where 0 group by '0','0','0','0','0' +SHOW WARNINGS; +Level Code Message +Note 1003 select '0' AS `c1` from `test`.`t1` `join_0` join `test`.`t1` `join_1` join `test`.`t1` `join_2` join `test`.`t1` `join_3` join `test`.`t1` `join_4` join `test`.`t1` `join_5` join `test`.`t1` `join_6` join `test`.`t1` `join_7` where 0 group by '0','0','0','0','0' +DROP TABLE t1; End of 5.0 tests diff --git a/mysql-test/t/select.test b/mysql-test/t/select.test index 8bfa12539fa..abf55745080 100644 --- a/mysql-test/t/select.test +++ b/mysql-test/t/select.test @@ -3400,4 +3400,64 @@ eval EXPLAIN SELECT c1 FROM t1 WHERE $q > 0; DROP TABLE t1; +# +# Bug #30396: crash for a join with equalities and sargable predicates +# in disjunctive parts of the WHERE condition +# + +CREATE TABLE t1 ( + c1 int(11) NOT NULL AUTO_INCREMENT, + c2 varchar(1000) DEFAULT NULL, + c3 bigint(20) DEFAULT NULL, + c4 bigint(20) DEFAULT NULL, + PRIMARY KEY (c1) +); + +EXPLAIN EXTENDED +SELECT join_2.c1 +FROM + t1 AS join_0, + t1 AS join_1, + t1 AS join_2, + t1 AS join_3, + t1 AS join_4, + t1 AS join_5, + t1 AS join_6, + t1 AS join_7 +WHERE + join_0.c1=join_1.c1 AND + join_1.c1=join_2.c1 AND + join_2.c1=join_3.c1 AND + join_3.c1=join_4.c1 AND + join_4.c1=join_5.c1 AND + join_5.c1=join_6.c1 AND + join_6.c1=join_7.c1 + OR + join_0.c2 < '?' AND + join_1.c2 < '?' AND + join_2.c2 > '?' AND + join_2.c2 < '!' AND + join_3.c2 > '?' AND + join_4.c2 = '?' AND + join_5.c2 <> '?' AND + join_6.c2 <> '?' AND + join_7.c2 >= '?' AND + join_0.c1=join_1.c1 AND + join_1.c1=join_2.c1 AND + join_2.c1=join_3.c1 AND + join_3.c1=join_4.c1 AND + join_4.c1=join_5.c1 AND + join_5.c1=join_6.c1 AND + join_6.c1=join_7.c1 +GROUP BY + join_3.c1, + join_2.c1, + join_7.c1, + join_1.c1, + join_0.c1; + +SHOW WARNINGS; + +DROP TABLE t1; + --echo End of 5.0 tests diff --git a/sql/item_cmpfunc.h b/sql/item_cmpfunc.h index 9afc0507817..7b6eaef08ec 100644 --- a/sql/item_cmpfunc.h +++ b/sql/item_cmpfunc.h @@ -1506,7 +1506,6 @@ public: the current and level */ COND_EQUAL() { - max_members= 0; upper_levels= 0; } }; diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 1c01248c283..e8562cdffbd 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -5611,6 +5611,7 @@ int setup_conds(THD *thd, TABLE_LIST *tables, TABLE_LIST *leaves, thd->set_query_id=1; select_lex->cond_count= 0; select_lex->between_count= 0; + select_lex->max_equal_elems= 0; for (table= tables; table; table= table->next_local) { diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index 7911da69862..d11c2b21635 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -1183,6 +1183,7 @@ void st_select_lex::init_query() */ parent_lex->push_context(&context); cond_count= between_count= with_wild= 0; + max_equal_elems= 0; conds_processed_with_permanent_arena= 0; ref_pointer_array= 0; select_n_where_fields= 0; diff --git a/sql/sql_lex.h b/sql/sql_lex.h index b9c6abd2b06..94015a9fe07 100644 --- a/sql/sql_lex.h +++ b/sql/sql_lex.h @@ -533,7 +533,8 @@ public: */ uint select_n_having_items; uint cond_count; /* number of arguments of and/or/xor in where/having/on */ - uint between_count; /* number of between predicates in where/having/on */ + uint between_count; /* number of between predicates in where/having/on */ + uint max_equal_elems; /* maximal number of elements in multiple equalities */ /* Number of fields used in select list or where clause of current select and all inner subselects. diff --git a/sql/sql_select.cc b/sql/sql_select.cc index ac8dc84f118..b7846a7433d 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -3524,10 +3524,7 @@ update_ref_and_keys(THD *thd, DYNAMIC_ARRAY *keyuse,JOIN_TAB *join_tab, uint and_level,i,found_eq_constant; KEY_FIELD *key_fields, *end, *field; uint sz; - uint m= 1; - - if (cond_equal && cond_equal->max_members) - m= cond_equal->max_members; + uint m= max(select_lex->max_equal_elems,1); /* We use the same piece of memory to store both KEY_FIELD @@ -3547,7 +3544,8 @@ update_ref_and_keys(THD *thd, DYNAMIC_ARRAY *keyuse,JOIN_TAB *join_tab, it is considered as sargable only for its first argument. Multiple equality can add elements that are filled after substitution of field arguments by equal fields. There - can be not more than cond_equal->max_members such substitutions. + can be not more than select_lex->max_equal_elems such + substitutions. */ sz= max(sizeof(KEY_FIELD),sizeof(SARGABLE_PARAM))* (((thd->lex->current_select->cond_count+1)*2 + @@ -7189,8 +7187,7 @@ static bool check_equality(THD *thd, Item *item, COND_EQUAL *cond_equal, just an argument of a comparison predicate. The function also determines the maximum number of members in equality lists of each Item_cond_and object assigning it to - cond_equal->max_members of this object and updating accordingly - the upper levels COND_EQUAL structures. + thd->lex->current_select->max_equal_elems. NOTES Multiple equality predicate =(f1,..fn) is equivalent to the conjuction of @@ -7235,7 +7232,6 @@ static COND *build_equal_items_for_cond(THD *thd, COND *cond, COND_EQUAL *inherited) { Item_equal *item_equal; - uint members; COND_EQUAL cond_equal; cond_equal.upper_levels= inherited; @@ -7273,19 +7269,8 @@ static COND *build_equal_items_for_cond(THD *thd, COND *cond, { item_equal->fix_length_and_dec(); item_equal->update_used_tables(); - members= item_equal->members(); - if (cond_equal.max_members < members) - cond_equal.max_members= members; - } - members= cond_equal.max_members; - if (inherited && inherited->max_members < members) - { - do - { - inherited->max_members= members; - inherited= inherited->upper_levels; - } - while (inherited); + set_if_bigger(thd->lex->current_select->max_equal_elems, + item_equal->members()); } ((Item_cond_and*)cond)->cond_equal= cond_equal; @@ -7340,10 +7325,12 @@ static COND *build_equal_items_for_cond(THD *thd, COND *cond, { item_equal->fix_length_and_dec(); item_equal->update_used_tables(); - return item_equal; } else - return eq_list.pop(); + item_equal= (Item_equal *) eq_list.pop(); + set_if_bigger(thd->lex->current_select->max_equal_elems, + item_equal->members()); + return item_equal; } else { @@ -7359,9 +7346,8 @@ static COND *build_equal_items_for_cond(THD *thd, COND *cond, { item_equal->fix_length_and_dec(); item_equal->update_used_tables(); - members= item_equal->members(); - if (cond_equal.max_members < members) - cond_equal.max_members= members; + set_if_bigger(thd->lex->current_select->max_equal_elems, + item_equal->members()); } and_cond->cond_equal= cond_equal; args->concat((List *)&cond_equal.current_level); From a79b35d377c32600f521d0469367e4899a71af99 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 15 Aug 2007 21:46:44 +0200 Subject: [PATCH 076/194] This changeset is result of WL#3982 Test information_schema.processlist and replaces the corresponding tests pushed to mysql-test-extra-5.1/mysql-test/qa-suite/info_schema mysql-test/suite/funcs_1/datadict/datadict_priv.inc: Auxiliary script mysql-test/suite/funcs_1/datadict/processlist_priv.inc: Test of privileges mysql-test/suite/funcs_1/datadict/processlist_val.inc: Test of values mysql-test/suite/funcs_1/r/a_processlist_priv_no_prot.result: Expected results mysql-test/suite/funcs_1/r/a_processlist_val_no_prot.result: Expected results mysql-test/suite/funcs_1/r/b_processlist_priv_ps.result: Expected results mysql-test/suite/funcs_1/r/b_processlist_val_ps.result: Expected results mysql-test/suite/funcs_1/t/a_processlist_priv_no_prot.test: Test of privileges - variant without ps/sp/cursor/view-protocol mysql-test/suite/funcs_1/t/a_processlist_val_no_prot.test: Test of values - variant without ps/sp/cursor/view-protocol mysql-test/suite/funcs_1/t/b_processlist_priv_ps.test: Test of privileges - variant with ps-protocol mysql-test/suite/funcs_1/t/b_processlist_val_ps.test: Test of values - variant with ps-protocol --- .../suite/funcs_1/datadict/datadict_priv.inc | 107 ++++ .../funcs_1/datadict/processlist_priv.inc | 432 ++++++++++++++++ .../funcs_1/datadict/processlist_val.inc | 333 +++++++++++++ .../r/a_processlist_priv_no_prot.result | 469 ++++++++++++++++++ .../r/a_processlist_val_no_prot.result | 174 +++++++ .../funcs_1/r/b_processlist_priv_ps.result | 469 ++++++++++++++++++ .../funcs_1/r/b_processlist_val_ps.result | 174 +++++++ .../funcs_1/t/a_processlist_priv_no_prot.test | 36 ++ .../funcs_1/t/a_processlist_val_no_prot.test | 31 ++ .../funcs_1/t/b_processlist_priv_ps.test | 35 ++ .../suite/funcs_1/t/b_processlist_val_ps.test | 30 ++ 11 files changed, 2290 insertions(+) create mode 100644 mysql-test/suite/funcs_1/datadict/datadict_priv.inc create mode 100644 mysql-test/suite/funcs_1/datadict/processlist_priv.inc create mode 100644 mysql-test/suite/funcs_1/datadict/processlist_val.inc create mode 100644 mysql-test/suite/funcs_1/r/a_processlist_priv_no_prot.result create mode 100644 mysql-test/suite/funcs_1/r/a_processlist_val_no_prot.result create mode 100644 mysql-test/suite/funcs_1/r/b_processlist_priv_ps.result create mode 100644 mysql-test/suite/funcs_1/r/b_processlist_val_ps.result create mode 100644 mysql-test/suite/funcs_1/t/a_processlist_priv_no_prot.test create mode 100644 mysql-test/suite/funcs_1/t/a_processlist_val_no_prot.test create mode 100644 mysql-test/suite/funcs_1/t/b_processlist_priv_ps.test create mode 100644 mysql-test/suite/funcs_1/t/b_processlist_val_ps.test diff --git a/mysql-test/suite/funcs_1/datadict/datadict_priv.inc b/mysql-test/suite/funcs_1/datadict/datadict_priv.inc new file mode 100644 index 00000000000..36143e1526e --- /dev/null +++ b/mysql-test/suite/funcs_1/datadict/datadict_priv.inc @@ -0,0 +1,107 @@ +############## suite/funcs_1/datadict/datadict_priv.inc ################ +# # +# DDL and DML operations on information_schema tables # +# # +# Creation: # +# 2007-08 hhunger Implement this test as part of # +# WL#3982 Test information_schema.processlist # +# # +# Last update: # +# 2007-08-14 mleich Some cleanup # +# # +######################################################################## + +# These variables have to be set before sourcing this file. +# +# information_schema table to be tested +# let $table= processlist; +# +# columns of the information_schema table e.g. to use in a select. +# let $columns= ID, USER, HOST, DB, COMMAND, TIME, STATE, INFO; +# +# Where clause for an update. +# let $update_where= WHERE id=1 ; +# +# Column to be used in the SET of an update. +# let $set_column= user='any_user' ; +# +# Where clause of a delete. +# let $delete_where= WHERE id=1 ; +# +# Column to be dropped. +# let $drop_column= user; +# +# Column to be indexed +# let $index_col= user; + + +# data access + +eval CREATE TEMPORARY TABLE test.t_$table AS SELECT * FROM $table; + +eval UPDATE test.t_$table SET user='horst' $update_where ; + +--error ER_DBACCESS_DENIED_ERROR +eval INSERT INTO $table SELECT * FROM test.t_$table; + +# bug#30208: CREATE TABLE ...LIKE does not accept dbname.tablename:unknown database +eval DROP TABLE test.t_$table; + +--error ER_VIEW_NONUPD_CHECK +eval CREATE VIEW test.v_$table ($columns) AS SELECT * FROM $table WITH CHECK OPTION; + +eval CREATE VIEW test.v_$table ($columns) AS SELECT * FROM $table; + +--error ER_DBACCESS_DENIED_ERROR +eval UPDATE test.v_$TABLE SET TIME=NOW() WHERE id = 1; + +eval DROP VIEW test.v_$table; + +--error ER_DBACCESS_DENIED_ERROR +eval UPDATE $table SET $set_column $update_where; + +--error ER_DBACCESS_DENIED_ERROR +eval DELETE FROM $table $delete_where; + +# change privileges + +--error ER_DBACCESS_DENIED_ERROR +eval REVOKE ALL ON $table FROM current_user; + +--error ER_DBACCESS_DENIED_ERROR +eval GRANT INSERT,UPDATE ON $table TO current_user; + +SHOW GRANTS; + +#---------------------------------------------------------------------- +# table access + +--error ER_DBACCESS_DENIED_ERROR +eval CREATE INDEX i_$table ON $table ($index_col); + +--error ER_DBACCESS_DENIED_ERROR +eval DROP TABLE $table; + +--error ER_DBACCESS_DENIED_ERROR +eval ALTER TABLE $table DROP COLUMN $drop_column; + +--error ER_DBACCESS_DENIED_ERROR +eval ALTER TABLE $table ADD COLUMN (my_column INT); + +--error ER_UNKNOWN_TABLE +eval RENAME TABLE $table TO new_$table; + +--error ER_DBACCESS_DENIED_ERROR +eval RENAME TABLE $table TO files; + +--error ER_UNKNOWN_TABLE +eval CREATE TABLE new_$table AS SELECT * FROM $table; + +#---------------------------------------------------------------------- +# database access + +--error ER_DBACCESS_DENIED_ERROR +DROP DATABASE information_schema; + +--error ER_DBACCESS_DENIED_ERROR +RENAME DATABASE information_schema TO info_schema; diff --git a/mysql-test/suite/funcs_1/datadict/processlist_priv.inc b/mysql-test/suite/funcs_1/datadict/processlist_priv.inc new file mode 100644 index 00000000000..5f7fed018ed --- /dev/null +++ b/mysql-test/suite/funcs_1/datadict/processlist_priv.inc @@ -0,0 +1,432 @@ +############ suite/funcs_1/datadict/processlist_priv.inc ############### +# # +# Testing of privileges around # +# SELECT ... PROCESSLIST/SHOW PROCESSLIST # +# # +# Note(mleich): # +# There is a significant risk to get an unstable test because of # +# timing issues. # +# Example1: # +# 1. Disconnect connection X # +# 2. Switch to connection Y # +# 3. SHOW PROCESSLIST might present a record like # +# Quit 0 cleaning up NULL # +# or even a row where connection X is without # +# "Quit" or "cleaning up". # +# That means our SHOW PROCESSLIST can come too early. # +# Solution: # +# Close the connections at the end of the test. # +# Example2: # +# 1. connection X: SHOW PROCESSLIST/GRANT ... etc. # +# 2. Switch to connection Y # +# 3. SHOW PROCESSLIST might present a record like # +# Query TIME cleaning up # +# Query TIME writing to net # +# Problems happens more often in case of slow filesystem! # +# First Solution: # +# Insert a dummy SQL command where the cleanup is most probably # +# fast before switching to another connection and running # +# SHOW/SELECT PROCESSLIST. # +# Suppress writing to protocol by assignment to $variable. # +# let $my_var= `SELECT 1`; # +# Even the 'SELECT 1' was in some cases in state # +# "writing to net". # +# Final Solution: # +# --real_sleep 0.3 # +# This value was at least on my box sufficient. # +# Please inform us if this test fails so that we can adjust # +# the sleep time better or switch to poll routines. # +# # +# Storage engine variants of this test do not make sense. # +# - I_S tables use the MEMORY storage engine whenever possible. # +# - There are some I_S table which need column data types which # +# are not supported by MEMORY. Example: LONGTEXT/BLOB # +# MyISAM will be used for such tables. # +# The column PROCESSLIST.INFO is of data type LONGTEXT # +# ----> MyISAM # +# - There is no impact of the GLOBAL(server) or SESSION default # +# storage engine setting on the engine used for I_S tables. # +# That means we cannot get NDB or InnoDB instead. # +# # +# Creation: # +# 2007-08 hhunger Implement this test as part of # +# WL#3982 Test information_schema.processlist # +# # +# Last update: # +# 2007-08-14 mleich Corrections # +# # +######################################################################## + +# The following variables are used in "datadict_priv.inc" and here. +# +# information_schema table to be tested +let $table= processlist; +# +# columns of the information_schema table e.g. to use in a select. +let $columns= ID, USER, HOST, DB, COMMAND, TIME, STATE, INFO; +# +# Where clause for an update. +let $update_where= WHERE id=1 ; +# +# Column to be used in the SET of an update. +let $set_column= user='any_user' ; +# +# Where clause of a delete. +let $delete_where= WHERE id=1 ; +# +# Column to be dropped. +let $drop_column= user; +# +# Column to be indexed +let $index_col= user; + +USE information_schema; + +--echo #################################################################################### +--echo 1 Prepare test. +--echo connection default (user=root) +--echo #################################################################################### + +--echo #################################################################################### +--echo 1.1 Create two user +--echo #################################################################################### +# access to info tables as normal user +--disable_abort_on_error +DROP USER ddicttestuser1@'localhost'; +DROP USER ddicttestuser2@'localhost'; +--enable_abort_on_error +CREATE USER ddicttestuser1@'localhost'; +CREATE USER ddicttestuser2@'localhost'; +SET PASSWORD FOR ddicttestuser1@'localhost' = PASSWORD('ddictpass'); +SET PASSWORD FOR ddicttestuser2@'localhost' = PASSWORD('ddictpass'); + +--echo #################################################################################### +--echo 1.2 Establish connection con100 (user=ddicttestuser1 with no PROCESS privilege): +connect (con100,localhost,ddicttestuser1,ddictpass,information_schema); +--echo #################################################################################### + + +--echo #################################################################################### +--echo 2 connection default(user=root with default privileges): +--echo SHOW/SELECT shows all processes/threads. +--echo #################################################################################### +connection default; +eval SHOW CREATE TABLE $table; +--replace_column 6 TIME +eval SHOW $table; +--replace_column 6 TIME +eval SELECT * FROM $table $select_where ORDER BY id; +--replace_column 6 TIME +eval SELECT $columns FROM $table $select_where ORDER BY id; +--source suite/funcs_1/datadict/datadict_priv.inc +--real_sleep 0.3 + + +--echo #################################################################################### +--echo 3 Switch to connection con100 (user=ddicttestuser1 with no PROCESS privilege): +connection con100; +--echo SHOW/SELECT shows only the processes (1) of the user. +--echo #################################################################################### +eval SHOW CREATE TABLE $table; +--replace_column 6 TIME +eval SHOW $table; +--replace_column 6 TIME +eval SELECT * FROM $table $select_where ORDER BY id; +--replace_column 6 TIME +eval SELECT $columns FROM $table $select_where ORDER BY id; +--source suite/funcs_1/datadict/datadict_priv.inc +--real_sleep 0.3 + + +--echo #################################################################################### +--echo 4 Grant PROCESS privilege to ddicttestuser1 +--echo connection default (user=root) +--echo #################################################################################### +connection default; +GRANT PROCESS ON *.* TO ddicttestuser1@'localhost' IDENTIFIED BY 'ddictpass'; +--real_sleep 0.3 + +--echo #################################################################################### +--echo 4.1 Existing connection con100 (ddicttestuser1) +--echo The user ddicttestuser1 has the PROCESS privilege, but the connection was +--echo established before PROCESS was granted. +--echo SHOW/SELECT shows only the processes (1) of the user. +--echo #################################################################################### +connection con100; +SHOW GRANTS; +--replace_column 6 TIME +SHOW processlist; +--replace_column 6 TIME +SELECT * FROM information_schema.processlist; +--real_sleep 0.3 + +--echo #################################################################################### +--echo 4.2 New connection con101 (ddicttestuser1 with PROCESS privilege) +--echo SHOW/SELECT shows all processes/threads. +--echo #################################################################################### +connect (con101,localhost,ddicttestuser1,ddictpass,information_schema); +SHOW GRANTS; +--replace_column 6 TIME +SHOW processlist; +--replace_column 6 TIME +SELECT * FROM information_schema.processlist; +--real_sleep 0.3 + + +--echo #################################################################################### +--echo 5 Grant PROCESS privilege to anonymous user. +--echo connection default (user=root) +--echo #################################################################################### +connection default; +GRANT PROCESS ON *.* TO ''@'localhost'; +--real_sleep 0.3 + +--echo #################################################################################### +--echo 5.1 Establish connection (anonymous1,localhost,'',,information_schema) +--echo anonymous user with PROCESS privilege +--echo SHOW/SELECT shows all processes/threads. +--echo #################################################################################### +connect (anonymous1,localhost,'',,information_schema); +SHOW GRANTS; +--replace_column 6 TIME +SHOW processlist; +--replace_column 6 TIME +SELECT * FROM information_schema.processlist; +--real_sleep 0.3 + + +--echo #################################################################################### +--echo 6 Revoke PROCESS privilege from ddicttestuser1 +--echo connection default (user=root) +--echo #################################################################################### +connection default; +REVOKE PROCESS ON *.* FROM ddicttestuser1@'localhost' IDENTIFIED BY 'ddictpass'; +--real_sleep 0.3 + +--echo #################################################################################### +--echo 6.1 New connection con102 (ddicttestuser1 has no more PROCESS privilege) +connect (con102,localhost,ddicttestuser1,ddictpass,information_schema); +--echo Again (compared to state before GRANT PROCESS) only the processes of +--echo ddicttestuser1 are visible. +--echo #################################################################################### +SHOW GRANTS; +--replace_column 6 TIME +SHOW processlist; +--replace_column 6 TIME +SELECT * FROM information_schema.processlist; +--real_sleep 0.3 + + +--echo #################################################################################### +--echo 7 Revoke PROCESS privilege from anonymous user + disconnect ddicttestuser1 +--echo connection default (user=root) +--echo #################################################################################### +connection default; +REVOKE PROCESS ON *.* FROM ''@'localhost'; +--real_sleep 0.3 + +--echo #################################################################################### +--echo 7.1 New connection (anonymous2,localhost,'',,information_schema) +connect (anonymous2,localhost,'',,information_schema); +--echo The anonymous user has no more the PROCESS privilege +--echo Again only the processes of the anonymous user are visible. +--echo #################################################################################### +SHOW GRANTS FOR ''@'localhost'; +if ($fixed_bug_30395) +{ +# Bug#30395 strange results after REVOKE PROCESS ON *.* FROM ... +--replace_column 6 TIME +SHOW processlist; +} +--replace_column 6 TIME +SELECT * FROM information_schema.processlist; +--real_sleep 0.3 + + +--echo #################################################################################### +--echo 8 Grant SUPER (does not imply PROCESS) privilege to ddicttestuser1 +--echo connection default (user=root) +--echo #################################################################################### +connection default; +GRANT SUPER ON *.* TO 'ddicttestuser1'@'localhost'; +--real_sleep 0.3 + +--echo #################################################################################### +--echo 8.1 New connection con103 (ddicttestuser1 with SUPER privilege) +connect (con103,localhost,ddicttestuser1,ddictpass,information_schema); +--echo Only the processes of ddicttestuser1 user are visible. +--echo #################################################################################### +SHOW GRANTS FOR 'ddicttestuser1'@'localhost'; +--replace_column 6 TIME +SHOW processlist; +--replace_column 6 TIME +SELECT * FROM information_schema.processlist; +--real_sleep 0.3 + + +--echo #################################################################################### +--echo 9 Revoke SUPER privilege from user ddicttestuser1 +--echo connection default (user=root) +--echo #################################################################################### +connection default; +REVOKE SUPER ON *.* FROM 'ddicttestuser1'@'localhost'; +--real_sleep 0.3 + +--echo #################################################################################### +--echo 9.1 New connection con104 (ddicttestuser1 without SUPER privilege) +connect (con104,localhost,ddicttestuser1,ddictpass,information_schema); +--echo ddicttestuser1 has no more the SUPER privilege. +--echo Only the processes of ddicttestuser1 are visible. +--echo #################################################################################### +SHOW GRANTS FOR 'ddicttestuser1'@'localhost'; +--replace_column 6 TIME +SHOW processlist; +--replace_column 6 TIME +SELECT * FROM information_schema.processlist; +--real_sleep 0.3 + + +--echo #################################################################################### +--echo 10 Grant SUPER privilege with grant option to user ddicttestuser1. +--echo connection default (user=root) +--echo #################################################################################### +connection default; +GRANT SUPER ON *.* TO 'ddicttestuser1'@'localhost' WITH GRANT OPTION; +--real_sleep 0.3 + +--echo #################################################################################### +--echo 10.1 New connection con105 (ddicttestuser1 with SUPER privilege and GRANT OPTION) +connect (con105,localhost,ddicttestuser1,ddictpass,information_schema); +--echo Try to grant PROCESS privilege to user ddicttestuser2 without having it. +--echo #################################################################################### +SHOW GRANTS FOR 'ddicttestuser1'@'localhost'; +--error ER_ACCESS_DENIED_ERROR +GRANT PROCESS ON *.* TO 'ddicttestuser2'@'localhost'; + +--echo #################################################################################### +--echo 10.2 Grant SUPER and PROCESS privilege with grant option to user ddicttestuser1 +--echo connection default (user=root) +--echo #################################################################################### +connection default; +GRANT SUPER,PROCESS ON *.* TO 'ddicttestuser1'@'localhost' WITH GRANT OPTION; +--real_sleep 0.3 + +--echo #################################################################################### +--echo 10.3 New connection con106 (ddicttestuser1 with SUPER,PROCESS WITH GRANT OPTION) +connect (con106,localhost,ddicttestuser1,ddictpass,information_schema); +--echo Grant PROCESS privilege to user ddicttestuser2 +--echo #################################################################################### +SHOW GRANTS FOR 'ddicttestuser1'@'localhost'; +GRANT PROCESS ON *.* TO 'ddicttestuser2'@'localhost'; +--real_sleep 0.3 + +--echo #################################################################################### +--echo 10.4 New connection con200 (ddicttestuser2 with PROCESS privilege) +connect (con200,localhost,ddicttestuser2,ddictpass,information_schema); +--echo ddicttestuser2 has now the PROCESS privilege and sees all connections +--echo #################################################################################### +SHOW GRANTS FOR 'ddicttestuser2'@'localhost'; +--replace_column 6 TIME +SHOW processlist; +--replace_column 6 TIME +SELECT * FROM information_schema.processlist; +--real_sleep 0.3 + + +--echo #################################################################################### +--echo 11 User ddicttestuser1 revokes PROCESS privilege from user ddicttestuser2 +--echo connection ddicttestuser1; +--echo #################################################################################### +connection con106; +REVOKE PROCESS ON *.* FROM 'ddicttestuser2'@'localhost'; +--real_sleep 0.3 + +--echo #################################################################################### +--echo 11.1 New connection con201 (ddicttestuser2) +connect (con201,localhost,ddicttestuser2,ddictpass,information_schema); +--echo ddicttestuser2 has no more the PROCESS privilege and can only see own connects +--echo #################################################################################### +SHOW GRANTS; +--replace_column 6 TIME +SHOW processlist; +--replace_column 6 TIME +SELECT * FROM information_schema.processlist; +--real_sleep 0.3 + +--echo #################################################################################### +--echo 11.2 Revoke SUPER,PROCESS,GRANT OPTION privilege from user ddicttestuser1 +--echo connection default (user=root) +--echo #################################################################################### +connection default; +REVOKE SUPER,PROCESS,GRANT OPTION ON *.* FROM 'ddicttestuser1'@'localhost'; +--real_sleep 0.3 + +--echo #################################################################################### +--echo 11.3 New connection con107 (ddicttestuser1) +connect (con107,localhost,ddicttestuser1,ddictpass,information_schema); +--echo ddicttestuser1 has no more the PROCESS privilege and can only see own connects +--echo He is also unable to GRANT the PROCESS privilege to ddicttestuser2 +--echo #################################################################################### +SHOW GRANTS FOR 'ddicttestuser1'@'localhost'; +--error ER_ACCESS_DENIED_ERROR +GRANT PROCESS ON *.* TO 'ddicttestuser2'@'localhost'; +--replace_column 6 TIME +SHOW processlist; +--replace_column 6 TIME +SELECT * FROM information_schema.processlist; +--real_sleep 0.3 + + +--echo #################################################################################### +--echo 12 Revoke the SELECT privilege from user ddicttestuser1 +--echo connection default (user=root) +--echo #################################################################################### +connection default; +REVOKE SELECT ON *.* FROM 'ddicttestuser1'@'localhost'; +--real_sleep 0.3 + +--echo #################################################################################### +--echo 12.1 New connection con108 (ddicttestuser1) +connect (con108,localhost,ddicttestuser1,ddictpass,information_schema); +--echo ddicttestuser1 has neither PROCESS nor SELECT privilege +--echo Manual says: Each MySQL user has the right to access these tables, but can see +--echo only the rows ... +--echo Therefore the missing SELECT privilege does not affect SELECTs on PROCESSLIST. +--echo #################################################################################### +SHOW GRANTS FOR 'ddicttestuser1'@'localhost'; +--replace_column 6 TIME +SHOW processlist; +--replace_column 6 TIME +SELECT * FROM information_schema.processlist; +--real_sleep 0.3 + +--echo #################################################################################### +--echo 12.2 Revoke only the SELECT privilege on the information_schema from ddicttestuser1. +--echo connection default (user=root) +--echo #################################################################################### +connection default; +--error ER_DBACCESS_DENIED_ERROR +REVOKE SELECT ON information_schema.* FROM 'ddicttestuser3'@'localhost'; +--real_sleep 0.3 + + +--echo #################################################################################### +--echo connection default (user=root) +--echo Cleanup: close connections, DROP USER etc. +--echo #################################################################################### +connection default; +disconnect con100; +disconnect con101; +disconnect con102; +disconnect con103; +disconnect con104; +disconnect con105; +disconnect con106; +disconnect con107; +disconnect con108; +disconnect con200; +disconnect con201; +disconnect anonymous1; +disconnect anonymous2; +DROP USER ddicttestuser1@'localhost'; +DROP USER ddicttestuser2@'localhost'; diff --git a/mysql-test/suite/funcs_1/datadict/processlist_val.inc b/mysql-test/suite/funcs_1/datadict/processlist_val.inc new file mode 100644 index 00000000000..da2c2950095 --- /dev/null +++ b/mysql-test/suite/funcs_1/datadict/processlist_val.inc @@ -0,0 +1,333 @@ +########### suite/funcs_1/datadict/processlist_val.inc ################# +# # +# Testing of values within INFORMATION_SCHEMA.PROCESSLIST # +# # +# Ensure that the values fit to the current state of the connection # +# and especially that they change if a connection does nothing or # +# runs some SQL. # +# Examples: # +# - change the default database # +# - send some time no SQL command to the server # +# - send a long running query # +# # +# Note(mleich): # +# 1. Please inform me if this test fails because of timing problems. # +# I tried to avoid instabilities but the values within the column # +# TIME are very sensible to fluctuations of the machine load. # +# I had to unify some TIME values with "--replace_result" in cases # +# where they are too unstable. # +# 2. Storage engine variants of this test do not make sense. # +# - I_S tables use the MEMORY storage engine whenever possible. # +# - There are some I_S table which need column data types which # +# are not supported by MEMORY. Example: LONGTEXT/BLOB # +# MyISAM will be used for such tables. # +# The column PROCESSLIST.INFO is of data type LONGTEXT # +# ----> MyISAM # +# - There is no impact of the GLOBAL(server) or SESSION default # +# storage engine setting on the engine used for I_S tables. # +# That means we cannot get NDB or InnoDB instead. # +# 3. The SHOW (FULL) PROCESSLIST command are for comparison. # +# The main test target is INFORMATION_SCHEMA.PROCESSLIST ! # +# # +# Creation: # +# 2007-08-09 mleich Implement this test as part of # +# WL#3982 Test information_schema.processlist # +# # +######################################################################## + +# Basic preparations +--disable_abort_on_error +DROP USER ddicttestuser1@'localhost'; +--enable_abort_on_error +CREATE USER ddicttestuser1@'localhost'; +GRANT ALL ON *.* TO ddicttestuser1@'localhost'; +REVOKE PROCESS ON *.* FROM ddicttestuser1@'localhost'; +SET PASSWORD FOR ddicttestuser1@'localhost' = PASSWORD('ddictpass'); +--disable_warnings +DROP TABLE IF EXISTS test.t1; +--enable_warnings +CREATE TABLE test.t1 (f1 BIGINT); + + +# Show the definition of the PROCESSLIST table +#-------------------------------------------------------------------------- +SHOW CREATE TABLE INFORMATION_SCHEMA.PROCESSLIST; + + +# Ensure that the values follow the changing default database and statement +#-------------------------------------------------------------------------- +# - We have now exact one connection. -> One record +SELECT COUNT(*) FROM INFORMATION_SCHEMA.PROCESSLIST; +# - Other expected values +# - USER = 'root' +# - HOST = 'localhost' +# - DB = 'test' +# - Command = 'Query' +# - TIME = 0, I hope the testing machines are all time fast enough +# - State IS NULL +# - INFO must contain the corresponding SHOW/SELECT PROCESSLIST +USE test; +--replace_column 1 +SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST; +--replace_column 1 +SHOW FULL PROCESSLIST; +# +# Expect to see now DB = 'information_schema' +USE information_schema; +--replace_column 1 6
', in trigger statements. */ + /** Start of 'ON table', in trigger statements. */ const char* raw_trg_on_table_name_begin; - /** End of 'ON
', in trigger statements. */ + /** End of 'ON table', in trigger statements. */ const char* raw_trg_on_table_name_end; /* Partition info structure filled in by PARTITION BY parse part */ From 163420d2d795bc22c3939632518a18523429544e Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 16 Aug 2007 10:56:09 -0600 Subject: [PATCH 088/194] Bug #29474: 21587 Regression Ever increasing open tables/fd when using HANDLER READ + DELETE Revert the fix for bug 21587. That bug will be re-opened, and a new fix must be created. --- sql/mysql_priv.h | 1 - sql/sql_base.cc | 8 -------- sql/sql_handler.cc | 45 --------------------------------------------- 3 files changed, 54 deletions(-) diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index ca6aa8ecab0..44eb5590a28 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -995,7 +995,6 @@ bool mysql_ha_read(THD *, TABLE_LIST *,enum enum_ha_read_modes,char *, List *,enum ha_rkey_function,Item *,ha_rows,ha_rows); int mysql_ha_flush(THD *thd, TABLE_LIST *tables, uint mode_flags, bool is_locked); -void mysql_ha_mark_tables_for_reopen(THD *thd, TABLE *table); /* mysql_ha_flush mode_flags bits */ #define MYSQL_HA_CLOSE_FINAL 0x00 #define MYSQL_HA_REOPEN_ON_USAGE 0x01 diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 1c01248c283..1cae1c34af9 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -585,14 +585,6 @@ void close_thread_tables(THD *thd, bool lock_in_use, bool skip_derived) DBUG_PRINT("info", ("thd->open_tables: %p", thd->open_tables)); - - /* - End open index scans and table scans and remove references to the tables - from the handler tables hash. After this preparation it is safe to close - the tables. - */ - mysql_ha_mark_tables_for_reopen(thd, thd->open_tables); - found_old_table= 0; while (thd->open_tables) found_old_table|=close_thread_table(thd, &thd->open_tables); diff --git a/sql/sql_handler.cc b/sql/sql_handler.cc index e1318aa2736..9ef955a4bc2 100644 --- a/sql/sql_handler.cc +++ b/sql/sql_handler.cc @@ -746,48 +746,3 @@ static int mysql_ha_flush_table(THD *thd, TABLE **table_ptr, uint mode_flags) DBUG_RETURN(0); } - - -/* - Mark tables for reopen. - - SYNOPSIS - mysql_ha_mark_tables_for_reopen() - thd Thread identifier. - table Table list to mark for reopen. - - DESCRIPTION - For each table found in the handler hash mark it as closed - (ready for reopen) and end all index/table scans. - - NOTE - The caller must lock LOCK_open. -*/ - -void mysql_ha_mark_tables_for_reopen(THD *thd, TABLE *table) -{ - DBUG_ENTER("mysql_ha_mark_tables_for_reopen"); - - safe_mutex_assert_owner(&LOCK_open); - for (; table; table= table->next) - { - /* - Some elements in open table list, for example placeholders used for - name-locking, can have alias set to 0. - */ - if (table->alias) - { - TABLE_LIST *hash_tables; - if ((hash_tables= (TABLE_LIST*) hash_search(&thd->handler_tables_hash, - (byte*) table->alias, - strlen(table->alias) + 1))) - { - /* Mark table as ready for reopen. */ - hash_tables->table= NULL; - /* End open index/table scans. */ - table->file->ha_index_or_rnd_end(); - } - } - } - DBUG_VOID_RETURN; -} From 81e54a4f3dfea157fe6d20643190abe2819d9241 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 16 Aug 2007 21:14:47 +0400 Subject: [PATCH 089/194] Fix doxygen warnings. sql/field.h: Fix doxygen warnings - too complex return value type, it choked on it. sql/field_conv.cc: Fix doxygen warnings - too complex return value type, it choked on it. --- include/mysql/plugin.h | 2 +- sql/field.h | 7 ++++++- sql/field_conv.cc | 3 ++- sql/log_event.h | 4 ++-- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/include/mysql/plugin.h b/include/mysql/plugin.h index 048ecb27cd5..61ed7be738f 100644 --- a/include/mysql/plugin.h +++ b/include/mysql/plugin.h @@ -773,7 +773,7 @@ void thd_get_xid(const MYSQL_THD thd, MYSQL_XID *xid); Invalidate the query cache for a given table. @param thd user thread connection handle - @param key databasename\0tablename\0 + @param key databasename\\0tablename\\0 @param key_length length of key in bytes, including the NUL bytes @param using_trx flag: TRUE if using transactions, FALSE otherwise */ diff --git a/sql/field.h b/sql/field.h index 60f6fc19d76..4ef4898cdb5 100644 --- a/sql/field.h +++ b/sql/field.h @@ -1732,7 +1732,12 @@ class Send_field { */ class Copy_field :public Sql_alloc { - void (*get_copy_func(Field *to,Field *from))(Copy_field *); + /** + Convenience definition of a copy function returned by + get_copy_func. + */ + typedef void Copy_func(Copy_field*); + Copy_func *get_copy_func(Field *to, Field *from); public: uchar *from_ptr,*to_ptr; uchar *from_null_ptr,*to_null_ptr; diff --git a/sql/field_conv.cc b/sql/field_conv.cc index 33c7897c3db..16e27bb6cab 100644 --- a/sql/field_conv.cc +++ b/sql/field_conv.cc @@ -620,7 +620,8 @@ void Copy_field::set(Field *to,Field *from,bool save) } -void (*Copy_field::get_copy_func(Field *to,Field *from))(Copy_field*) +Copy_field::Copy_func * +Copy_field::get_copy_func(Field *to,Field *from) { bool compatible_db_low_byte_first= (to->table->s->db_low_byte_first == from->table->s->db_low_byte_first); diff --git a/sql/log_event.h b/sql/log_event.h index 9db1d117ff6..203961c628e 100644 --- a/sql/log_event.h +++ b/sql/log_event.h @@ -435,7 +435,7 @@ struct sql_ex_info ((ULL(1) << 14) | (ULL(1) << 26) | (ULL(1) << 27) | (ULL(1) << 19)) #if OPTIONS_WRITTEN_TO_BIN_LOG != EXPECTED_OPTIONS -#error 1 +#error #endif #undef EXPECTED_OPTIONS /* You shouldn't use this one */ @@ -2549,7 +2549,7 @@ protected: - + From 409938f22a6b383bc987a4463aef60483f458394 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 16 Aug 2007 14:51:37 -0300 Subject: [PATCH 090/194] Bug#29936 (Stored Procedure DML ignores low_priority_updates setting) This is a follow up for the patch for Bug#26162 "Trigger DML ignores low_priority_updates setting", where the stored procedure ignores the session setting of low_priority_updates. For every table open operation with default write (TL_WRITE_DEFAULT) lock_type, downgrade the lock type to the session setting of low_priority_updates. sql/lock.cc: Add late lock_type assertion. sql/sql_base.cc: Possibly downgrade lock type to the the session setting of low_priority_updates and also remove early assertion. --- sql/lock.cc | 1 + sql/sql_base.cc | 9 ++------- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/sql/lock.cc b/sql/lock.cc index f730ac56d35..0036d0aef77 100644 --- a/sql/lock.cc +++ b/sql/lock.cc @@ -730,6 +730,7 @@ static MYSQL_LOCK *get_lock_data(THD *thd, TABLE **table_ptr, uint count, if ((table=table_ptr[i])->s->tmp_table == NON_TRANSACTIONAL_TMP_TABLE) continue; lock_type= table->reginfo.lock_type; + DBUG_ASSERT (lock_type != TL_WRITE_DEFAULT); if (lock_type >= TL_WRITE_ALLOW_WRITE) { *write_lock_used=table; diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 1c01248c283..0477c40b42d 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -1537,7 +1537,6 @@ TABLE *open_table(THD *thd, TABLE_LIST *table_list, MEM_ROOT *mem_root, HASH_SEARCH_STATE state; DBUG_ENTER("open_table"); - DBUG_ASSERT (table_list->lock_type != TL_WRITE_DEFAULT); /* find a unused table in the open table cache */ if (refresh) *refresh=0; @@ -2708,11 +2707,6 @@ int open_tables(THD *thd, TABLE_LIST **start, uint *counter, uint flags) { safe_to_ignore_table= FALSE; - if (tables->lock_type == TL_WRITE_DEFAULT) - { - tables->lock_type= thd->update_lock_default; - DBUG_ASSERT (tables->lock_type >= TL_WRITE_ALLOW_WRITE); - } /* Ignore placeholders for derived tables. After derived tables processing, link to created temporary table will be put here. @@ -2857,7 +2851,8 @@ int open_tables(THD *thd, TABLE_LIST **start, uint *counter, uint flags) } if (tables->lock_type != TL_UNLOCK && ! thd->locked_tables) - tables->table->reginfo.lock_type=tables->lock_type; + tables->table->reginfo.lock_type= tables->lock_type == TL_WRITE_DEFAULT ? + thd->update_lock_default : tables->lock_type; tables->table->grant= tables->grant; process_view_routines: From d811750fe890293970be9cd8d7b73258dd280da5 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 16 Aug 2007 21:54:41 +0400 Subject: [PATCH 091/194] Last tweak for doxygen cleanup. The number of doxygen warnings is 0 now. sql/log_event.h: Add doxygen documentation. Restore a text which had no influence on doxygen. --- sql/log_event.h | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/sql/log_event.h b/sql/log_event.h index 203961c628e..c93bfa32029 100644 --- a/sql/log_event.h +++ b/sql/log_event.h @@ -13,6 +13,15 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +/** + @addtogroup Replication + @{ + + @file + + Binary log event definitions. +*/ + #ifndef _log_event_h #define _log_event_h @@ -435,7 +444,7 @@ struct sql_ex_info ((ULL(1) << 14) | (ULL(1) << 26) | (ULL(1) << 27) | (ULL(1) << 19)) #if OPTIONS_WRITTEN_TO_BIN_LOG != EXPECTED_OPTIONS -#error +#error OPTIONS_WRITTEN_TO_BIN_LOG must NOT change their values! #endif #undef EXPECTED_OPTIONS /* You shouldn't use this one */ @@ -2634,4 +2643,8 @@ static inline bool copy_event_cache_to_file_and_reinit(IO_CACHE *cache, reinit_io_cache(cache, WRITE_CACHE, 0, FALSE, TRUE); } +/** + @} (end of group Replication) +*/ + #endif /* _log_event_h */ From 8f8eab9c028d18da22af0ac330d022959a2f1c1b Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 17 Aug 2007 00:10:46 +0200 Subject: [PATCH 092/194] Empty changeset to restart pushbuild --- sql/log_event.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/log_event.cc b/sql/log_event.cc index 19b1d941c78..c6987b3cb8c 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -597,7 +597,7 @@ int Log_event::net_send(Protocol *protocol, const char* log_name, my_off_t pos) const char *event_type; if (p) log_name = p + 1; - + protocol->prepare_for_resend(); protocol->store(log_name, &my_charset_bin); protocol->store((ulonglong) pos); From 0d9046ecaf3107371e0b2a59792104385da74349 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 16 Aug 2007 19:27:44 -0700 Subject: [PATCH 093/194] Post-merge fix. --- mysql-test/r/select.result | 4 +-- tests/mysql_client_test.c | 73 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/select.result b/mysql-test/r/select.result index f1bfbec1555..48e8bf933e1 100644 --- a/mysql-test/r/select.result +++ b/mysql-test/r/select.result @@ -4039,8 +4039,8 @@ join_2.c1, join_7.c1, join_1.c1, join_0.c1; -id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +id select_type table type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables Warnings: Note 1003 select '0' AS `c1` from `test`.`t1` `join_0` join `test`.`t1` `join_1` join `test`.`t1` `join_2` join `test`.`t1` `join_3` join `test`.`t1` `join_4` join `test`.`t1` `join_5` join `test`.`t1` `join_6` join `test`.`t1` `join_7` where 0 group by '0','0','0','0','0' SHOW WARNINGS; diff --git a/tests/mysql_client_test.c b/tests/mysql_client_test.c index 3656364820e..a6ad0d5bc80 100644 --- a/tests/mysql_client_test.c +++ b/tests/mysql_client_test.c @@ -16269,6 +16269,78 @@ static void test_bug27592() DBUG_VOID_RETURN; } +static void test_bug29948() +{ + MYSQL *dbc=NULL; + MYSQL_STMT *stmt=NULL; + MYSQL_BIND bind; + + int res=0; + my_bool auto_reconnect=1, error=0, is_null=0; + char kill_buf[20]; + const char *query; + int buf; + unsigned long length, cursor_type; + + dbc = mysql_init(NULL); + DIE_UNLESS(dbc); + + mysql_options(dbc, MYSQL_OPT_RECONNECT, (char*)&auto_reconnect); + if (!mysql_real_connect(dbc, opt_host, opt_user, + opt_password, current_db, opt_port, + opt_unix_socket, + (CLIENT_FOUND_ROWS | CLIENT_MULTI_STATEMENTS | + CLIENT_MULTI_RESULTS))) + { + printf("connection failed: %s (%d)", mysql_error(dbc), + mysql_errno(dbc)); + exit(1); + } + + bind.buffer_type= MYSQL_TYPE_LONG; + bind.buffer= (char *)&buf; + bind.is_null= &is_null; + bind.error= &error; + bind.length= &length; + + res= mysql_query(dbc, "DROP TABLE IF EXISTS t1"); + myquery(res); + res= mysql_query(dbc, "CREATE TABLE t1 (a INT)"); + myquery(res); + res= mysql_query(dbc, "INSERT INTO t1 VALUES(1)"); + myquery(res); + + stmt= mysql_stmt_init(dbc); + check_stmt(stmt); + + cursor_type= CURSOR_TYPE_READ_ONLY; + res= mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, (void *)&cursor_type); + myquery(res); + + query= "SELECT * from t1 where a=?"; + res= mysql_stmt_prepare(stmt, query, strlen(query)); + myquery(res); + + res= mysql_stmt_bind_param(stmt, &bind); + myquery(res); + + res= mysql_stmt_execute(stmt); + check_execute(stmt, res); + + res= mysql_stmt_bind_result(stmt,&bind); + check_execute(stmt, res); + + sprintf(kill_buf, "kill %ld", dbc->thread_id); + mysql_query(dbc, kill_buf); + + res= mysql_stmt_store_result(stmt); + DIE_UNLESS(res); + + mysql_stmt_free_result(stmt); + mysql_stmt_close(stmt); + mysql_query(dbc, "DROP TABLE t1"); + mysql_close(dbc); +} /* @@ -16670,6 +16742,7 @@ static struct my_tests_st my_tests[]= { { "test_bug28505", test_bug28505 }, { "test_bug28934", test_bug28934 }, { "test_bug27592", test_bug27592 }, + { "test_bug29948", test_bug29948 }, { "test_bug29687", test_bug29687 }, { "test_bug29692", test_bug29692 }, { "test_bug29306", test_bug29306 }, From dc4a1ef8fdbd02d998843adea18e73f32593cbe1 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 17 Aug 2007 13:22:31 +0200 Subject: [PATCH 094/194] Minor fix to let the build proceed. sql/rpl_rli.h: Adding missing forward declaration. --- sql/rpl_rli.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/rpl_rli.h b/sql/rpl_rli.h index c19b84ced49..10ecf1a43d4 100644 --- a/sql/rpl_rli.h +++ b/sql/rpl_rli.h @@ -21,7 +21,7 @@ #include "rpl_utility.h" struct RPL_TABLE_LIST; - +class Master_info; /**************************************************************************** From 8bdb043f087ffbad27ab6daaeba8954b41711b57 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 17 Aug 2007 11:34:12 -0300 Subject: [PATCH 095/194] Bug#25856 (HANDLER table OPEN in one connection lock DROP TABLE in another one) mysql_ha_open calls mysql_ha_close on the error path (unsupported) to close the (opened) table before inserting it into the tables hash list handler_tables_hash) but mysql_ha_close only closes tables which are on the hash list, causing the table to be left open and locked. This change moves the table close logic into a separate function that is always called on the error path of mysql_ha_open or on a normal handler close (mysql_ha_close). mysql-test/r/lock_multi.result: Bug#25856 test result mysql-test/t/lock_multi.test: Bug#25856 test case sql/sql_handler.cc: Move the table close logic into a separate function that is always called on the error path of mysql_ha_open or on a normal handler close. --- mysql-test/r/lock_multi.result | 7 +++ mysql-test/t/lock_multi.test | 15 +++++++ sql/sql_handler.cc | 80 ++++++++++++++++++++-------------- 3 files changed, 69 insertions(+), 33 deletions(-) diff --git a/mysql-test/r/lock_multi.result b/mysql-test/r/lock_multi.result index e89fbec0aed..4a0f70a7b88 100644 --- a/mysql-test/r/lock_multi.result +++ b/mysql-test/r/lock_multi.result @@ -106,4 +106,11 @@ i ERROR 70100: Query execution was interrupted unlock tables; drop table t1; +drop table if exists t1; +create table t1 (a int) ENGINE=MEMORY; +--> client 2 +handler t1 open; +ERROR HY000: Table storage engine for 't1' doesn't have this option +--> client 1 +drop table t1; End of 5.1 tests diff --git a/mysql-test/t/lock_multi.test b/mysql-test/t/lock_multi.test index 8ffa67f8439..b2266c9bff1 100644 --- a/mysql-test/t/lock_multi.test +++ b/mysql-test/t/lock_multi.test @@ -328,4 +328,19 @@ unlock tables; connection default; drop table t1; +# +# Bug#25856 - HANDLER table OPEN in one connection lock DROP TABLE in another one +# +--disable_warnings +drop table if exists t1; +--enable_warnings +create table t1 (a int) ENGINE=MEMORY; +--echo --> client 2 +connection locker; +--error 1031 +handler t1 open; +--echo --> client 1 +connection default; +drop table t1; + --echo End of 5.1 tests diff --git a/sql/sql_handler.cc b/sql/sql_handler.cc index 300ec7f3c62..eaa0da06630 100644 --- a/sql/sql_handler.cc +++ b/sql/sql_handler.cc @@ -119,6 +119,44 @@ static void mysql_ha_hash_free(TABLE_LIST *tables) my_free((char*) tables, MYF(0)); } +/** + Close a HANDLER table. + + @param thd Thread identifier. + @param tables A list of tables with the first entry to close. + + @note Though this function takes a list of tables, only the first list entry + will be closed. + @note Broadcasts refresh if it closed the table. +*/ + +static void mysql_ha_close_table(THD *thd, TABLE_LIST *tables) +{ + TABLE **table_ptr; + + /* + Though we could take the table pointer from hash_tables->table, + we must follow the thd->handler_tables chain anyway, as we need the + address of the 'next' pointer referencing this table + for close_thread_table(). + */ + for (table_ptr= &(thd->handler_tables); + *table_ptr && (*table_ptr != tables->table); + table_ptr= &(*table_ptr)->next) + ; + + if (*table_ptr) + { + (*table_ptr)->file->ha_index_or_rnd_end(); + VOID(pthread_mutex_lock(&LOCK_open)); + if (close_thread_table(thd, table_ptr)) + { + /* Tell threads waiting for refresh that something has happened */ + broadcast_refresh(); + } + VOID(pthread_mutex_unlock(&LOCK_open)); + } +} /* Open a HANDLER table. @@ -145,7 +183,7 @@ static void mysql_ha_hash_free(TABLE_LIST *tables) bool mysql_ha_open(THD *thd, TABLE_LIST *tables, bool reopen) { - TABLE_LIST *hash_tables; + TABLE_LIST *hash_tables = NULL; char *db, *name, *alias; uint dblen, namelen, aliaslen, counter; int error; @@ -197,7 +235,6 @@ bool mysql_ha_open(THD *thd, TABLE_LIST *tables, bool reopen) { if (! reopen) my_error(ER_ILLEGAL_HA, MYF(0), tables->alias); - mysql_ha_close(thd, tables); goto err; } @@ -225,11 +262,7 @@ bool mysql_ha_open(THD *thd, TABLE_LIST *tables, bool reopen) /* add to hash */ if (my_hash_insert(&thd->handler_tables_hash, (uchar*) hash_tables)) - { - my_free((char*) hash_tables, MYF(0)); - mysql_ha_close(thd, tables); goto err; - } } if (! reopen) @@ -238,13 +271,17 @@ bool mysql_ha_open(THD *thd, TABLE_LIST *tables, bool reopen) DBUG_RETURN(FALSE); err: + if (hash_tables) + my_free((char*) hash_tables, MYF(0)); + if (tables->table) + mysql_ha_close_table(thd, tables); DBUG_PRINT("exit",("ERROR")); DBUG_RETURN(TRUE); } /* - Close a HANDLER table. + Close a HANDLER table by alias or table name SYNOPSIS mysql_ha_close() @@ -252,9 +289,8 @@ err: tables A list of tables with the first entry to close. DESCRIPTION - Though this function takes a list of tables, only the first list entry - will be closed. - Broadcasts refresh if it closed the table. + Closes the table that is associated (on the handler tables hash) with the + name (table->alias) of the specified table. RETURN FALSE ok @@ -264,7 +300,6 @@ err: bool mysql_ha_close(THD *thd, TABLE_LIST *tables) { TABLE_LIST *hash_tables; - TABLE **table_ptr; DBUG_ENTER("mysql_ha_close"); DBUG_PRINT("enter",("'%s'.'%s' as '%s'", tables->db, tables->table_name, tables->alias)); @@ -273,28 +308,7 @@ bool mysql_ha_close(THD *thd, TABLE_LIST *tables) (uchar*) tables->alias, strlen(tables->alias) + 1))) { - /* - Though we could take the table pointer from hash_tables->table, - we must follow the thd->handler_tables chain anyway, as we need the - address of the 'next' pointer referencing this table - for close_thread_table(). - */ - for (table_ptr= &(thd->handler_tables); - *table_ptr && (*table_ptr != hash_tables->table); - table_ptr= &(*table_ptr)->next) - ; - - if (*table_ptr) - { - (*table_ptr)->file->ha_index_or_rnd_end(); - VOID(pthread_mutex_lock(&LOCK_open)); - if (close_thread_table(thd, table_ptr)) - { - /* Tell threads waiting for refresh that something has happened */ - broadcast_refresh(); - } - VOID(pthread_mutex_unlock(&LOCK_open)); - } + mysql_ha_close_table(thd, hash_tables); hash_delete(&thd->handler_tables_hash, (uchar*) hash_tables); } else From bd80048fdbcd828622858520ff69707056da6595 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 17 Aug 2007 16:55:20 +0200 Subject: [PATCH 096/194] Bug #30269 Query cache eats memory Although the query cache doesn't support retrieval of statements containing column level access control, it was still possible to cache such statements thus wasting memory. This patch extends the access control check on the target tables to avoid caching a statement with column level restrictions. mysql-test/r/query_cache.result: Added test mysql-test/t/query_cache.test: Added test sql/sql_cache.cc: The function check_table_access leaves the artifact grant.want_privileges= 1, if a statement refers to tables with column level privileges. To avoid the statement from being stored into the query cache, it is enough to check this flag and set 'safe_to_cache_query' to zero. sql/sql_cache.h: - Removed 'static' attribute or class methods - Added THD parameter to process_and_count_tables --- mysql-test/r/query_cache.result | 24 ++++++++++++++++++++++++ mysql-test/t/query_cache.test | 30 +++++++++++++++++++++++++++++- sql/sql_cache.cc | 24 +++++++++++++++++++++--- sql/sql_cache.h | 8 +++++--- 4 files changed, 79 insertions(+), 7 deletions(-) diff --git a/mysql-test/r/query_cache.result b/mysql-test/r/query_cache.result index f1f99012910..ecf7df2d2ae 100644 --- a/mysql-test/r/query_cache.result +++ b/mysql-test/r/query_cache.result @@ -1502,6 +1502,30 @@ a (select count(*) from t2) 3 0 4 0 drop table t1,t2; +DROP DATABASE IF EXISTS bug30269; +CREATE DATABASE bug30269; +USE bug30269; +CREATE TABLE test1 (id int, name varchar(23)); +CREATE VIEW view1 AS SELECT id FROM test1; +INSERT INTO test1 VALUES (5, 'testit'); +GRANT SELECT (id) ON TABLE bug30269.test1 TO 'bug30269'@'localhost'; +GRANT SELECT ON TABLE bug30269.view1 TO 'bug30269'@'localhost'; +set global query_cache_size= 81920; +USE bug30269; +show status like 'Qcache_queries_in_cache'; +Variable_name Value +Qcache_queries_in_cache 0 +SELECT id FROM test1 WHERE id>2; +id +5 +SELECT id FROM view1 WHERE id>2; +id +5 +show status like 'Qcache_queries_in_cache'; +Variable_name Value +Qcache_queries_in_cache 0 +DROP DATABASE bug30269; +DROP USER 'bug30269'@'localhost'; set GLOBAL query_cache_type=default; set GLOBAL query_cache_limit=default; set GLOBAL query_cache_min_res_unit=default; diff --git a/mysql-test/t/query_cache.test b/mysql-test/t/query_cache.test index 962f53936a3..7f4d4227f41 100644 --- a/mysql-test/t/query_cache.test +++ b/mysql-test/t/query_cache.test @@ -1096,9 +1096,37 @@ connection default; disconnect user1; disconnect user2; disconnect user3; + +# +# Bug #30269 Query cache eats memory +# +--disable_warnings +DROP DATABASE IF EXISTS bug30269; +--enable_warnings +CREATE DATABASE bug30269; +USE bug30269; +CREATE TABLE test1 (id int, name varchar(23)); +CREATE VIEW view1 AS SELECT id FROM test1; +INSERT INTO test1 VALUES (5, 'testit'); +GRANT SELECT (id) ON TABLE bug30269.test1 TO 'bug30269'@'localhost'; +GRANT SELECT ON TABLE bug30269.view1 TO 'bug30269'@'localhost'; +set global query_cache_size= 81920; +connect (bug30269, localhost, bug30269,,); +connection bug30269; +USE bug30269; +show status like 'Qcache_queries_in_cache'; +SELECT id FROM test1 WHERE id>2; +SELECT id FROM view1 WHERE id>2; +show status like 'Qcache_queries_in_cache'; + +connection default; +DROP DATABASE bug30269; +disconnect bug30269; +DROP USER 'bug30269'@'localhost'; + set GLOBAL query_cache_type=default; set GLOBAL query_cache_limit=default; set GLOBAL query_cache_min_res_unit=default; set GLOBAL query_cache_size=default; -# End of 5.0 tests +# End of 5.0 tests diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc index 33d658ce6a1..4a5bb263a5f 100644 --- a/sql/sql_cache.cc +++ b/sql/sql_cache.cc @@ -2991,14 +2991,31 @@ void Query_cache::double_linked_list_join(Query_cache_block *head_tail, >0 number of tables */ -static TABLE_COUNTER_TYPE process_and_count_tables(TABLE_LIST *tables_used, - uint8 *tables_type) +TABLE_COUNTER_TYPE +Query_cache::process_and_count_tables(THD *thd, TABLE_LIST *tables_used, + uint8 *tables_type) { DBUG_ENTER("process_and_count_tables"); TABLE_COUNTER_TYPE table_count = 0; for (; tables_used; tables_used= tables_used->next_global) { table_count++; +#ifdef HAVE_QUERY_CACHE + /* + Disable any attempt to store this statement if there are + column level grants on any referenced tables. + The grant.want_privileges flag was set to 1 in the + check_grant() function earlier if the TABLE_LIST object + had any associated column privileges. + */ + if (tables_used->grant.want_privilege) + { + DBUG_PRINT("qcache", ("Don't cache statement as it refers to " + "tables with column privileges.")); + thd->lex->safe_to_cache_query= 0; + DBUG_RETURN(0); + } +#endif if (tables_used->view) { DBUG_PRINT("qcache", ("view: %s db: %s", @@ -3071,7 +3088,8 @@ Query_cache::is_cacheable(THD *thd, uint32 query_len, char *query, LEX *lex, (long) lex->select_lex.options, (int) thd->variables.query_cache_type)); - if (!(table_count= process_and_count_tables(tables_used, tables_type))) + if (!(table_count= process_and_count_tables(thd, tables_used, + tables_type))) DBUG_RETURN(0); if ((thd->options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)) && diff --git a/sql/sql_cache.h b/sql/sql_cache.h index bc00f7ea629..34fc3a5c8d5 100644 --- a/sql/sql_cache.h +++ b/sql/sql_cache.h @@ -368,10 +368,12 @@ protected: If query is cacheable return number tables in query (query without tables not cached) */ - static TABLE_COUNTER_TYPE is_cacheable(THD *thd, uint32 query_len, char *query, - LEX *lex, TABLE_LIST *tables_used, - uint8 *tables_type); + LEX *lex, TABLE_LIST *tables_used, + uint8 *tables_type); + TABLE_COUNTER_TYPE process_and_count_tables(THD *thd, + TABLE_LIST *tables_used, + uint8 *tables_type); static my_bool ask_handler_allowance(THD *thd, TABLE_LIST *tables_used); public: From 7ee93c1639deef7e84cd162a0d7cff6c2cca2bc1 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 17 Aug 2007 17:11:08 -0300 Subject: [PATCH 097/194] Bug#29936 (Stored Procedure DML ignores low_priority_updates setting) This is a follow up for the patch for Bug#26162 "Trigger DML ignores low_priority_updates setting", where the stored procedure ignores the session setting of low_priority_updates. sql/lock.cc: Add late lock_type assertion. sql/sql_base.cc: Possibly downgrade lock type to the the session setting of low_priority_updates and also remove early assertion. --- sql/lock.cc | 1 + sql/sql_base.cc | 9 ++------- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/sql/lock.cc b/sql/lock.cc index f859f028504..d9e9dd31f81 100644 --- a/sql/lock.cc +++ b/sql/lock.cc @@ -857,6 +857,7 @@ static MYSQL_LOCK *get_lock_data(THD *thd, TABLE **table_ptr, uint count, if ((table=table_ptr[i])->s->tmp_table == NON_TRANSACTIONAL_TMP_TABLE) continue; lock_type= table->reginfo.lock_type; + DBUG_ASSERT (lock_type != TL_WRITE_DEFAULT); if (lock_type >= TL_WRITE_ALLOW_WRITE) { *write_lock_used=table; diff --git a/sql/sql_base.cc b/sql/sql_base.cc index e15bc1c3137..3fdf397d412 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -2255,7 +2255,6 @@ TABLE *open_table(THD *thd, TABLE_LIST *table_list, MEM_ROOT *mem_root, HASH_SEARCH_STATE state; DBUG_ENTER("open_table"); - DBUG_ASSERT (table_list->lock_type != TL_WRITE_DEFAULT); /* find a unused table in the open table cache */ if (refresh) *refresh=0; @@ -3559,11 +3558,6 @@ int open_tables(THD *thd, TABLE_LIST **start, uint *counter, uint flags) { safe_to_ignore_table= FALSE; - if (tables->lock_type == TL_WRITE_DEFAULT) - { - tables->lock_type= thd->update_lock_default; - DBUG_ASSERT (tables->lock_type >= TL_WRITE_ALLOW_WRITE); - } /* Ignore placeholders for derived tables. After derived tables processing, link to created temporary table will be put here. @@ -3708,7 +3702,8 @@ int open_tables(THD *thd, TABLE_LIST **start, uint *counter, uint flags) } if (tables->lock_type != TL_UNLOCK && ! thd->locked_tables) - tables->table->reginfo.lock_type=tables->lock_type; + tables->table->reginfo.lock_type= tables->lock_type == TL_WRITE_DEFAULT ? + thd->update_lock_default : tables->lock_type; tables->table->grant= tables->grant; process_view_routines: From 4f3c8e772329e242dd2b7c8885b1f99246b02849 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 17 Aug 2007 19:29:08 -0600 Subject: [PATCH 098/194] Bug #29307: status.test fails with different Table_locks_immediate When using --log --log-output=table, we increment Table_locks_immediate with every query. The wait_condition.inc runs a query a variable number of times, depending on server load, etc. This is a problem, when the test is checking the Table_locks_immediate value. Fix is to adjust the Table_locks_immediate value based on how many times the wait_condition query was executed. mysql-test/include/wait_condition.inc: Add a $wait_condition_reps variable, which lets the caller check how many times the wait_condition query was executed. This is used in the main.status test to adjust the value of Table_locks_immediate (it gets incremented with each query when --log --log-output=table). mysql-test/t/status.test: Adjust Table_locks_immediate value based on how many times the wait_condition query had to run. --- mysql-test/include/wait_condition.inc | 5 +++++ mysql-test/t/status.test | 30 +++++++++++++++++++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/mysql-test/include/wait_condition.inc b/mysql-test/include/wait_condition.inc index 2e6bd276aac..a41d8080c9b 100644 --- a/mysql-test/include/wait_condition.inc +++ b/mysql-test/include/wait_condition.inc @@ -17,6 +17,7 @@ # let $wait_condition= # SELECT c = 3 FROM t; # --source include/wait_condition.inc +# --echo Executed the test condition $wait_condition_reps times # # EXAMPLE # events_bugs.test, events_time_zone.test @@ -33,9 +34,13 @@ if ($wait_timeout) # calls, and default will be used instead. let $wait_timeout= 0; +# Keep track of how many times the wait condition is tested +# This is used by some tests (e.g., main.status) +let $wait_condition_reps= 0; while ($wait_counter) { let $success= `$wait_condition`; + inc $wait_condition_reps; if ($success) { let $wait_counter= 0; diff --git a/mysql-test/t/status.test b/mysql-test/t/status.test index 9fd54d4766d..6320f5fb143 100644 --- a/mysql-test/t/status.test +++ b/mysql-test/t/status.test @@ -1,3 +1,6 @@ +# This test requires that --log-output includes 'table', and the general +# log is on + # embedded server causes different stat -- source include/not_embedded.inc @@ -8,33 +11,56 @@ connect (con1,localhost,root,,); connect (con2,localhost,root,,); flush status; + +# Logging to the general query log table (--log-output=table --log) increments +# Table_locks_immediate with each query, so here Immediate becomes 1 show status like 'Table_lock%'; +# ++Immediate = 2 select * from information_schema.session_status where variable_name like 'Table_lock%'; + connection con1; +# ++Immediate = 3 SET SQL_LOG_BIN=0; --disable_warnings +# ++Immediate = 4 drop table if exists t1; --enable_warnings +# ++Immediate = 5 create table t1(n int) engine=myisam; +# Immediate + 2 = 7 insert into t1 values(1); + connection con2; +# Immediate + 2 = 9 lock tables t1 read; +# ++Immediate = 10 unlock tables; +# Immediate + 2 = 12 lock tables t1 read; + connection con1; +# ++Immediate = 13 let $ID= `select connection_id()`; +# ++Immediate = 14 (Not +2, because this increments Table_locks_waited) --send update t1 set n = 3; + connection con2; # wait for the other query to start executing let $wait_condition= select 1 from INFORMATION_SCHEMA.PROCESSLIST where ID = $ID and STATE = "Locked"; +# ++Immediate = 15 + $wait_condition_reps (wait_condition.inc does one select +# in addition to the wait condition) --source include/wait_condition.inc +# ++Immediate = 16 + $wait_condition_reps unlock tables; + connection con1; reap; -show status like 'Table_lock%'; -select * from information_schema.session_status where variable_name like 'Table_lock%'; +# ++Immediate = 17 + $wait_condition_reps +show status like 'Table_locks_waited'; +# ++Immediate = 18 + $wait_condition_reps +eval select variable_value - $wait_condition_reps as Immediate from information_schema.session_status where variable_name like 'Table_locks_immediate'; drop table t1; disconnect con2; From 0ece5608fc93d761387a0c081a255d06646a691a Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 18 Aug 2007 02:28:08 -0600 Subject: [PATCH 099/194] Bug #29307: status.test fails with different Table_locks_immediate Finish premature patch which was accidentally pushed; remove debugging info and correct the test. mysql-test/r/status.result: Correct test results mysql-test/t/status.test: Disable query log for one statement, and correct some comments --- mysql-test/r/status.result | 9 +++------ mysql-test/t/status.test | 12 +++++++----- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/mysql-test/r/status.result b/mysql-test/r/status.result index 8f10625744b..0d49deb7cc8 100644 --- a/mysql-test/r/status.result +++ b/mysql-test/r/status.result @@ -16,14 +16,11 @@ unlock tables; lock tables t1 read; update t1 set n = 3; unlock tables; -show status like 'Table_lock%'; +show status like 'Table_locks_waited'; Variable_name Value -Table_locks_immediate 17 Table_locks_waited 1 -select * from information_schema.session_status where variable_name like 'Table_lock%'; -VARIABLE_NAME VARIABLE_VALUE -TABLE_LOCKS_IMMEDIATE 18 -TABLE_LOCKS_WAITED 1 +Immediate +17 drop table t1; select 1; 1 diff --git a/mysql-test/t/status.test b/mysql-test/t/status.test index 6320f5fb143..cade1d06e38 100644 --- a/mysql-test/t/status.test +++ b/mysql-test/t/status.test @@ -49,18 +49,20 @@ update t1 set n = 3; connection con2; # wait for the other query to start executing let $wait_condition= select 1 from INFORMATION_SCHEMA.PROCESSLIST where ID = $ID and STATE = "Locked"; -# ++Immediate = 15 + $wait_condition_reps (wait_condition.inc does one select -# in addition to the wait condition) +# Immediate = 14 + $wait_condition_reps ($wait_timeout is 0, so no extra select +# is done inside wait_condition.inc) --source include/wait_condition.inc -# ++Immediate = 16 + $wait_condition_reps +# ++Immediate = 15 + $wait_condition_reps unlock tables; connection con1; reap; -# ++Immediate = 17 + $wait_condition_reps +# ++Immediate = 16 + $wait_condition_reps show status like 'Table_locks_waited'; -# ++Immediate = 18 + $wait_condition_reps +# ++Immediate = 17 + $wait_condition_reps +--disable_query_log eval select variable_value - $wait_condition_reps as Immediate from information_schema.session_status where variable_name like 'Table_locks_immediate'; +--enable_query_log drop table t1; disconnect con2; From 29ee5ed0a04a2db4e5e23a359a3acf9b4e474ab0 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 20 Aug 2007 11:23:08 +0500 Subject: [PATCH 100/194] Bug#27629 Possible security flaw in INFORMATION_SCHEMA and SHOW statements added SUPER_ACL check for I_S.TRIGGERS mysql-test/r/information_schema.result: result fix mysql-test/r/information_schema_db.result: result fix mysql-test/t/information_schema.test: test case sql/sql_show.cc: added SUPER_ACL check for I_S.TRIGGERS --- mysql-test/r/information_schema.result | 26 ++++++++++++++++++++++- mysql-test/r/information_schema_db.result | 2 -- mysql-test/t/information_schema.test | 26 +++++++++++++++++++++++ sql/sql_show.cc | 10 +++++++-- 4 files changed, 59 insertions(+), 5 deletions(-) diff --git a/mysql-test/r/information_schema.result b/mysql-test/r/information_schema.result index 9d0e41b341a..612e744a0f4 100644 --- a/mysql-test/r/information_schema.result +++ b/mysql-test/r/information_schema.result @@ -180,7 +180,6 @@ t1 a select show columns from mysqltest.t1; Field Type Null Key Default Extra a int(11) YES NULL -b varchar(30) YES MUL NULL select table_name, column_name, privileges from information_schema.columns where table_schema = 'mysqltest' and table_name = 'v1'; table_name column_name privileges @@ -1330,4 +1329,29 @@ alter database; 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 '' at line 1 alter database test; 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 '' at line 1 +create database mysqltest; +create table mysqltest.t1(a int, b int, c int); +create trigger mysqltest.t1_ai after insert on mysqltest.t1 +for each row set @a = new.a + new.b + new.c; +grant select(b) on mysqltest.t1 to mysqltest_1@localhost; +select trigger_name from information_schema.triggers +where event_object_table='t1'; +trigger_name +t1_ai +show triggers from mysqltest; +Trigger Event Table Statement Timing Created sql_mode Definer +t1_ai INSERT t1 set @a = new.a + new.b + new.c AFTER NULL root@localhost +show columns from t1; +Field Type Null Key Default Extra +b int(11) YES NULL +select column_name from information_schema.columns where table_name='t1'; +column_name +b +show triggers; +Trigger Event Table Statement Timing Created sql_mode Definer +select trigger_name from information_schema.triggers +where event_object_table='t1'; +trigger_name +drop user mysqltest_1@localhost; +drop database mysqltest; End of 5.0 tests. diff --git a/mysql-test/r/information_schema_db.result b/mysql-test/r/information_schema_db.result index 2d330dda333..dd1f0295277 100644 --- a/mysql-test/r/information_schema_db.result +++ b/mysql-test/r/information_schema_db.result @@ -140,13 +140,11 @@ create view v2 as select f1 from testdb_1.v1; create view v4 as select f1,f2 from testdb_1.v3; show fields from testdb_1.v5; Field Type Null Key Default Extra -f1 char(4) YES NULL show create view testdb_1.v5; View Create View v5 CREATE ALGORITHM=UNDEFINED DEFINER=`testdb_1`@`localhost` SQL SECURITY DEFINER VIEW `testdb_1`.`v5` AS select `testdb_1`.`t1`.`f1` AS `f1` from `testdb_1`.`t1` show fields from testdb_1.v6; Field Type Null Key Default Extra -f1 char(4) YES NULL show create view testdb_1.v6; View Create View v6 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `testdb_1`.`v6` AS select `testdb_1`.`t1`.`f1` AS `f1` from `testdb_1`.`t1` diff --git a/mysql-test/t/information_schema.test b/mysql-test/t/information_schema.test index 6cf4ad8f576..7637a027e8f 100644 --- a/mysql-test/t/information_schema.test +++ b/mysql-test/t/information_schema.test @@ -1045,4 +1045,30 @@ drop table t1,t2; alter database; --error ER_PARSE_ERROR alter database test; + +# +# Bug#27629 Possible security flaw in INFORMATION_SCHEMA and SHOW statements +# + +create database mysqltest; +create table mysqltest.t1(a int, b int, c int); +create trigger mysqltest.t1_ai after insert on mysqltest.t1 + for each row set @a = new.a + new.b + new.c; +grant select(b) on mysqltest.t1 to mysqltest_1@localhost; + +select trigger_name from information_schema.triggers +where event_object_table='t1'; +show triggers from mysqltest; + +connect (con27629,localhost,mysqltest_1,,mysqltest); +show columns from t1; +select column_name from information_schema.columns where table_name='t1'; + +show triggers; +select trigger_name from information_schema.triggers +where event_object_table='t1'; +connection default; +drop user mysqltest_1@localhost; +drop database mysqltest; + --echo End of 5.0 tests. diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 05a847b3830..e21de81fbdb 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -2684,8 +2684,7 @@ static int get_schema_column_record(THD *thd, TABLE_LIST *tables, col_access= get_column_grant(thd, &tables->grant, base_name, file_name, field->field_name) & COL_ACLS; - if (lex->orig_sql_command != SQLCOM_SHOW_FIELDS && - !tables->schema_table && !col_access) + if (!tables->schema_table && !col_access) continue; end= tmp; for (uint bitnr=0; col_access ; col_access>>=1,bitnr++) @@ -3381,6 +3380,12 @@ static int get_schema_triggers_record(THD *thd, TABLE_LIST *tables, { Table_triggers_list *triggers= tables->table->triggers; int event, timing; + +#ifndef NO_EMBEDDED_ACCESS_CHECKS + if (!(thd->security_ctx->master_access & SUPER_ACL)) + goto ret; +#endif + for (event= 0; event < (int)TRG_EVENT_MAX; event++) { for (timing= 0; timing < (int)TRG_ACTION_MAX; timing++) @@ -3407,6 +3412,7 @@ static int get_schema_triggers_record(THD *thd, TABLE_LIST *tables, } } } +ret: DBUG_RETURN(0); } From 78d62e87d9e1174612e20357570ed8280e4dfd58 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 20 Aug 2007 13:46:42 +0200 Subject: [PATCH 101/194] Only install second master db if using second master --- mysql-test/mysql-test-run.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 5c362cddfa1..ff3f82ed531 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -2911,7 +2911,7 @@ sub mysql_install_db () { install_db('master', $master->[0]->{'path_myddir'}); - if ($max_master_num) + if ($max_master_num > 1) { copy_install_db('master', $master->[1]->{'path_myddir'}); } From 03216bb85b234dc546fc1e7c8f65474bb9d34ff2 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 20 Aug 2007 15:12:14 +0200 Subject: [PATCH 102/194] Make it possible to pass mysql-test-run.pl test cases to run also on the . format --- mysql-test/lib/mtr_cases.pl | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/mysql-test/lib/mtr_cases.pl b/mysql-test/lib/mtr_cases.pl index 2becb7f9865..ba7fcb8ce10 100644 --- a/mysql-test/lib/mtr_cases.pl +++ b/mysql-test/lib/mtr_cases.pl @@ -53,7 +53,8 @@ sub collect_test_cases ($) { my $found= 0; foreach my $test ( @$cases ) { - if ( mtr_match_extension($test->{'name'}, $tname) ) + if ( $test->{'name'} eq $tname || + mtr_match_extension($test->{'name'}, $tname) ) { $found= 1; } @@ -192,8 +193,9 @@ sub collect_one_suite($$) if ( @::opt_cases ) { # Collect in specified order, no sort - foreach my $tname ( @::opt_cases ) + foreach my $tname2 ( @::opt_cases ) { + my $tname= $tname2; # Don't modify @::opt_cases ! my $elem= undef; my $component_id= undef; @@ -202,6 +204,9 @@ sub collect_one_suite($$) $tname = basename($tname); + # Get rid of suite part + $tname =~ s/^$suite\.//; + # Check if the extenstion has been specified. if ( mtr_match_extension($tname, "test") ) From 539d58a36aac78f23c670f5b785fe9e4a3d48655 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 20 Aug 2007 11:00:51 -0600 Subject: [PATCH 103/194] Bug #27694: mysqlhotcopy & p5-DBD-mysql51-4.003 Use "SHOW TABLES FROM `db`" instead of $dbh->tables() in the get_list_of_tables() routine. The symptom is that, when used with recent versions of DBD::mysql, mysqlhotcopy uses a double-qualified table name, for example: Invalid db.table name 'test.test`.`x' at /usr/bin/mysqlhotcopy line 855. This is caused by a change in DBD::mysql. See this diff: http://svn.perl.org/viewcvs/modules/DBD-mysql/trunk/lib/DBD/mysql.pm?r1=9183&r2=9188 Basically, older DBD::mysql implemented a limited ->table_info method; now the full method is implemented, and as a result DBI's ->tables() method has access to the schema value, so it uses it. scripts/mysqlhotcopy.sh: Use "SHOW TABLES FROM `db`" instead of $dbh->tables() in get_list_of_tables(). DBI's ->tables() method calls "SHOW TABLES" under the hood, and then quotes the names and (depending on DBD::mysql version) adds the schema name, too. mysqlhotcopy doesn't want the schema name or the quotes, so it's all around better to just call "SHOW TABLES" itself. --- scripts/mysqlhotcopy.sh | 30 +++++++----------------------- 1 file changed, 7 insertions(+), 23 deletions(-) diff --git a/scripts/mysqlhotcopy.sh b/scripts/mysqlhotcopy.sh index 61cd59457d1..6ad5c77b954 100644 --- a/scripts/mysqlhotcopy.sh +++ b/scripts/mysqlhotcopy.sh @@ -821,30 +821,14 @@ sub get_raid_dirs { sub get_list_of_tables { my ( $db ) = @_; - # "use database" cannot cope with database names containing spaces - # so create a new connection + my $tables = + eval { + $dbh->selectall_arrayref('SHOW TABLES FROM ' . + $dbh->quote_identifier($db)) + } || []; + warn "Unable to retrieve list of tables in $db: $@" if $@; - my $dbh = DBI->connect("dbi:mysql:${db}${dsn};mysql_read_default_group=mysqlhotcopy", - $opt{user}, $opt{password}, - { - RaiseError => 1, - PrintError => 0, - AutoCommit => 1, - }); - - my @dbh_tables = eval { $dbh->tables() }; - - ## Remove quotes around table names - my $quote = $dbh->get_info(29); # SQL_IDENTIFIER_QUOTE_CHAR - if ($quote) { - foreach (@dbh_tables) { - s/^$quote(.*)$quote$/$1/; - s/$quote$quote/$quote/g; - } - } - - $dbh->disconnect(); - return @dbh_tables; + return (map { $_->[0] } @$tables); } sub quote_names { From c8b9315db3fbdc0a26097c3451ebe89e32c49d45 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 20 Aug 2007 13:03:50 -0700 Subject: [PATCH 104/194] Extending tests for detach (found a memory issue in it, this fixes that and now tests it). client/mysqlslap.c: Fix memory allocation mysql-test/t/mysqlslap.test: Extend test for --detach --- client/mysqlslap.c | 7 +++++++ mysql-test/t/mysqlslap.test | 2 ++ 2 files changed, 9 insertions(+) diff --git a/client/mysqlslap.c b/client/mysqlslap.c index 43d8b1b1560..2811011a1ef 100644 --- a/client/mysqlslap.c +++ b/client/mysqlslap.c @@ -1804,6 +1804,13 @@ limit_not_met: { mysql_close(mysql); + if (!(mysql= mysql_init(NULL))) + { + fprintf(stderr,"%s: mysql_init() failed ERROR : %s\n", + my_progname, mysql_error(mysql)); + exit(0); + } + if (slap_connect(mysql)) goto end; } diff --git a/mysql-test/t/mysqlslap.test b/mysql-test/t/mysqlslap.test index 192aefb0e03..dffa226d101 100644 --- a/mysql-test/t/mysqlslap.test +++ b/mysql-test/t/mysqlslap.test @@ -38,3 +38,5 @@ --exec $MYSQL_SLAP --only-print --delimiter=";" --query="select * from t1;select * from t2" --create="CREATE TABLE t1 (id int, name varchar(64)); create table t2(foo1 varchar(32), foo2 varchar(32)); INSERT INTO t1 VALUES (1, 'This is a test'); insert into t2 values ('test', 'test2')" --engine="heap,myisam" --post-query="SHOW TABLES" --pre-query="SHOW TABLES"; --exec $MYSQL_SLAP --only-print --delimiter=";" --query="select * from t1;select * from t2" --create="CREATE TABLE t1 (id int, name varchar(64)); create table t2(foo1 varchar(32), foo2 varchar(32)); INSERT INTO t1 VALUES (1, 'This is a test'); insert into t2 values ('test', 'test2')" --engine="heap,myisam" --post-query="SHOW TABLES" --pre-query="SHOW TABLES" --number-of-queries=6 --commit=1; + +--exec $MYSQL_SLAP --silent --concurrency=5 --iterations=1 --number-int-cols=2 --number-char-cols=3 --auto-generate-sql --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=write --detach=2 From 7c3d5bc5c49e054bd48f632f95a228f426394977 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 21 Aug 2007 01:39:39 +0500 Subject: [PATCH 105/194] Fixed bug #30287. The server created temporary tables for filesort in the working directory instead of the specified tmpdir directory. sql/item.cc: Fixed bug #30287. The Item_field::set_field method has been modified to reset the any_privileges flag to false in case of system temporary table. This modification prevents the server from unnecessary checking of user privileges to access system temporary tables. sql/sql_select.cc: Fixed bug #30287. Bugfix for #29015 has been removed: TABLE_SHARE::table_name of system temporary tables contains full path to table file basename again. sql/sql_view.cc: Fixed bug #30287. Commentary has been added. --- sql/item.cc | 2 ++ sql/sql_select.cc | 19 ++++++++----------- sql/sql_view.cc | 6 ++++++ 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/sql/item.cc b/sql/item.cc index 8ce77e9cd4f..66379d5dcf9 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -1765,6 +1765,8 @@ void Item_field::set_field(Field *field_par) unsigned_flag=test(field_par->flags & UNSIGNED_FLAG); collation.set(field_par->charset(), field_par->derivation()); fixed= 1; + if (field->table->s->tmp_table == SYSTEM_TMP_TABLE) + any_privileges= 0; } diff --git a/sql/sql_select.cc b/sql/sql_select.cc index ac8dc84f118..6b0f823f1ce 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -9169,7 +9169,7 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List &fields, bool using_unique_constraint= 0; bool use_packed_rows= 0; bool not_all_columns= !(select_options & TMP_TABLE_ALL_COLUMNS); - char *tmpname, *tmppath, path[FN_REFLEN], table_name[NAME_LEN+1]; + char *tmpname,path[FN_REFLEN]; byte *pos,*group_buff; uchar *null_flags; Field **reg_field, **from_field, **default_field; @@ -9192,12 +9192,12 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List &fields, temp_pool_slot = bitmap_set_next(&temp_pool); if (temp_pool_slot != MY_BIT_NONE) // we got a slot - sprintf(table_name, "%s_%lx_%i", tmp_file_prefix, + sprintf(path, "%s_%lx_%i", tmp_file_prefix, current_pid, temp_pool_slot); else { /* if we run out of slots or we are not using tempool */ - sprintf(table_name, "%s%lx_%lx_%x", tmp_file_prefix,current_pid, + sprintf(path,"%s%lx_%lx_%x", tmp_file_prefix,current_pid, thd->thread_id, thd->tmp_table++); } @@ -9205,8 +9205,8 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List &fields, No need to change table name to lower case as we are only creating MyISAM or HEAP tables here */ - fn_format(path, table_name, mysql_tmpdir, "", - MY_REPLACE_EXT|MY_UNPACK_FILENAME); + fn_format(path, path, mysql_tmpdir, "", MY_REPLACE_EXT|MY_UNPACK_FILENAME); + if (group) { @@ -9251,8 +9251,7 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List &fields, sizeof(*key_part_info)*(param->group_parts+1), ¶m->start_recinfo, sizeof(*param->recinfo)*(field_count*2+4), - &tmppath, (uint) strlen(path)+1, - &tmpname, (uint) strlen(table_name)+1, + &tmpname, (uint) strlen(path)+1, &group_buff, group && ! using_unique_constraint ? param->group_length : 0, NullS)) @@ -9270,8 +9269,7 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List &fields, DBUG_RETURN(NULL); /* purecov: inspected */ } param->items_to_copy= copy_func; - strmov(tmppath, path); - strmov(tmpname, table_name); + strmov(tmpname,path); /* make table according to fields */ bzero((char*) table,sizeof(*table)); @@ -9297,8 +9295,7 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List &fields, table->s= &table->share_not_to_be_used; table->s->blob_field= blob_field; - table->s->table_name= tmpname; - table->s->path= tmppath; + table->s->table_name= table->s->path= tmpname; table->s->db= ""; table->s->blob_ptr_size= mi_portable_sizeof_char_ptr; table->s->tmp_table= NON_TRANSACTIONAL_TMP_TABLE; diff --git a/sql/sql_view.cc b/sql/sql_view.cc index 7857ba267c5..56d7a3f8a9d 100644 --- a/sql/sql_view.cc +++ b/sql/sql_view.cc @@ -397,7 +397,13 @@ bool mysql_create_view(THD *thd, TABLE_LIST *views, { Item_field *field; if ((field= item->filed_for_view_update())) + { + /* + any_privileges may be reset later by the Item_field::set_field + method in case of a system temporary table. + */ field->any_privileges= 1; + } } } #endif From 5f40dafcd335fff4b4392cc6192a6eb074d491bd Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 20 Aug 2007 17:50:42 -0600 Subject: [PATCH 106/194] Fixed 5.0 -> 5.1 merge --- mysql-test/include/handler.inc | 2 +- mysql-test/r/handler_innodb.result | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/mysql-test/include/handler.inc b/mysql-test/include/handler.inc index 7d7ac050682..a5b8c6cc7c9 100644 --- a/mysql-test/include/handler.inc +++ b/mysql-test/include/handler.inc @@ -471,7 +471,7 @@ drop table if exists t1; --disable_warnings drop table if exists t1; --enable_warnings -create table t1 (a int) ENGINE=MEMORY; +eval create table t1 (a int) ENGINE=$other_engine_type; --echo --> client 2 connection con2; --error 1031 diff --git a/mysql-test/r/handler_innodb.result b/mysql-test/r/handler_innodb.result index 1bd50612a3f..81d1e26f8d0 100644 --- a/mysql-test/r/handler_innodb.result +++ b/mysql-test/r/handler_innodb.result @@ -515,3 +515,10 @@ ERROR 42S02: Table 'test.t1' doesn't exist drop table if exists t1; Warnings: Note 1051 Unknown table 't1' +drop table if exists t1; +create table t1 (a int) ENGINE=MEMORY; +--> client 2 +handler t1 open; +ERROR HY000: Table storage engine for 't1' doesn't have this option +--> client 1 +drop table t1; From 3a5a0ea3928d24a8cd0a45691de6d917672d63c6 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 21 Aug 2007 13:43:09 +0200 Subject: [PATCH 107/194] Bug#30269 Query cache eats memory Although the query cache doesn't support retrieval of statements containing column level access control, it was still possible to cache such statements thus wasting memory. This patch extends the access control check on the target tables to avoid caching a statement with column level restrictions. Views are excepted and can be cached but only retrieved by super user account. mysql-test/t/query_cache_with_views.test: Rename: mysql-test/t/view_query_cache.test -> mysql-test/t/query_cache_with_views.test mysql-test/r/query_cache_with_views.result: Rename: mysql-test/r/view_query_cache.result -> mysql-test/r/query_cache_with_views.result mysql-test/r/query_cache.result: Modified test case to allow caching of views mysql-test/t/query_cache.test: Modified test case to allow caching of views sql/sql_cache.cc: Allow caching of views --- mysql-test/r/query_cache.result | 13 +++++++++---- ...y_cache.result => query_cache_with_views.result} | 0 mysql-test/t/query_cache.test | 5 ++++- ...query_cache.test => query_cache_with_views.test} | 0 sql/sql_cache.cc | 13 ++++++++++++- 5 files changed, 25 insertions(+), 6 deletions(-) rename mysql-test/r/{view_query_cache.result => query_cache_with_views.result} (100%) rename mysql-test/t/{view_query_cache.test => query_cache_with_views.test} (100%) diff --git a/mysql-test/r/query_cache.result b/mysql-test/r/query_cache.result index ecf7df2d2ae..4bae61ea494 100644 --- a/mysql-test/r/query_cache.result +++ b/mysql-test/r/query_cache.result @@ -1503,10 +1503,11 @@ a (select count(*) from t2) 4 0 drop table t1,t2; DROP DATABASE IF EXISTS bug30269; +FLUSH STATUS; CREATE DATABASE bug30269; USE bug30269; CREATE TABLE test1 (id int, name varchar(23)); -CREATE VIEW view1 AS SELECT id FROM test1; +CREATE VIEW view1 AS SELECT * FROM test1; INSERT INTO test1 VALUES (5, 'testit'); GRANT SELECT (id) ON TABLE bug30269.test1 TO 'bug30269'@'localhost'; GRANT SELECT ON TABLE bug30269.view1 TO 'bug30269'@'localhost'; @@ -1515,15 +1516,19 @@ USE bug30269; show status like 'Qcache_queries_in_cache'; Variable_name Value Qcache_queries_in_cache 0 +# Select statement not stored in query cache because of column privileges. SELECT id FROM test1 WHERE id>2; id 5 -SELECT id FROM view1 WHERE id>2; -id -5 show status like 'Qcache_queries_in_cache'; Variable_name Value Qcache_queries_in_cache 0 +SELECT id FROM view1 WHERE id>2; +id +5 +show status like 'Qcache_queries_in_cache'; +Variable_name Value +Qcache_queries_in_cache 1 DROP DATABASE bug30269; DROP USER 'bug30269'@'localhost'; set GLOBAL query_cache_type=default; diff --git a/mysql-test/r/view_query_cache.result b/mysql-test/r/query_cache_with_views.result similarity index 100% rename from mysql-test/r/view_query_cache.result rename to mysql-test/r/query_cache_with_views.result diff --git a/mysql-test/t/query_cache.test b/mysql-test/t/query_cache.test index 7f4d4227f41..9d2e05fb874 100644 --- a/mysql-test/t/query_cache.test +++ b/mysql-test/t/query_cache.test @@ -1103,10 +1103,11 @@ disconnect user3; --disable_warnings DROP DATABASE IF EXISTS bug30269; --enable_warnings +FLUSH STATUS; CREATE DATABASE bug30269; USE bug30269; CREATE TABLE test1 (id int, name varchar(23)); -CREATE VIEW view1 AS SELECT id FROM test1; +CREATE VIEW view1 AS SELECT * FROM test1; INSERT INTO test1 VALUES (5, 'testit'); GRANT SELECT (id) ON TABLE bug30269.test1 TO 'bug30269'@'localhost'; GRANT SELECT ON TABLE bug30269.view1 TO 'bug30269'@'localhost'; @@ -1115,7 +1116,9 @@ connect (bug30269, localhost, bug30269,,); connection bug30269; USE bug30269; show status like 'Qcache_queries_in_cache'; +--echo # Select statement not stored in query cache because of column privileges. SELECT id FROM test1 WHERE id>2; +show status like 'Qcache_queries_in_cache'; SELECT id FROM view1 WHERE id>2; show status like 'Qcache_queries_in_cache'; diff --git a/mysql-test/t/view_query_cache.test b/mysql-test/t/query_cache_with_views.test similarity index 100% rename from mysql-test/t/view_query_cache.test rename to mysql-test/t/query_cache_with_views.test diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc index 4a5bb263a5f..cc5b4276c82 100644 --- a/sql/sql_cache.cc +++ b/sql/sql_cache.cc @@ -3007,8 +3007,19 @@ Query_cache::process_and_count_tables(THD *thd, TABLE_LIST *tables_used, The grant.want_privileges flag was set to 1 in the check_grant() function earlier if the TABLE_LIST object had any associated column privileges. + + We need to check that the TABLE_LIST object isn't part + of a VIEW definition because we want to be able to cache + views. + + TODO: Although it is possible to cache views, the privilege + check on view tables always fall back on column privileges + even if there are more generic table privileges. Thus it isn't + currently possible to retrieve cached view-tables unless the + client has the super user privileges. */ - if (tables_used->grant.want_privilege) + if (tables_used->grant.want_privilege && + tables_used->belong_to_view == NULL) { DBUG_PRINT("qcache", ("Don't cache statement as it refers to " "tables with column privileges.")); From 700c3786188e8e2c112615841d3be77e3d8e0f59 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 21 Aug 2007 17:55:49 +0500 Subject: [PATCH 108/194] Bug#27629 Possible security flaw in INFORMATION_SCHEMA and SHOW statements(addon for 5.1) added TRIGGER_ACL check for I_S.TRIGGERS mysql-test/r/information_schema.result: result fix --- mysql-test/r/information_schema.result | 6 +++--- sql/sql_show.cc | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/mysql-test/r/information_schema.result b/mysql-test/r/information_schema.result index 1ad30824214..e87b46ac90f 100644 --- a/mysql-test/r/information_schema.result +++ b/mysql-test/r/information_schema.result @@ -1419,8 +1419,8 @@ where event_object_table='t1'; trigger_name t1_ai show triggers from mysqltest; -Trigger Event Table Statement Timing Created sql_mode Definer -t1_ai INSERT t1 set @a = new.a + new.b + new.c AFTER NULL root@localhost +Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation +t1_ai INSERT t1 set @a = new.a + new.b + new.c AFTER NULL root@localhost latin1 latin1_swedish_ci latin1_swedish_ci show columns from t1; Field Type Null Key Default Extra b int(11) YES NULL @@ -1428,7 +1428,7 @@ select column_name from information_schema.columns where table_name='t1'; column_name b show triggers; -Trigger Event Table Statement Timing Created sql_mode Definer +Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation select trigger_name from information_schema.triggers where event_object_table='t1'; trigger_name diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 9c4bb1e0c0b..eebce82be62 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -4351,7 +4351,7 @@ static int get_schema_triggers_record(THD *thd, TABLE_LIST *tables, int event, timing; #ifndef NO_EMBEDDED_ACCESS_CHECKS - if (!(thd->security_ctx->master_access & SUPER_ACL)) + if (check_table_access(thd, TRIGGER_ACL, tables, 1)) goto ret; #endif From 42aa480b4345aa920e0ff60001b09eb52c9c04c5 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 21 Aug 2007 18:59:42 +0500 Subject: [PATCH 109/194] compiler warning fix --- sql/sql_show.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sql/sql_show.cc b/sql/sql_show.cc index e21de81fbdb..bba5eeefc73 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -3412,7 +3412,9 @@ static int get_schema_triggers_record(THD *thd, TABLE_LIST *tables, } } } +#ifndef NO_EMBEDDED_ACCESS_CHECKS ret: +#endif DBUG_RETURN(0); } From 891b1659fcd0d0a65b2a6d8ccd40e9225b76bb88 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 22 Aug 2007 18:15:54 +0500 Subject: [PATCH 110/194] Fixed bug #30201. Killing a SELECT query with KILL QUERY or KILL CONNECTION causes a server crash if the query cache is enabled. Normal evaluation of a query may be interrupted by the KILL QUERY/CONNECTION statement, in this case the mysql_execute_command function returns TRUE, and the thd->killed flag has true value. In this case the result of the query may be cached incompletely (omitting call to query_cache_insert inside the net_real_write function), and next call to query_cache_end_of_result may lead to server crash. Thus, the query_cache_end_of_result function has been modified to abort query cache in the case of killed thread. sql/sql_cache.cc: Fixed bug #30201. The query_cache_end_of_result function has been modified to abort query cache in the case of query execution failure. Also this function has been modified to remove incomplete query block. --- sql/sql_cache.cc | 45 +++++++++++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc index 33d658ce6a1..0d8ef568550 100644 --- a/sql/sql_cache.cc +++ b/sql/sql_cache.cc @@ -710,6 +710,12 @@ void query_cache_end_of_result(THD *thd) if (thd->net.query_cache_query == 0) DBUG_VOID_RETURN; + if (thd->killed) + { + query_cache_abort(&thd->net); + DBUG_VOID_RETURN; + } + #ifdef EMBEDDED_LIBRARY query_cache_insert(&thd->net, (char*)thd, emb_count_querycache_size(thd)); @@ -727,27 +733,30 @@ void query_cache_end_of_result(THD *thd) DUMP(&query_cache); BLOCK_LOCK_WR(query_block); Query_cache_query *header= query_block->query(); - Query_cache_block *last_result_block= header->result()->prev; - ulong allign_size= ALIGN_SIZE(last_result_block->used); - ulong len= max(query_cache.min_allocation_unit, allign_size); + Query_cache_block *last_result_block; + ulong allign_size; + ulong len; + + if (header->result() == 0) + { + DBUG_PRINT("error", ("End of data with no result blocks; " + "Query '%s' removed from cache.", header->query())); + /* + Extra safety: empty result should not happen in the normal call + to this function. In the release version that query should be ignored + and removed from QC. + */ + DBUG_ASSERT(0); + query_cache.free_query(query_block); + goto end; + } + + last_result_block= header->result()->prev; + allign_size= ALIGN_SIZE(last_result_block->used); + len= max(query_cache.min_allocation_unit, allign_size); if (last_result_block->length >= query_cache.min_allocation_unit + len) query_cache.split_block(last_result_block,len); -#ifndef DBUG_OFF - if (header->result() == 0) - { - DBUG_PRINT("error", ("end of data whith no result. query '%s'", - header->query())); - query_cache.wreck(__LINE__, ""); - - /* - We do not need call of BLOCK_UNLOCK_WR(query_block); here because - query_cache.wreck() switched query cache off but left content - untouched for investigation (it is debugging method). - */ - goto end; - } -#endif header->found_rows(current_thd->limit_found_rows); header->result()->type= Query_cache_block::RESULT; header->writer(0); From edf4fccf98ce701a984e13e2c7bd174a15226ed4 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 22 Aug 2007 16:18:27 +0300 Subject: [PATCH 111/194] Removed a test which output may differ depending on machine load. --- mysql-test/r/status.result | 2 -- mysql-test/t/status.test | 4 ---- 2 files changed, 6 deletions(-) diff --git a/mysql-test/r/status.result b/mysql-test/r/status.result index 0d49deb7cc8..8a2c3ae344e 100644 --- a/mysql-test/r/status.result +++ b/mysql-test/r/status.result @@ -19,8 +19,6 @@ unlock tables; show status like 'Table_locks_waited'; Variable_name Value Table_locks_waited 1 -Immediate -17 drop table t1; select 1; 1 diff --git a/mysql-test/t/status.test b/mysql-test/t/status.test index cade1d06e38..7fd995e70c7 100644 --- a/mysql-test/t/status.test +++ b/mysql-test/t/status.test @@ -59,10 +59,6 @@ connection con1; reap; # ++Immediate = 16 + $wait_condition_reps show status like 'Table_locks_waited'; -# ++Immediate = 17 + $wait_condition_reps ---disable_query_log -eval select variable_value - $wait_condition_reps as Immediate from information_schema.session_status where variable_name like 'Table_locks_immediate'; ---enable_query_log drop table t1; disconnect con2; From 57e4f87d4a4033e91b60fb0dea3422aa571eb894 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 22 Aug 2007 17:25:31 +0200 Subject: [PATCH 112/194] Correct an erroneous manual merge. sql/sql_yacc.yy: Correct an erroneous manual merge, which had brought a duplicate line - remove one. --- sql/sql_yacc.yy | 1 - 1 file changed, 1 deletion(-) diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 8c3ad9a6300..88d8c4346ec 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -4581,7 +4581,6 @@ row_types: | DYNAMIC_SYM { $$= ROW_TYPE_DYNAMIC; } | COMPRESSED_SYM { $$= ROW_TYPE_COMPRESSED; } | REDUNDANT_SYM { $$= ROW_TYPE_REDUNDANT; } - | COMPACT_SYM { $$= ROW_TYPE_COMPACT; } | COMPACT_SYM { $$= ROW_TYPE_COMPACT; } | PAGE_SYM { $$= ROW_TYPE_PAGE; } ; From b0ea3bd941111ab0fe47af72f9f3f1a0a28828c4 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 22 Aug 2007 17:32:35 +0200 Subject: [PATCH 113/194] Raise the version number to 5.1.23, because we already split off a tree for 5.1.22 to receive only selected fixes. --- configure.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.in b/configure.in index b89d73cbbae..8a85ef72ac8 100644 --- a/configure.in +++ b/configure.in @@ -10,7 +10,7 @@ AC_CANONICAL_SYSTEM # # When changing major version number please also check switch statement # in mysqlbinlog::check_master_version(). -AM_INIT_AUTOMAKE(mysql, 5.1.22-beta) +AM_INIT_AUTOMAKE(mysql, 5.1.23-beta) AM_CONFIG_HEADER([include/config.h:config.h.in]) PROTOCOL_VERSION=10 From fb1be0f1e595ec9208cb508a65d60464710c9b4e Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 22 Aug 2007 11:05:35 -0600 Subject: [PATCH 114/194] Bug#30237 (Performance regression in boolean expressions) This is a performance bug, related to the parsing or 'OR' and 'AND' boolean expressions. Let N be the number of expressions involved in a OR (respectively AND). When N=1 For example, "select 1" involve only 1 term: there is no OR operator. In 4.0 and 4.1, parsing expressions not involving OR had no overhead. In 5.0, parsing adds some overhead, with Select->expr_list. With this patch, the overhead introduced in 5.0 has been removed, so that performances for N=1 should be identical to the 4.0 performances, which are optimal (there is no code executed at all) The overhead in 5.0 was in fact affecting significantly some operations. For example, loading 1 Million rows into a table with INSERTs, for a table that has 100 columns, leads to parsing 100 Millions of expressions, which means that the overhead related to Select->expr_list is executed 100 Million times ... Considering that N=1 is by far the most probable expression, this case should be optimal. When N=2 For example, "select a OR b" involves 2 terms in the OR operator. In 4.0 and 4.1, parsing expressions involving 2 terms created 1 Item_cond_or node, which is the expected result. In 5.0, parsing these expression also produced 1 node, but with some extra overhead related to Select->expr_list : creating 1 list in Select->expr_list and another in Item_cond::list is inefficient. With this patch, the overhead introduced in 5.0 has been removed so that performances for N=2 should be identical to the 4.0 performances. Note that the memory allocation uses the new (thd->mem_root) syntax directly. The cost of "is_cond_or" is estimated to be neglectable: the real problem of the performance degradation comes from unneeded memory allocations. When N>=3 For example, "select a OR b OR c ...", which involves 3 or more terms. In 4.0 and 4.1, the parser had no significant cost overhead, but produced an Item tree which is difficult to evaluate / optimize during runtime. In 5.0, the parser produces a better Item tree, using the Item_cond constructor that accepts a list of children directly, but at an extra cost related to Select->expr_list. With this patch, the code is implemented to take the best of the two implementations: - there is no overhead with Select->expr_list - the Item tree generated is optimized and flattened. This is achieved by adding children nodes into the Item tree directly, with Item_cond::add(), which avoids the need for temporary lists and memory allocation Note that this patch also provide an extra optimization, that the previous code in 5.0 did not provide: expressions are flattened in the Item tree, based on what the expression already parsed is, and not based on the order in which rules are reduced. For example : "(a OR b) OR c", "a OR (b OR c)" would both be represented with 2 Item_cond_or nodes before this patch, and with 1 node only with this patch. The logic used is based on the mathematical properties of the OR operator (it's associative), and produces a simpler tree. sql/item_cmpfunc.h: Improved performances for parsing boolean expressions sql/sql_yacc.yy: Improved performances for parsing boolean expressions mysql-test/r/parser_precedence.result: Added test cases to cover boolean operator precedence mysql-test/t/parser_precedence.test: Added test cases to cover boolean operator precedence --- mysql-test/r/parser_precedence.result | 356 ++++++++++++++++++++++++++ mysql-test/t/parser_precedence.test | 93 +++++++ sql/item_cmpfunc.h | 18 ++ sql/sql_yacc.yy | 144 +++++++---- 4 files changed, 566 insertions(+), 45 deletions(-) create mode 100644 mysql-test/r/parser_precedence.result create mode 100644 mysql-test/t/parser_precedence.test diff --git a/mysql-test/r/parser_precedence.result b/mysql-test/r/parser_precedence.result new file mode 100644 index 00000000000..e2d35521ca9 --- /dev/null +++ b/mysql-test/r/parser_precedence.result @@ -0,0 +1,356 @@ +drop table if exists t1_30237_bool; +create table t1_30237_bool(A boolean, B boolean, C boolean); +insert into t1_30237_bool values +(FALSE, FALSE, FALSE), +(FALSE, FALSE, NULL), +(FALSE, FALSE, TRUE), +(FALSE, NULL, FALSE), +(FALSE, NULL, NULL), +(FALSE, NULL, TRUE), +(FALSE, TRUE, FALSE), +(FALSE, TRUE, NULL), +(FALSE, TRUE, TRUE), +(NULL, FALSE, FALSE), +(NULL, FALSE, NULL), +(NULL, FALSE, TRUE), +(NULL, NULL, FALSE), +(NULL, NULL, NULL), +(NULL, NULL, TRUE), +(NULL, TRUE, FALSE), +(NULL, TRUE, NULL), +(NULL, TRUE, TRUE), +(TRUE, FALSE, FALSE), +(TRUE, FALSE, NULL), +(TRUE, FALSE, TRUE), +(TRUE, NULL, FALSE), +(TRUE, NULL, NULL), +(TRUE, NULL, TRUE), +(TRUE, TRUE, FALSE), +(TRUE, TRUE, NULL), +(TRUE, TRUE, TRUE) ; +Testing OR, XOR, AND +select A, B, A OR B, A XOR B, A AND B +from t1_30237_bool where C is null order by A, B; +A B A OR B A XOR B A AND B +NULL NULL NULL NULL NULL +NULL 0 NULL NULL 0 +NULL 1 1 NULL NULL +0 NULL NULL NULL 0 +0 0 0 0 0 +0 1 1 1 0 +1 NULL 1 NULL NULL +1 0 1 1 0 +1 1 1 0 1 +Testing that OR is associative +select A, B, C, (A OR B) OR C, A OR (B OR C), A OR B OR C +from t1_30237_bool order by A, B, C; +A B C (A OR B) OR C A OR (B OR C) A OR B OR C +NULL NULL NULL NULL NULL NULL +NULL NULL 0 NULL NULL NULL +NULL NULL 1 1 1 1 +NULL 0 NULL NULL NULL NULL +NULL 0 0 NULL NULL NULL +NULL 0 1 1 1 1 +NULL 1 NULL 1 1 1 +NULL 1 0 1 1 1 +NULL 1 1 1 1 1 +0 NULL NULL NULL NULL NULL +0 NULL 0 NULL NULL NULL +0 NULL 1 1 1 1 +0 0 NULL NULL NULL NULL +0 0 0 0 0 0 +0 0 1 1 1 1 +0 1 NULL 1 1 1 +0 1 0 1 1 1 +0 1 1 1 1 1 +1 NULL NULL 1 1 1 +1 NULL 0 1 1 1 +1 NULL 1 1 1 1 +1 0 NULL 1 1 1 +1 0 0 1 1 1 +1 0 1 1 1 1 +1 1 NULL 1 1 1 +1 1 0 1 1 1 +1 1 1 1 1 1 +select count(*) from t1_30237_bool +where ((A OR B) OR C) != (A OR (B OR C)); +count(*) +0 +Testing that XOR is associative +select A, B, C, (A XOR B) XOR C, A XOR (B XOR C), A XOR B XOR C +from t1_30237_bool order by A, B, C; +A B C (A XOR B) XOR C A XOR (B XOR C) A XOR B XOR C +NULL NULL NULL NULL NULL NULL +NULL NULL 0 NULL NULL NULL +NULL NULL 1 NULL NULL NULL +NULL 0 NULL NULL NULL NULL +NULL 0 0 NULL NULL NULL +NULL 0 1 NULL NULL NULL +NULL 1 NULL NULL NULL NULL +NULL 1 0 NULL NULL NULL +NULL 1 1 NULL NULL NULL +0 NULL NULL NULL NULL NULL +0 NULL 0 NULL NULL NULL +0 NULL 1 NULL NULL NULL +0 0 NULL NULL NULL NULL +0 0 0 0 0 0 +0 0 1 1 1 1 +0 1 NULL NULL NULL NULL +0 1 0 1 1 1 +0 1 1 0 0 0 +1 NULL NULL NULL NULL NULL +1 NULL 0 NULL NULL NULL +1 NULL 1 NULL NULL NULL +1 0 NULL NULL NULL NULL +1 0 0 1 1 1 +1 0 1 0 0 0 +1 1 NULL NULL NULL NULL +1 1 0 0 0 0 +1 1 1 1 1 1 +select count(*) from t1_30237_bool +where ((A XOR B) XOR C) != (A XOR (B XOR C)); +count(*) +0 +Testing that AND is associative +select A, B, C, (A AND B) AND C, A AND (B AND C), A AND B AND C +from t1_30237_bool order by A, B, C; +A B C (A AND B) AND C A AND (B AND C) A AND B AND C +NULL NULL NULL NULL NULL NULL +NULL NULL 0 0 0 0 +NULL NULL 1 NULL NULL NULL +NULL 0 NULL 0 0 0 +NULL 0 0 0 0 0 +NULL 0 1 0 0 0 +NULL 1 NULL NULL NULL NULL +NULL 1 0 0 0 0 +NULL 1 1 NULL NULL NULL +0 NULL NULL 0 0 0 +0 NULL 0 0 0 0 +0 NULL 1 0 0 0 +0 0 NULL 0 0 0 +0 0 0 0 0 0 +0 0 1 0 0 0 +0 1 NULL 0 0 0 +0 1 0 0 0 0 +0 1 1 0 0 0 +1 NULL NULL NULL NULL NULL +1 NULL 0 0 0 0 +1 NULL 1 NULL NULL NULL +1 0 NULL 0 0 0 +1 0 0 0 0 0 +1 0 1 0 0 0 +1 1 NULL NULL NULL NULL +1 1 0 0 0 0 +1 1 1 1 1 1 +select count(*) from t1_30237_bool +where ((A AND B) AND C) != (A AND (B AND C)); +count(*) +0 +Testing that AND has precedence over OR +select A, B, C, (A OR B) AND C, A OR (B AND C), A OR B AND C +from t1_30237_bool order by A, B, C; +A B C (A OR B) AND C A OR (B AND C) A OR B AND C +NULL NULL NULL NULL NULL NULL +NULL NULL 0 0 NULL NULL +NULL NULL 1 NULL NULL NULL +NULL 0 NULL NULL NULL NULL +NULL 0 0 0 NULL NULL +NULL 0 1 NULL NULL NULL +NULL 1 NULL NULL NULL NULL +NULL 1 0 0 NULL NULL +NULL 1 1 1 1 1 +0 NULL NULL NULL NULL NULL +0 NULL 0 0 0 0 +0 NULL 1 NULL NULL NULL +0 0 NULL 0 0 0 +0 0 0 0 0 0 +0 0 1 0 0 0 +0 1 NULL NULL NULL NULL +0 1 0 0 0 0 +0 1 1 1 1 1 +1 NULL NULL NULL 1 1 +1 NULL 0 0 1 1 +1 NULL 1 1 1 1 +1 0 NULL NULL 1 1 +1 0 0 0 1 1 +1 0 1 1 1 1 +1 1 NULL NULL 1 1 +1 1 0 0 1 1 +1 1 1 1 1 1 +select count(*) from t1_30237_bool +where (A OR (B AND C)) != (A OR B AND C); +count(*) +0 +select A, B, C, (A AND B) OR C, A AND (B OR C), A AND B OR C +from t1_30237_bool order by A, B, C; +A B C (A AND B) OR C A AND (B OR C) A AND B OR C +NULL NULL NULL NULL NULL NULL +NULL NULL 0 NULL NULL NULL +NULL NULL 1 1 NULL 1 +NULL 0 NULL NULL NULL NULL +NULL 0 0 0 0 0 +NULL 0 1 1 NULL 1 +NULL 1 NULL NULL NULL NULL +NULL 1 0 NULL NULL NULL +NULL 1 1 1 NULL 1 +0 NULL NULL NULL 0 NULL +0 NULL 0 0 0 0 +0 NULL 1 1 0 1 +0 0 NULL NULL 0 NULL +0 0 0 0 0 0 +0 0 1 1 0 1 +0 1 NULL NULL 0 NULL +0 1 0 0 0 0 +0 1 1 1 0 1 +1 NULL NULL NULL NULL NULL +1 NULL 0 NULL NULL NULL +1 NULL 1 1 1 1 +1 0 NULL NULL NULL NULL +1 0 0 0 0 0 +1 0 1 1 1 1 +1 1 NULL 1 1 1 +1 1 0 1 1 1 +1 1 1 1 1 1 +select count(*) from t1_30237_bool +where ((A AND B) OR C) != (A AND B OR C); +count(*) +0 +Testing that AND has precedence over XOR +select A, B, C, (A XOR B) AND C, A XOR (B AND C), A XOR B AND C +from t1_30237_bool order by A, B, C; +A B C (A XOR B) AND C A XOR (B AND C) A XOR B AND C +NULL NULL NULL NULL NULL NULL +NULL NULL 0 0 NULL NULL +NULL NULL 1 NULL NULL NULL +NULL 0 NULL NULL NULL NULL +NULL 0 0 0 NULL NULL +NULL 0 1 NULL NULL NULL +NULL 1 NULL NULL NULL NULL +NULL 1 0 0 NULL NULL +NULL 1 1 NULL NULL NULL +0 NULL NULL NULL NULL NULL +0 NULL 0 0 0 0 +0 NULL 1 NULL NULL NULL +0 0 NULL 0 0 0 +0 0 0 0 0 0 +0 0 1 0 0 0 +0 1 NULL NULL NULL NULL +0 1 0 0 0 0 +0 1 1 1 1 1 +1 NULL NULL NULL NULL NULL +1 NULL 0 0 1 1 +1 NULL 1 NULL NULL NULL +1 0 NULL NULL 1 1 +1 0 0 0 1 1 +1 0 1 1 1 1 +1 1 NULL 0 NULL NULL +1 1 0 0 1 1 +1 1 1 0 0 0 +select count(*) from t1_30237_bool +where (A XOR (B AND C)) != (A XOR B AND C); +count(*) +0 +select A, B, C, (A AND B) XOR C, A AND (B XOR C), A AND B XOR C +from t1_30237_bool order by A, B, C; +A B C (A AND B) XOR C A AND (B XOR C) A AND B XOR C +NULL NULL NULL NULL NULL NULL +NULL NULL 0 NULL NULL NULL +NULL NULL 1 NULL NULL NULL +NULL 0 NULL NULL NULL NULL +NULL 0 0 0 0 0 +NULL 0 1 1 NULL 1 +NULL 1 NULL NULL NULL NULL +NULL 1 0 NULL NULL NULL +NULL 1 1 NULL 0 NULL +0 NULL NULL NULL 0 NULL +0 NULL 0 0 0 0 +0 NULL 1 1 0 1 +0 0 NULL NULL 0 NULL +0 0 0 0 0 0 +0 0 1 1 0 1 +0 1 NULL NULL 0 NULL +0 1 0 0 0 0 +0 1 1 1 0 1 +1 NULL NULL NULL NULL NULL +1 NULL 0 NULL NULL NULL +1 NULL 1 NULL NULL NULL +1 0 NULL NULL NULL NULL +1 0 0 0 0 0 +1 0 1 1 1 1 +1 1 NULL NULL NULL NULL +1 1 0 1 1 1 +1 1 1 0 0 0 +select count(*) from t1_30237_bool +where ((A AND B) XOR C) != (A AND B XOR C); +count(*) +0 +Testing that XOR has precedence over OR +select A, B, C, (A XOR B) OR C, A XOR (B OR C), A XOR B OR C +from t1_30237_bool order by A, B, C; +A B C (A XOR B) OR C A XOR (B OR C) A XOR B OR C +NULL NULL NULL NULL NULL NULL +NULL NULL 0 NULL NULL NULL +NULL NULL 1 1 NULL 1 +NULL 0 NULL NULL NULL NULL +NULL 0 0 NULL NULL NULL +NULL 0 1 1 NULL 1 +NULL 1 NULL NULL NULL NULL +NULL 1 0 NULL NULL NULL +NULL 1 1 1 NULL 1 +0 NULL NULL NULL NULL NULL +0 NULL 0 NULL NULL NULL +0 NULL 1 1 1 1 +0 0 NULL NULL NULL NULL +0 0 0 0 0 0 +0 0 1 1 1 1 +0 1 NULL 1 1 1 +0 1 0 1 1 1 +0 1 1 1 1 1 +1 NULL NULL NULL NULL NULL +1 NULL 0 NULL NULL NULL +1 NULL 1 1 0 1 +1 0 NULL 1 NULL 1 +1 0 0 1 1 1 +1 0 1 1 0 1 +1 1 NULL NULL 0 NULL +1 1 0 0 0 0 +1 1 1 1 0 1 +select count(*) from t1_30237_bool +where ((A XOR B) OR C) != (A XOR B OR C); +count(*) +0 +select A, B, C, (A OR B) XOR C, A OR (B XOR C), A OR B XOR C +from t1_30237_bool order by A, B, C; +A B C (A OR B) XOR C A OR (B XOR C) A OR B XOR C +NULL NULL NULL NULL NULL NULL +NULL NULL 0 NULL NULL NULL +NULL NULL 1 NULL NULL NULL +NULL 0 NULL NULL NULL NULL +NULL 0 0 NULL NULL NULL +NULL 0 1 NULL 1 1 +NULL 1 NULL NULL NULL NULL +NULL 1 0 1 1 1 +NULL 1 1 0 NULL NULL +0 NULL NULL NULL NULL NULL +0 NULL 0 NULL NULL NULL +0 NULL 1 NULL NULL NULL +0 0 NULL NULL NULL NULL +0 0 0 0 0 0 +0 0 1 1 1 1 +0 1 NULL NULL NULL NULL +0 1 0 1 1 1 +0 1 1 0 0 0 +1 NULL NULL NULL 1 1 +1 NULL 0 1 1 1 +1 NULL 1 0 1 1 +1 0 NULL NULL 1 1 +1 0 0 1 1 1 +1 0 1 0 1 1 +1 1 NULL NULL 1 1 +1 1 0 1 1 1 +1 1 1 0 1 1 +select count(*) from t1_30237_bool +where (A OR (B XOR C)) != (A OR B XOR C); +count(*) +0 +drop table t1_30237_bool; diff --git a/mysql-test/t/parser_precedence.test b/mysql-test/t/parser_precedence.test new file mode 100644 index 00000000000..a3a80776fb1 --- /dev/null +++ b/mysql-test/t/parser_precedence.test @@ -0,0 +1,93 @@ + +--disable_warnings +drop table if exists t1_30237_bool; +--enable_warnings + +create table t1_30237_bool(A boolean, B boolean, C boolean); + +insert into t1_30237_bool values +(FALSE, FALSE, FALSE), +(FALSE, FALSE, NULL), +(FALSE, FALSE, TRUE), +(FALSE, NULL, FALSE), +(FALSE, NULL, NULL), +(FALSE, NULL, TRUE), +(FALSE, TRUE, FALSE), +(FALSE, TRUE, NULL), +(FALSE, TRUE, TRUE), +(NULL, FALSE, FALSE), +(NULL, FALSE, NULL), +(NULL, FALSE, TRUE), +(NULL, NULL, FALSE), +(NULL, NULL, NULL), +(NULL, NULL, TRUE), +(NULL, TRUE, FALSE), +(NULL, TRUE, NULL), +(NULL, TRUE, TRUE), +(TRUE, FALSE, FALSE), +(TRUE, FALSE, NULL), +(TRUE, FALSE, TRUE), +(TRUE, NULL, FALSE), +(TRUE, NULL, NULL), +(TRUE, NULL, TRUE), +(TRUE, TRUE, FALSE), +(TRUE, TRUE, NULL), +(TRUE, TRUE, TRUE) ; + +--echo Testing OR, XOR, AND +select A, B, A OR B, A XOR B, A AND B + from t1_30237_bool where C is null order by A, B; + +--echo Testing that OR is associative +select A, B, C, (A OR B) OR C, A OR (B OR C), A OR B OR C + from t1_30237_bool order by A, B, C; + +select count(*) from t1_30237_bool + where ((A OR B) OR C) != (A OR (B OR C)); + +--echo Testing that XOR is associative +select A, B, C, (A XOR B) XOR C, A XOR (B XOR C), A XOR B XOR C + from t1_30237_bool order by A, B, C; + +select count(*) from t1_30237_bool + where ((A XOR B) XOR C) != (A XOR (B XOR C)); + +--echo Testing that AND is associative +select A, B, C, (A AND B) AND C, A AND (B AND C), A AND B AND C + from t1_30237_bool order by A, B, C; + +select count(*) from t1_30237_bool + where ((A AND B) AND C) != (A AND (B AND C)); + +--echo Testing that AND has precedence over OR +select A, B, C, (A OR B) AND C, A OR (B AND C), A OR B AND C + from t1_30237_bool order by A, B, C; +select count(*) from t1_30237_bool + where (A OR (B AND C)) != (A OR B AND C); +select A, B, C, (A AND B) OR C, A AND (B OR C), A AND B OR C + from t1_30237_bool order by A, B, C; +select count(*) from t1_30237_bool + where ((A AND B) OR C) != (A AND B OR C); + +--echo Testing that AND has precedence over XOR +select A, B, C, (A XOR B) AND C, A XOR (B AND C), A XOR B AND C + from t1_30237_bool order by A, B, C; +select count(*) from t1_30237_bool + where (A XOR (B AND C)) != (A XOR B AND C); +select A, B, C, (A AND B) XOR C, A AND (B XOR C), A AND B XOR C + from t1_30237_bool order by A, B, C; +select count(*) from t1_30237_bool + where ((A AND B) XOR C) != (A AND B XOR C); + +--echo Testing that XOR has precedence over OR +select A, B, C, (A XOR B) OR C, A XOR (B OR C), A XOR B OR C + from t1_30237_bool order by A, B, C; +select count(*) from t1_30237_bool + where ((A XOR B) OR C) != (A XOR B OR C); +select A, B, C, (A OR B) XOR C, A OR (B XOR C), A OR B XOR C + from t1_30237_bool order by A, B, C; +select count(*) from t1_30237_bool + where (A OR (B XOR C)) != (A OR B XOR C); + +drop table t1_30237_bool; + diff --git a/sql/item_cmpfunc.h b/sql/item_cmpfunc.h index 9afc0507817..da71b3ef512 100644 --- a/sql/item_cmpfunc.h +++ b/sql/item_cmpfunc.h @@ -1361,6 +1361,7 @@ public: Item_cond(List &nlist) :Item_bool_func(), list(nlist), abort_on_null(0) {} bool add(Item *item) { return list.push_back(item); } + bool add_at_head(Item *item) { return list.push_front(item); } void add_at_head(List *nlist) { list.prepand(nlist); } bool fix_fields(THD *, Item **ref); @@ -1554,6 +1555,15 @@ public: Item *neg_transformer(THD *thd); }; +inline bool is_cond_and(Item *item) +{ + if (item->type() != Item::COND_ITEM) + return FALSE; + + Item_cond *cond_item= (Item_cond*) item; + return (cond_item->functype() == Item_func::COND_AND_FUNC); +} + class Item_cond_or :public Item_cond { public: @@ -1575,6 +1585,14 @@ public: Item *neg_transformer(THD *thd); }; +inline bool is_cond_or(Item *item) +{ + if (item->type() != Item::COND_ITEM) + return FALSE; + + Item_cond *cond_item= (Item_cond*) item; + return (cond_item->functype() == Item_func::COND_OR_FUNC); +} /* XOR is Item_cond, not an Item_int_func because we could like to diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index d71e756e91c..4230e6ee371 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -458,10 +458,10 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); %pure_parser /* We have threads */ /* - Currently there is 251 shift/reduce conflict. We should not introduce - new conflicts any more. + Currently there are 245 shift/reduce conflicts. + We should not introduce new conflicts any more. */ -%expect 251 +%expect 245 %token END_OF_INPUT @@ -1011,7 +1011,8 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); /* A dummy token to force the priority of table_ref production in a join. */ %left TABLE_REF_PRIORITY %left SET_VAR -%left OR_OR_SYM OR_SYM OR2_SYM XOR +%left OR_OR_SYM OR_SYM OR2_SYM +%left XOR %left AND_SYM AND_AND_SYM %left BETWEEN_SYM CASE_SYM WHEN_SYM THEN_SYM ELSE %left EQ EQUAL_SYM GE GT_SYM LE LT NE IS LIKE REGEXP IN_SYM @@ -1024,6 +1025,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); %left NEG '~' %right NOT_SYM NOT2_SYM %right BINARY COLLATE_SYM +%left INTERVAL_SYM %type IDENT IDENT_QUOTED TEXT_STRING DECIMAL_NUM FLOAT_NUM NUM LONG_NUM HEX_NUM @@ -1066,7 +1068,8 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); %type literal text_literal insert_ident order_ident simple_ident select_item2 expr opt_expr opt_else sum_expr in_sum_expr - variable variable_aux bool_term bool_factor bool_test bool_pri + variable variable_aux bool_factor + bool_test bool_pri predicate bit_expr bit_term bit_factor value_expr term factor table_wild simple_expr udf_expr expr_or_default set_expr_or_default interval_expr @@ -4464,53 +4467,103 @@ optional_braces: | '(' ')' {}; /* all possible expressions */ -expr: - bool_term { Select->expr_list.push_front(new List); } - bool_or_expr +expr: + bool_factor + | expr or expr %prec OR_SYM { - List *list= Select->expr_list.pop(); - if (list->elements) + /* + Design notes: + Do not use a manually maintained stack like thd->lex->xxx_list, + but use the internal bison stack ($$, $1 and $3) instead. + Using the bison stack is: + - more robust to changes in the grammar, + - guaranteed to be in sync with the parser state, + - better for performances (no memory allocation). + */ + Item_cond_or *item1; + Item_cond_or *item3; + if (is_cond_or($1)) { - list->push_front($1); - $$= new Item_cond_or(*list); - /* optimize construction of logical OR to reduce - amount of objects for complex expressions */ + item1= (Item_cond_or*) $1; + if (is_cond_or($3)) + { + item3= (Item_cond_or*) $3; + /* + (X1 OR X2) OR (Y1 OR Y2) ==> OR (X1, X2, Y1, Y2) + */ + item3->add_at_head(item1->argument_list()); + $$ = $3; + } + else + { + /* + (X1 OR X2) OR Y ==> OR (X1, X2, Y) + */ + item1->add($3); + $$ = $1; + } + } + else if (is_cond_or($3)) + { + item3= (Item_cond_or*) $3; + /* + X OR (Y1 OR Y2) ==> OR (X, Y1, Y2) + */ + item3->add_at_head($1); + $$ = $3; } else - $$= $1; - delete list; - } - ; - -bool_or_expr: - /* empty */ - | bool_or_expr or bool_term - { Select->expr_list.head()->push_back($3); } - ; - -bool_term: - bool_term XOR bool_term { $$= new Item_cond_xor($1,$3); } - | bool_factor { Select->expr_list.push_front(new List); } - bool_and_expr - { - List *list= Select->expr_list.pop(); - if (list->elements) { - list->push_front($1); - $$= new Item_cond_and(*list); - /* optimize construction of logical AND to reduce - amount of objects for complex expressions */ + /* X OR Y */ + $$ = new (YYTHD->mem_root) Item_cond_or($1, $3); + } + } + | expr XOR expr %prec XOR + { + /* XOR is a proprietary extension */ + $$ = new (YYTHD->mem_root) Item_cond_xor($1, $3); + } + | expr and expr %prec AND_SYM + { + /* See comments in rule expr: expr or expr */ + Item_cond_and *item1; + Item_cond_and *item3; + if (is_cond_and($1)) + { + item1= (Item_cond_and*) $1; + if (is_cond_and($3)) + { + item3= (Item_cond_and*) $3; + /* + (X1 AND X2) AND (Y1 AND Y2) ==> AND (X1, X2, Y1, Y2) + */ + item3->add_at_head(item1->argument_list()); + $$ = $3; + } + else + { + /* + (X1 AND X2) AND Y ==> AND (X1, X2, Y) + */ + item1->add($3); + $$ = $1; + } + } + else if (is_cond_and($3)) + { + item3= (Item_cond_and*) $3; + /* + X AND (Y1 AND Y2) ==> AND (X, Y1, Y2) + */ + item3->add_at_head($1); + $$ = $3; } else - $$= $1; - delete list; + { + /* X AND Y */ + $$ = new (YYTHD->mem_root) Item_cond_and($1, $3); + } } - ; - -bool_and_expr: - /* empty */ - | bool_and_expr and bool_factor - { Select->expr_list.head()->push_back($3); } ; bool_factor: @@ -4648,7 +4701,8 @@ all_or_any: ALL { $$ = 1; } ; interval_expr: - INTERVAL_SYM expr { $$=$2; } + INTERVAL_SYM expr %prec INTERVAL_SYM + { $$=$2; } ; simple_expr: From d007e5246582f38147d4cfa671d62c4d536037e4 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 22 Aug 2007 12:02:23 -0600 Subject: [PATCH 115/194] Manual merge --- BUILD/compile-pentium-gcov | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/BUILD/compile-pentium-gcov b/BUILD/compile-pentium-gcov index 77de5867d48..42666b2632c 100755 --- a/BUILD/compile-pentium-gcov +++ b/BUILD/compile-pentium-gcov @@ -20,18 +20,11 @@ export CCACHE_GCOV_VERSION_ENABLED path=`dirname $0` . "$path/SETUP.sh" -# GCC4 needs -fprofile-arcs -ftest-coverage on the linker command line (as well -# as on the compiler command line), and this requires setting LDFLAGS for BDB. -export LDFLAGS="-fprofile-arcs -ftest-coverage" +export LDFLAGS="$gcov_link_flags" -# The -fprofile-arcs and -ftest-coverage options cause GCC to instrument the -# code with profiling information used by gcov. -# The -DDISABLE_TAO_ASM is needed to avoid build failures in Yassl. -# The -DHAVE_gcov enables code to write out coverage info even when crashing. -extra_flags="$pentium_cflags -fprofile-arcs -ftest-coverage -DDISABLE_TAO_ASM -DHAVE_MUTEX_THREAD_ONLY $debug_extra_flags $debug_cflags $max_cflags -DMYSQL_SERVER_SUFFIX=-gcov -DHAVE_gcov" -extra_configs="$pentium_configs $debug_configs --disable-shared $static_link" -extra_configs="$extra_configs $max_configs" +extra_flags="$pentium_cflags $debug_cflags $max_cflags $gcov_compile_flags" c_warnings="$c_warnings $debug_extra_warnings" cxx_warnings="$cxx_warnings $debug_extra_warnings" +extra_configs="$pentium_configs $debug_configs $gcov_configs $max_configs" . "$path/FINISH.sh" From 870958d25c7f6ac504dc2107e44ae7e80fc55c62 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 22 Aug 2007 22:04:31 +0200 Subject: [PATCH 116/194] Cleanup in the "netware" subdirectory: 1) We do not provide the "isam" table handler in 5.0 and up (different from "myisam" !), so we do not need the ".def" files for the "isam"-specific tools. 2) Use "basename" to get the base name of a file, not a harder-to-read sed expression. BitKeeper/deleted/.del-isamchk.def: Delete: netware/isamchk.def BitKeeper/deleted/.del-isamlog.def: Delete: netware/isamlog.def BitKeeper/deleted/.del-pack_isam.def: Delete: netware/pack_isam.def netware/Makefile.am: Use a plain "basename" showing the purpose, not a sed command which is harder to read. --- netware/Makefile.am | 2 +- netware/isamchk.def | 12 ------------ netware/isamlog.def | 11 ----------- netware/pack_isam.def | 13 ------------- 4 files changed, 1 insertion(+), 37 deletions(-) delete mode 100644 netware/isamchk.def delete mode 100644 netware/isamlog.def delete mode 100644 netware/pack_isam.def diff --git a/netware/Makefile.am b/netware/Makefile.am index 3ec9c7794bf..30172e124a4 100644 --- a/netware/Makefile.am +++ b/netware/Makefile.am @@ -44,7 +44,7 @@ link_sources: set -x; \ for f in $(netware_build_files); do \ rm -f ../$$f; \ - org=`echo $$f | sed -e 's/.*\/\(.*\)/\1/g'`; \ + org=`basename $$f`; \ @LN_CP_F@ $(srcdir)/$$org ../$$f; \ done else diff --git a/netware/isamchk.def b/netware/isamchk.def deleted file mode 100644 index 8ae2c0ca96c..00000000000 --- a/netware/isamchk.def +++ /dev/null @@ -1,12 +0,0 @@ -#------------------------------------------------------------------------------ -# ISAM Check -#------------------------------------------------------------------------------ -MODULE libc.nlm -SCREENNAME "MySQL ISAM Table Check Tool" -COPYRIGHT "(c) 2003-2005 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." -DESCRIPTION "MySQL ISAM Table Check Tool" -VERSION 4, 0 -STACKSIZE 131072 -XDCDATA ../netware/mysql.xdc -#DEBUG - diff --git a/netware/isamlog.def b/netware/isamlog.def deleted file mode 100644 index 777d73a7835..00000000000 --- a/netware/isamlog.def +++ /dev/null @@ -1,11 +0,0 @@ -#------------------------------------------------------------------------------ -# ISAM Log -#------------------------------------------------------------------------------ -MODULE libc.nlm -COPYRIGHT "(c) 2003-2005 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." -DESCRIPTION "MySQL ISAM Table Log Tool" -VERSION 4, 0 -STACKSIZE 131072 -XDCDATA ../netware/mysql.xdc -#DEBUG - diff --git a/netware/pack_isam.def b/netware/pack_isam.def deleted file mode 100644 index 514b57b04bd..00000000000 --- a/netware/pack_isam.def +++ /dev/null @@ -1,13 +0,0 @@ -#------------------------------------------------------------------------------ -# Pack ISAM -#------------------------------------------------------------------------------ -MODULE libc.nlm -SCREENNAME "MySQL ISAM Table Pack Tool" -COPYRIGHT "(c) 2003-2005 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." -DESCRIPTION "MySQL ISAM Table Pack Tool" -SCREENNAME "MySQL ISAM Table Pack Tool" -VERSION 4, 0 -STACKSIZE 131072 -XDCDATA ../netware/mysql.xdc -#DEBUG - From 49fea65f2bab0853f4c2217777fe2563f771a044 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 22 Aug 2007 14:25:36 -0600 Subject: [PATCH 117/194] Manual merge --- sql/sql_yacc.yy | 143 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 98 insertions(+), 45 deletions(-) diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 8f66e41b338..a0033c27a6b 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -508,10 +508,10 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); %pure_parser /* We have threads */ /* - Currently there is 286 shift/reduce conflict. We should not introduce - new conflicts any more. + Currently there are 280 shift/reduce conflicts. + We should not introduce new conflicts any more. */ -%expect 286 +%expect 280 /* Comments for TOKENS. @@ -1089,7 +1089,8 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); /* A dummy token to force the priority of table_ref production in a join. */ %left TABLE_REF_PRIORITY %left SET_VAR -%left OR_OR_SYM OR_SYM OR2_SYM XOR +%left OR_OR_SYM OR_SYM OR2_SYM +%left XOR %left AND_SYM AND_AND_SYM %left BETWEEN_SYM CASE_SYM WHEN_SYM THEN_SYM ELSE %left EQ EQUAL_SYM GE GT_SYM LE LT NE IS LIKE REGEXP IN_SYM @@ -1102,6 +1103,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); %left NEG '~' %right NOT_SYM NOT2_SYM %right BINARY COLLATE_SYM +%left INTERVAL_SYM %type IDENT IDENT_QUOTED TEXT_STRING DECIMAL_NUM FLOAT_NUM NUM LONG_NUM HEX_NUM @@ -1150,7 +1152,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); %type literal text_literal insert_ident order_ident simple_ident select_item2 expr opt_expr opt_else sum_expr in_sum_expr - variable variable_aux bool_term bool_factor bool_test bool_pri + variable variable_aux bool_factor bool_test bool_pri predicate bit_expr bit_term bit_factor value_expr term factor table_wild simple_expr udf_expr expr_or_default set_expr_or_default interval_expr @@ -6554,53 +6556,103 @@ optional_braces: ; /* all possible expressions */ -expr: - bool_term { Select->expr_list.push_front(new List); } - bool_or_expr +expr: + bool_factor + | expr or expr %prec OR_SYM { - List *list= Select->expr_list.pop(); - if (list->elements) + /* + Design notes: + Do not use a manually maintained stack like thd->lex->xxx_list, + but use the internal bison stack ($$, $1 and $3) instead. + Using the bison stack is: + - more robust to changes in the grammar, + - guaranteed to be in sync with the parser state, + - better for performances (no memory allocation). + */ + Item_cond_or *item1; + Item_cond_or *item3; + if (is_cond_or($1)) { - list->push_front($1); - $$= new Item_cond_or(*list); - /* optimize construction of logical OR to reduce - amount of objects for complex expressions */ + item1= (Item_cond_or*) $1; + if (is_cond_or($3)) + { + item3= (Item_cond_or*) $3; + /* + (X1 OR X2) OR (Y1 OR Y2) ==> OR (X1, X2, Y1, Y2) + */ + item3->add_at_head(item1->argument_list()); + $$ = $3; + } + else + { + /* + (X1 OR X2) OR Y ==> OR (X1, X2, Y) + */ + item1->add($3); + $$ = $1; + } + } + else if (is_cond_or($3)) + { + item3= (Item_cond_or*) $3; + /* + X OR (Y1 OR Y2) ==> OR (X, Y1, Y2) + */ + item3->add_at_head($1); + $$ = $3; } else - $$= $1; - delete list; - } - ; - -bool_or_expr: - /* empty */ - | bool_or_expr or bool_term - { Select->expr_list.head()->push_back($3); } - ; - -bool_term: - bool_term XOR bool_term { $$= new Item_cond_xor($1,$3); } - | bool_factor { Select->expr_list.push_front(new List); } - bool_and_expr - { - List *list= Select->expr_list.pop(); - if (list->elements) { - list->push_front($1); - $$= new Item_cond_and(*list); - /* optimize construction of logical AND to reduce - amount of objects for complex expressions */ + /* X OR Y */ + $$ = new (YYTHD->mem_root) Item_cond_or($1, $3); + } + } + | expr XOR expr %prec XOR + { + /* XOR is a proprietary extension */ + $$ = new (YYTHD->mem_root) Item_cond_xor($1, $3); + } + | expr and expr %prec AND_SYM + { + /* See comments in rule expr: expr or expr */ + Item_cond_and *item1; + Item_cond_and *item3; + if (is_cond_and($1)) + { + item1= (Item_cond_and*) $1; + if (is_cond_and($3)) + { + item3= (Item_cond_and*) $3; + /* + (X1 AND X2) AND (Y1 AND Y2) ==> AND (X1, X2, Y1, Y2) + */ + item3->add_at_head(item1->argument_list()); + $$ = $3; + } + else + { + /* + (X1 AND X2) AND Y ==> AND (X1, X2, Y) + */ + item1->add($3); + $$ = $1; + } + } + else if (is_cond_and($3)) + { + item3= (Item_cond_and*) $3; + /* + X AND (Y1 AND Y2) ==> AND (X, Y1, Y2) + */ + item3->add_at_head($1); + $$ = $3; } else - $$= $1; - delete list; + { + /* X AND Y */ + $$ = new (YYTHD->mem_root) Item_cond_and($1, $3); + } } - ; - -bool_and_expr: - /* empty */ - | bool_and_expr and bool_factor - { Select->expr_list.head()->push_back($3); } ; bool_factor: @@ -6766,7 +6818,8 @@ all_or_any: ; interval_expr: - INTERVAL_SYM expr { $$=$2; } + INTERVAL_SYM expr %prec INTERVAL_SYM + { $$=$2; } ; simple_expr: From 5dc3e88947d55e23dd0419938d4cb671e400a6f3 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 22 Aug 2007 15:38:32 -0600 Subject: [PATCH 118/194] Bug#30333 (Performance, expressions lists in the parser) Before this patch, the parser would execute: - Select->expr_list.push_front() - Select->expr_list.pop() when parsing expressions lists, in the following rules: - udf_expr_list - expr_list - ident_list This is unnecessary, and introduces overhead due to the memory allocations performed with Select->expr_list With this patch, this code has been removed. The list being parsed is maintained in the parser stack instead. Also, 'udf_expr_list' has been renamed 'opt_udf_expr_list', since this production can be empty. sql/sql_lex.cc: Removed unused attribute expr_list sql/sql_lex.h: Removed unused attribute expr_list sql/sql_yacc.yy: Improved performances when parsing expression lists --- sql/sql_lex.cc | 2 -- sql/sql_lex.h | 1 - sql/sql_yacc.yy | 78 ++++++++++++++++++++++++++----------------------- 3 files changed, 41 insertions(+), 40 deletions(-) diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index 78b4f034f98..7fe2ed04d51 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -323,7 +323,6 @@ void lex_start(THD *thd) lex->length=0; lex->part_info= 0; lex->select_lex.in_sum_expr=0; - lex->select_lex.expr_list.empty(); lex->select_lex.ftfunc_list_alloc.empty(); lex->select_lex.ftfunc_list= &lex->select_lex.ftfunc_list_alloc; lex->select_lex.group_list.empty(); @@ -1555,7 +1554,6 @@ void st_select_lex::init_select() options= 0; sql_cache= SQL_CACHE_UNSPECIFIED; braces= 0; - expr_list.empty(); interval_list.empty(); ftfunc_list_alloc.empty(); inner_sum_func_list= 0; diff --git a/sql/sql_lex.h b/sql/sql_lex.h index 2e72a87c35d..f80ddfb8339 100644 --- a/sql/sql_lex.h +++ b/sql/sql_lex.h @@ -596,7 +596,6 @@ public: const char *type; /* type of select for EXPLAIN */ SQL_LIST order_list; /* ORDER clause */ - List expr_list; SQL_LIST *gorder_list; Item *select_limit, *offset_limit; /* LIMIT clause parameters */ // Arrays of pointers to top elements of all_fields list diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index a0033c27a6b..7b03f7d4eae 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -1171,7 +1171,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); NUM_literal %type - expr_list udf_expr_list udf_expr_list2 when_list + expr_list opt_udf_expr_list udf_expr_list when_list ident_list ident_list_arg opt_expr_list %type @@ -1245,7 +1245,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); select_item_list select_item values_list no_braces opt_limit_clause delete_limit_clause fields opt_values values procedure_list procedure_list2 procedure_item - expr_list2 udf_expr_list3 handler + handler opt_precision opt_ignore opt_column opt_restrict grant revoke set lock unlock string_list field_options field_option field_opt_list opt_binary table_lock_list table_lock @@ -7253,7 +7253,7 @@ function_call_generic: $$= udf; #endif } - udf_expr_list ')' + opt_udf_expr_list ')' { THD *thd= YYTHD; Create_func *builder; @@ -7350,27 +7350,23 @@ opt_query_expansion: | WITH QUERY_SYM EXPANSION_SYM { $$= FT_EXPAND; } ; +opt_udf_expr_list: + /* empty */ { $$= NULL; } + | udf_expr_list { $$= $1; } + ; + udf_expr_list: - /* empty */ { $$= NULL; } - | udf_expr_list2 { $$= $1;} - ; - -udf_expr_list2: - { Select->expr_list.push_front(new List); } - udf_expr_list3 - { $$= Select->expr_list.pop(); } - ; - -udf_expr_list3: - udf_expr - { - Select->expr_list.head()->push_back($1); - } - | udf_expr_list3 ',' udf_expr - { - Select->expr_list.head()->push_back($3); - } - ; + udf_expr + { + $$= new (YYTHD->mem_root) List; + $$->push_back($1); + } + | udf_expr_list ',' udf_expr + { + $1->push_back($3); + $$= $1; + } + ; udf_expr: remember_name expr remember_end select_alias @@ -7568,13 +7564,17 @@ opt_expr_list: ; expr_list: - { Select->expr_list.push_front(new List); } - expr_list2 - { $$= Select->expr_list.pop(); }; - -expr_list2: - expr { Select->expr_list.head()->push_back($1); } - | expr_list2 ',' expr { Select->expr_list.head()->push_back($3); }; + expr + { + $$= new (YYTHD->mem_root) List; + $$->push_back($1); + } + | expr_list ',' expr + { + $1->push_back($3); + $$= $1; + } + ; ident_list_arg: ident_list { $$= $1; } @@ -7582,13 +7582,17 @@ ident_list_arg: ; ident_list: - { Select->expr_list.push_front(new List); } - ident_list2 - { $$= Select->expr_list.pop(); }; - -ident_list2: - simple_ident { Select->expr_list.head()->push_back($1); } - | ident_list2 ',' simple_ident { Select->expr_list.head()->push_back($3); }; + simple_ident + { + $$= new (YYTHD->mem_root) List; + $$->push_back($1); + } + | ident_list ',' simple_ident + { + $1->push_back($3); + $$= $1; + } + ; opt_expr: /* empty */ { $$= NULL; } From 33e123ead93b0122a67821e4b16ef70ef2b3d3af Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 22 Aug 2007 18:11:01 -0600 Subject: [PATCH 119/194] Do not use $static_link for GCOV builds, since this flag was explicitly removed in pushbuild for GCOV builds. BUILD_CMD => ['sh', '-c', 'perl -i.bak -pe "s/ \\\\\$static_link//" ' . 'BUILD/compile-pentium-gcov; BUILD/compile-pentium-gcov'], Moving $static_link to SETUP.sh broke this, and is now fixed. Should this flag be needed on some platforms, the proper location is compile--gcov Tested the amd64 and pentium64 build fine without it, and can run NDB tests. BUILD/SETUP.sh: Removed $static_link from GCOV builds. --- BUILD/SETUP.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BUILD/SETUP.sh b/BUILD/SETUP.sh index a8efaf75db4..532ea4eb0f1 100755 --- a/BUILD/SETUP.sh +++ b/BUILD/SETUP.sh @@ -155,7 +155,7 @@ gcov_compile_flags="$gcov_compile_flags -DMYSQL_SERVER_SUFFIX=-gcov -DHAVE_gcov" gcov_link_flags="-fprofile-arcs -ftest-coverage" -gcov_configs="--disable-shared $static_link" +gcov_configs="--disable-shared" # gprof From 55d65833cabf91bd62d8065840a2eadc1c784ded Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 23 Aug 2007 15:37:55 +0200 Subject: [PATCH 120/194] Bug#28285 Test "events_bugs" has instable results of "select /*1*/ ... from processlist" Test case contains possible race conditions. This patch fixes these race conditions and also adjust the test to execute according to its documentation. mysql-test/r/events.result: Modified test case to fit test documentation mysql-test/t/events.test: Modified test case to fit test documentation --- mysql-test/r/events.result | 3 +++ mysql-test/t/events.test | 8 ++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/events.result b/mysql-test/r/events.result index 579f5907882..be67e2acc7b 100644 --- a/mysql-test/r/events.result +++ b/mysql-test/r/events.result @@ -499,6 +499,9 @@ set global event_scheduler=off; select /*4*/ user, host, db, command, state, info from information_schema.processlist where (command!='Daemon' || user='event_scheduler') and (info is null or info not like '%processlist%') order by info; user host db command state info root localhost events_test Connect User lock select get_lock("test_lock2_1", 20) +select release_lock("test_lock2_1"); +release_lock("test_lock2_1") +1 drop event закачка21; create table t_16 (s1 int); create trigger t_16_bi before insert on t_16 for each row create event e_16 on schedule every 1 second do set @a=5; diff --git a/mysql-test/t/events.test b/mysql-test/t/events.test index d7232705b81..cbb36cbd2be 100644 --- a/mysql-test/t/events.test +++ b/mysql-test/t/events.test @@ -466,13 +466,17 @@ drop event закачка; set global event_scheduler=1; select get_lock("test_lock2_1", 20); create event закачка21 on schedule every 10 hour do select get_lock("test_lock2_1", 20); ---sleep 1 +let $wait_condition= select count(*) = 3 from information_schema.processlist; +--source include/wait_condition.inc --echo "Should have only 3 processes: the scheduler, our conn and the locked event" select /*3*/ user, host, db, command, state, info from information_schema.processlist where (command!='Daemon' || user='event_scheduler') and (info is null or info not like '%processlist%') order by info; set global event_scheduler=off; ---sleep 0.8 +let $wait_condition= select count(*) =1 from information_schema.processlist + where (command!='Daemon' || user='event_scheduler') and (info is null or info not like '%processlist%') order by info; +--source include/wait_condition.inc --echo "Should have only our process now:" select /*4*/ user, host, db, command, state, info from information_schema.processlist where (command!='Daemon' || user='event_scheduler') and (info is null or info not like '%processlist%') order by info; +select release_lock("test_lock2_1"); drop event закачка21; let $wait_condition= select count(*) = 0 from information_schema.processlist From 50911dec3ee85acbfb5c7f0211fb5cde472a0d1e Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 23 Aug 2007 20:24:48 +0200 Subject: [PATCH 121/194] Bug#30593 No cipher list returned for "SHOW STATUS LIKE 'Ssl_cipher_list'" - Move increment of "i" to "increment section" of for loop - Protect against writing after end of "buff"(backport from 5.1) sql/sql_show.cc: - Move the increment of i to "increment" section of for loop. Since "i" was initially 0 the for loop exited immediately - Add protection for writing after end of "buff" --- sql/sql_show.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 05a847b3830..1f408bbaf40 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -1739,12 +1739,13 @@ static bool show_status_array(THD *thd, const char *wild, if (thd->net.vio->ssl_arg) { char *to= buff; - for (int i=0 ; i++ ;) + char *buff_end= buff + sizeof(buff); + for (int i= 0; to < buff_end; i++) { const char *p= SSL_get_cipher_list((SSL*) thd->net.vio->ssl_arg,i); if (p == NULL) break; - to= strmov(to, p); + to= strnmov(to, p, buff_end-to-1); *to++= ':'; } if (to != buff) From f0d1ac25c349f09f2512d75f4e12f39d3a7729c3 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 23 Aug 2007 23:34:48 +0500 Subject: [PATCH 122/194] Bug #28430 Failure in replication of innodb partitioned tables on row/mixed format. In the ha_partition::position() we didn't calculate the number of the partition of the record. We used m_last_part value instead, relying on that it is set in other place like previous call of a method like ::write_row(). In replication we don't call any of these befor position(). Delete_rows_log_event::do_exec_row calls find_and_fetch_row. In case of InnoDB-based PARTITION table, we have HA_PRIMARY_KEY_REQUIRED_FOR_POSITION enabled, so use position() / rnd_pos() calls to fetch the record. Fixed by adding partition_id calculation to the ha_partition::position() sql/ha_partition.h: Bug #28430 Failure in replication of innodb partitioned tables on row/mixed format. column_bitmaps_signal interface added sql/ha_partition.cc: Bug #28430 Failure in replication of innodb partitioned tables on row/mixed format. Calculate the number of the partition in ha_partition::position(). ha_partition::column_bitmaps_signal() implemented mysql-test/r/partition_pruning.result: Bug #28430 Failure in replication of innodb partitioned tables on row/mixed format. test result fixed --- mysql-test/r/partition_pruning.result | 4 ++-- sql/ha_partition.cc | 14 +++++++++++++- sql/ha_partition.h | 1 + 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/mysql-test/r/partition_pruning.result b/mysql-test/r/partition_pruning.result index 9595676016c..776e6f3a15a 100644 --- a/mysql-test/r/partition_pruning.result +++ b/mysql-test/r/partition_pruning.result @@ -631,7 +631,7 @@ flush status; delete from t2 where b > 5; show status like 'Handler_read_rnd_next'; Variable_name Value -Handler_read_rnd_next 1215 +Handler_read_rnd_next 1115 show status like 'Handler_read_key'; Variable_name Value Handler_read_key 0 @@ -645,7 +645,7 @@ flush status; delete from t2 where b < 5 or b > 3; show status like 'Handler_read_rnd_next'; Variable_name Value -Handler_read_rnd_next 1215 +Handler_read_rnd_next 1115 show status like 'Handler_read_key'; Variable_name Value Handler_read_key 0 diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc index 2c28d5087d4..91eaf66e4e3 100644 --- a/sql/ha_partition.cc +++ b/sql/ha_partition.cc @@ -3235,9 +3235,14 @@ end_dont_reset_start_part: void ha_partition::position(const uchar *record) { - handler *file= m_file[m_last_part]; + handler *file; DBUG_ENTER("ha_partition::position"); + if (unlikely(get_part_for_delete(record, m_rec0, m_part_info, &m_last_part))) + m_last_part= 0; + + file= m_file[m_last_part]; + file->position(record); int2store(ref, m_last_part); memcpy((ref + PARTITION_BYTES_IN_POS), file->ref, @@ -5587,6 +5592,13 @@ int ha_partition::indexes_are_disabled(void) } +void ha_partition::column_bitmaps_signal() +{ + handler::column_bitmaps_signal(); + bitmap_union(table->read_set, &m_part_info->full_part_field_set); +} + + /**************************************************************************** MODULE Partition Share ****************************************************************************/ diff --git a/sql/ha_partition.h b/sql/ha_partition.h index 895f001fa6a..c3145b7c14c 100644 --- a/sql/ha_partition.h +++ b/sql/ha_partition.h @@ -449,6 +449,7 @@ private: int handle_ordered_next(uchar * buf, bool next_same); int handle_ordered_prev(uchar * buf); void return_top_record(uchar * buf); + void column_bitmaps_signal(); public: /* ------------------------------------------------------------------------- From 5eccf587d5c08ad5257380fdb0692358ad4f4b61 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 24 Aug 2007 10:47:13 +0200 Subject: [PATCH 123/194] NetWare packages were missing the scripts to initialize the database: add them. --- netware/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netware/Makefile.am b/netware/Makefile.am index 30172e124a4..1e006bbc25b 100644 --- a/netware/Makefile.am +++ b/netware/Makefile.am @@ -75,7 +75,7 @@ EXTRA_DIST= $(BUILT_SOURCES) comp_err.def install_test_db.ncf \ mysqlshow.def mysqltest.def mysql_upgrade.def perror.def \ mysql_client_test.def \ replace.def resolve_stack_dump.def resolveip.def \ - static_init_db.sql \ + static_init_db.sql init_db.sql test_db.sql \ BUILD/apply-patch BUILD/compile-AUTOTOOLS \ BUILD/compile-linux-tools BUILD/compile-netware-END \ BUILD/compile-netware-START BUILD/compile-netware-all\ From 17f03bb7a6899803fec32b659f04a4fa56c5c189 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 24 Aug 2007 13:10:34 +0200 Subject: [PATCH 124/194] Remove unecessary use of "Socket" --- mysql-test/lib/mtr_timer.pl | 1 - 1 file changed, 1 deletion(-) diff --git a/mysql-test/lib/mtr_timer.pl b/mysql-test/lib/mtr_timer.pl index d8b6953fb46..326fbea74ec 100644 --- a/mysql-test/lib/mtr_timer.pl +++ b/mysql-test/lib/mtr_timer.pl @@ -18,7 +18,6 @@ # and is part of the translation of the Bourne shell script with the # same name. -use Socket; use Errno; use strict; From b18447112c2bdc81e581ff51087c78b5e345bb4d Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 24 Aug 2007 15:43:45 +0200 Subject: [PATCH 125/194] Remove unsued variable $glob_hostname, unused functions 'mtr_short_hostname' and 'mtr_full_hostname' --- mysql-test/lib/mtr_misc.pl | 26 -------------------------- mysql-test/mysql-test-run.pl | 8 ++++---- 2 files changed, 4 insertions(+), 30 deletions(-) diff --git a/mysql-test/lib/mtr_misc.pl b/mysql-test/lib/mtr_misc.pl index dc22f88bd7f..e54cb326ade 100644 --- a/mysql-test/lib/mtr_misc.pl +++ b/mysql-test/lib/mtr_misc.pl @@ -20,8 +20,6 @@ use strict; -sub mtr_full_hostname (); -sub mtr_short_hostname (); sub mtr_native_path($); sub mtr_init_args ($); sub mtr_add_arg ($$@); @@ -40,30 +38,6 @@ sub mtr_cmp_opts($$); # ############################################################################## -# We want the fully qualified host name and hostname() may have returned -# only the short name. So we use the resolver to find out. -# Note that this might fail on some platforms - -sub mtr_full_hostname () { - - my $hostname= hostname(); - if ( $hostname !~ /\./ ) - { - my $address= gethostbyname($hostname) - or mtr_error("Couldn't resolve $hostname : $!"); - my $fullname= gethostbyaddr($address, AF_INET); - $hostname= $fullname if $fullname; - } - return $hostname; -} - -sub mtr_short_hostname () { - - my $hostname= hostname(); - $hostname =~ s/\..+$//; - return $hostname; -} - # Convert path to OS native format sub mtr_native_path($) { diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 364a304a15b..269bfbcb40f 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -61,7 +61,6 @@ use File::Copy; use File::Temp qw / tempdir /; use Cwd; use Getopt::Long; -use Sys::Hostname; use IO::Socket; use IO::Socket::INET; use strict; @@ -100,7 +99,6 @@ $Devel::Trace::TRACE= 1; our $mysql_version_id; our $glob_mysql_test_dir= undef; our $glob_mysql_bench_dir= undef; -our $glob_hostname= undef; our $glob_scriptname= undef; our $glob_timers= undef; our $glob_use_running_ndbcluster= 0; @@ -647,8 +645,6 @@ sub command_line_setup () { $source_dist= 1; } - $glob_hostname= mtr_short_hostname(); - # Find the absolute path to the test directory $glob_mysql_test_dir= cwd(); if ( $glob_cygwin_perl ) @@ -3063,11 +3059,15 @@ sub install_db ($$) { mtr_appendfile_to_file("$path_sql_dir/fill_help_tables.sql", $bootstrap_sql_file); + mtr_tofile($bootstrap_sql_file, + "DELETE FROM mysql.user where user= '';"); + # Log bootstrap command my $path_bootstrap_log= "$opt_vardir/log/bootstrap.log"; mtr_tofile($path_bootstrap_log, "$exe_mysqld_bootstrap " . join(" ", @$args) . "\n"); + if ( mtr_run($exe_mysqld_bootstrap, $args, $bootstrap_sql_file, $path_bootstrap_log, $path_bootstrap_log, "", { append_log_file => 1 }) != 0 ) From 8f145dae1c089f59c241ff88bea8f9b1bdedec53 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 24 Aug 2007 09:08:11 -0600 Subject: [PATCH 126/194] Whitespace cleanup sql/sql_yacc.yy: Whitespace cleaup --- sql/sql_yacc.yy | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 7b03f7d4eae..24ee080a7aa 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -31,7 +31,7 @@ #define MYSQL_YACC #define YYINITDEPTH 100 -#define YYMAXDEPTH 3200 /* Because of 64K stack */ +#define YYMAXDEPTH 3200 /* Because of 64K stack */ #define Lex (YYTHD->lex) #define Select Lex->current_select #include "mysql_priv.h" @@ -506,7 +506,7 @@ Item* handle_sql2003_note184_exception(THD *thd, Item* left, bool equal, bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); %} -%pure_parser /* We have threads */ +%pure_parser /* We have threads */ /* Currently there are 280 shift/reduce conflicts. We should not introduce new conflicts any more. @@ -1315,10 +1315,11 @@ rule: <-- starts at col 1 } ; <-- on a line by itself, starts at col 9 -Also, please do not use any , but spaces. -Having a uniform indentation in this file helps -code reviews, patches, merges, and make maintenance easier. -Thanks. + Also, please do not use any , but spaces. + Having a uniform indentation in this file helps + code reviews, patches, merges, and make maintenance easier. + Tip: grep [[:cntrl:]] sql_yacc.yy + Thanks. */ query: @@ -5149,7 +5150,7 @@ opt_bin_charset: MYSQL_YYABORT; } } - | charset charset_name { Lex->charset=$2; } + | charset charset_name { Lex->charset=$2; } ; opt_primary: @@ -5371,7 +5372,7 @@ alter: lex->create_info.row_type= ROW_TYPE_NOT_USED; lex->alter_info.reset(); lex->no_write_to_binlog= 0; - lex->create_info.storage_media= HA_SM_DEFAULT; + lex->create_info.storage_media= HA_SM_DEFAULT; } alter_commands {} @@ -6675,9 +6676,9 @@ bool_test: ; bool_pri: - bool_pri IS NULL_SYM { $$= new Item_func_isnull($1); } + bool_pri IS NULL_SYM { $$= new Item_func_isnull($1); } | bool_pri IS not NULL_SYM { $$= new Item_func_isnotnull($1); } - | bool_pri EQUAL_SYM predicate { $$= new Item_func_equal($1,$3); } + | bool_pri EQUAL_SYM predicate { $$= new Item_func_equal($1,$3); } | bool_pri comp_op predicate %prec EQ { $$= (*$2)(0)->create($1,$3); } | bool_pri comp_op all_or_any '(' subselect ')' %prec EQ @@ -6842,7 +6843,7 @@ simple_expr: | sum_expr | simple_expr OR_OR_SYM simple_expr { $$= new (YYTHD->mem_root) Item_func_concat($1, $3); } - | '+' simple_expr %prec NEG { $$= $2; } + | '+' simple_expr %prec NEG { $$= $2; } | '-' simple_expr %prec NEG { $$= new (YYTHD->mem_root) Item_func_neg($2); } | '~' simple_expr %prec NEG From 22b60ccb72af8b7b970bce1b7ceae455a85dfdb1 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 24 Aug 2007 19:17:29 -0300 Subject: [PATCH 127/194] Add test case for bug 29936 Stored Procedure DML ignores low_priority_updates setting. This test case uses the wait_condition helper (only available in 5.1) in order to wait till the select/update opens and locks the table. mysql-test/r/sp.result: Test case result for bug 29936 mysql-test/t/sp.test: Test case for bug 29936 --- mysql-test/r/sp.result | 23 +++++++++++++++ mysql-test/t/sp.test | 65 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) diff --git a/mysql-test/r/sp.result b/mysql-test/r/sp.result index 163bbb4aab4..9e00424e879 100644 --- a/mysql-test/r/sp.result +++ b/mysql-test/r/sp.result @@ -6546,4 +6546,27 @@ DROP VIEW v1; DROP FUNCTION f1; DROP FUNCTION f2; DROP TABLE t1; +drop table if exists t1; +drop procedure if exists p1; +create table t1 (value varchar(15)); +create procedure p1() update t1 set value='updated' where value='old'; +call p1(); +insert into t1 (value) values ("old"); +select get_lock('b26162',120); +get_lock('b26162',120) +1 +select 'rl_acquirer', value from t1 where get_lock('b26162',120);; +set session low_priority_updates=on; +call p1();; +select 'rl_contender', value from t1; +rl_contender value +rl_contender old +select release_lock('b26162'); +release_lock('b26162') +1 +rl_acquirer value +rl_acquirer old +drop procedure p1; +drop table t1; +set session low_priority_updates=default; End of 5.0 tests diff --git a/mysql-test/t/sp.test b/mysql-test/t/sp.test index 46ef6bc6ddd..37e3880cb82 100644 --- a/mysql-test/t/sp.test +++ b/mysql-test/t/sp.test @@ -7494,4 +7494,69 @@ DROP FUNCTION f1; DROP FUNCTION f2; DROP TABLE t1; +# +# Bug#29936 Stored Procedure DML ignores low_priority_updates setting +# + +--disable_warnings +drop table if exists t1; +drop procedure if exists p1; +--enable_warnings + +create table t1 (value varchar(15)); +create procedure p1() update t1 set value='updated' where value='old'; + +# load the procedure into sp cache and execute once +call p1(); + +insert into t1 (value) values ("old"); + +connect (rl_holder, localhost, root,,); +connect (rl_acquirer, localhost, root,,); +connect (rl_contender, localhost, root,,); +connect (rl_wait, localhost, root,,); + +connection rl_holder; +select get_lock('b26162',120); + +connection rl_acquirer; +--send select 'rl_acquirer', value from t1 where get_lock('b26162',120); + +# we must wait till this select opens and locks the tables +connection rl_wait; +let $wait_condition= + select count(*) = 1 from information_schema.processlist + where state = "User lock" and + info = "select 'rl_acquirer', value from t1 where get_lock('b26162',120)"; +--source include/wait_condition.inc + +connection default; +set session low_priority_updates=on; +--send call p1(); + +connection rl_wait; +let $wait_condition= + select count(*) = 1 from information_schema.processlist + where state = "Locked" and + info = "update t1 set value='updated' where value='old'"; +--source include/wait_condition.inc + +connection rl_contender; +select 'rl_contender', value from t1; + +connection rl_holder; +select release_lock('b26162'); + +connection rl_acquirer; +--reap +connection default; +--reap + +disconnect rl_holder; +disconnect rl_acquirer; +disconnect rl_wait; +drop procedure p1; +drop table t1; +set session low_priority_updates=default; + --echo End of 5.0 tests From bd55d4f17411212307be35fa51fcc551d261381c Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 27 Aug 2007 10:25:34 +0200 Subject: [PATCH 128/194] Bug#28560 mysql_upgrade test links /usr/local/mysql/lib libraries - Chop off .libs/ part of path if running in non installed builddir using libtool client/mysql_upgrade.c: Chop off .libs part of path to avoid executing "non relinked" binaries that would use the system installed dynamic libraries instead of the newly built ones. --- client/mysql_upgrade.c | 75 +++++++++++++++++++++++------------------- 1 file changed, 42 insertions(+), 33 deletions(-) diff --git a/client/mysql_upgrade.c b/client/mysql_upgrade.c index 13f5d2606a9..630267f1a5e 100644 --- a/client/mysql_upgrade.c +++ b/client/mysql_upgrade.c @@ -342,12 +342,6 @@ static my_bool get_full_path_to_executable(char* path) /* Look for the tool in the same directory as mysql_upgrade. - - When running in a not yet installed build the the program - will exist but it need to be invoked via it's libtool wrapper. - Check if the found tool can executed and if not look in the - directory one step higher up where the libtool wrapper normally - is found */ static void find_tool(char *tool_path, const char *tool_name) @@ -385,37 +379,52 @@ static void find_tool(char *tool_path, const char *tool_name) path[0]= 0; } } - do + + DBUG_PRINT("info", ("path: '%s'", path)); + + /* Chop off binary name (i.e mysql-upgrade) from path */ + dirname_part(path, path); + + /* + When running in a not yet installed build and using libtool, + the program(mysql_upgrade) will be in .libs/ and executed + through a libtool wrapper in order to use the dynamic libraries + from this build. The same must be done for the tools(mysql and + mysqlcheck). Thus if path ends in .libs/, step up one directory + and execute the tools from there + */ + path[max((strlen(path)-1), 0)]= 0; /* Chop off last / */ + if (strncmp(path + dirname_length(path), ".libs", 5) == 0) { - DBUG_PRINT("enter", ("path: %s", path)); + DBUG_PRINT("info", ("Chopping off .libs from '%s'", path)); - /* Chop off last char(since it might be a /) */ - path[max((strlen(path)-1), 0)]= 0; - - /* Chop off last dir part */ + /* Chop off .libs */ dirname_part(path, path); - - /* Format name of the tool to search for */ - fn_format(tool_path, tool_name, - path, "", MYF(MY_REPLACE_DIR)); - - verbose("Looking for '%s' in: %s", tool_name, tool_path); - - /* Make sure the tool exists */ - if (my_access(tool_path, F_OK) != 0) - die("Can't find '%s'", tool_path); - - /* - Make sure it can be executed, otherwise try again - in higher level directory - */ } - while(run_tool(tool_path, - &ds_tmp, /* Get output from command, discard*/ - "--help", - "2>&1", - IF_WIN("> NUL", "> /dev/null"), - NULL)); + + + DBUG_PRINT("info", ("path: '%s'", path)); + + /* Format name of the tool to search for */ + fn_format(tool_path, tool_name, + path, "", MYF(MY_REPLACE_DIR)); + + verbose("Looking for '%s' in: %s", tool_name, tool_path); + + /* Make sure the tool exists */ + if (my_access(tool_path, F_OK) != 0) + die("Can't find '%s'", tool_path); + + /* + Make sure it can be executed + */ + if (run_tool(tool_path, + &ds_tmp, /* Get output from command, discard*/ + "--help", + "2>&1", + IF_WIN("> NUL", "> /dev/null"), + NULL)) + die("Can't execute '%s'", tool_path); dynstr_free(&ds_tmp); From 234fe83d8edc5c5fd1fa765a0cbf4a709a3e818a Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 27 Aug 2007 11:20:31 +0200 Subject: [PATCH 129/194] Bug#28560 mysql_upgrade test links /usr/local/mysql/lib libraries - Remove disabling of mysql_upgrade mysql-test/t/disabled.def: Remove disabling of mysql_upgrade --- mysql-test/t/disabled.def | 1 - 1 file changed, 1 deletion(-) diff --git a/mysql-test/t/disabled.def b/mysql-test/t/disabled.def index c5aaa1ee0f5..0ba56a74f57 100644 --- a/mysql-test/t/disabled.def +++ b/mysql-test/t/disabled.def @@ -23,5 +23,4 @@ im_utils : BUG#28743 Instance manager generates warnings in test concurrent_innodb : BUG#21579 2006-08-11 mleich innodb_concurrent random failures with varying differences ctype_big5 : BUG#26711 2007-06-21 Lars Test has never worked on Double Whopper -mysql_upgrade : Bug#28560 test links to /usr/local/mysql/lib libraries, causes non-determinism and failures on ABI breakage federated_transactions : Bug#29523 Transactions do not work From fd99a7da1ff8805e79158e60d9ff9a7ddb67bf2e Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 27 Aug 2007 11:23:10 +0200 Subject: [PATCH 130/194] Bug#30029 mysql_upgrade fails for 5.0 -> 5.1.21, 5.1.20 -> 5.1.21 upgrades - Change to use '' to quote a string inside another string scripts/mysql_system_tables.sql: Change to use '' to quote string inside another string --- scripts/mysql_system_tables.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/mysql_system_tables.sql b/scripts/mysql_system_tables.sql index cd0882e3af4..81eb3340d32 100644 --- a/scripts/mysql_system_tables.sql +++ b/scripts/mysql_system_tables.sql @@ -65,7 +65,7 @@ CREATE TABLE IF NOT EXISTS procs_priv ( Host char(60) binary DEFAULT '' NOT NULL -- Create general_log if CSV is enabled. -SET @str = IF (@@have_csv = 'YES', 'CREATE TABLE IF NOT EXISTS general_log (event_time TIMESTAMP NOT NULL, user_host MEDIUMTEXT, thread_id INTEGER, server_id INTEGER, command_type VARCHAR(64), argument MEDIUMTEXT) engine=CSV CHARACTER SET utf8 comment="General log"', 'SET @dummy = 0'); +SET @str = IF (@@have_csv = 'YES', 'CREATE TABLE IF NOT EXISTS general_log (event_time TIMESTAMP NOT NULL, user_host MEDIUMTEXT, thread_id INTEGER, server_id INTEGER, command_type VARCHAR(64), argument MEDIUMTEXT) engine=CSV CHARACTER SET utf8 comment=''General log''', 'SET @dummy = 0'); PREPARE stmt FROM @str; EXECUTE stmt; @@ -73,7 +73,7 @@ DROP PREPARE stmt; -- Create slow_log if CSV is enabled. -SET @str = IF (@@have_csv = 'YES', 'CREATE TABLE IF NOT EXISTS slow_log (start_time TIMESTAMP NOT NULL, user_host MEDIUMTEXT NOT NULL, query_time TIME NOT NULL, lock_time TIME NOT NULL, rows_sent INTEGER NOT NULL, rows_examined INTEGER NOT NULL, db VARCHAR(512), last_insert_id INTEGER, insert_id INTEGER, server_id INTEGER, sql_text MEDIUMTEXT NOT NULL) engine=CSV CHARACTER SET utf8 comment="Slow log"', 'SET @dummy = 0'); +SET @str = IF (@@have_csv = 'YES', 'CREATE TABLE IF NOT EXISTS slow_log (start_time TIMESTAMP NOT NULL, user_host MEDIUMTEXT NOT NULL, query_time TIME NOT NULL, lock_time TIME NOT NULL, rows_sent INTEGER NOT NULL, rows_examined INTEGER NOT NULL, db VARCHAR(512), last_insert_id INTEGER, insert_id INTEGER, server_id INTEGER, sql_text MEDIUMTEXT NOT NULL) engine=CSV CHARACTER SET utf8 comment=''Slow log''', 'SET @dummy = 0'); PREPARE stmt FROM @str; EXECUTE stmt; From f237b984985d09146f6e980eb59d880fe231911b Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 27 Aug 2007 11:27:03 +0200 Subject: [PATCH 131/194] Bug#30487 mysql_upgrade reports misleading errors - Update result file to include these "misleading errors", better to run mysql_upgrade with them than not at all. mysql-test/r/mysql_upgrade.result: Update result file for mysql_upgrade after removing it's disabling --- mysql-test/r/mysql_upgrade.result | 32 +++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/mysql-test/r/mysql_upgrade.result b/mysql-test/r/mysql_upgrade.result index 30ece1b121a..31846f68b7b 100644 --- a/mysql-test/r/mysql_upgrade.result +++ b/mysql-test/r/mysql_upgrade.result @@ -3,7 +3,9 @@ mysql.columns_priv OK mysql.db OK mysql.event OK mysql.func OK -mysql.general_log OK +mysql.general_log +Error : You can't use locks with log tables. +status : OK mysql.help_category OK mysql.help_keyword OK mysql.help_relation OK @@ -14,7 +16,9 @@ mysql.plugin OK mysql.proc OK mysql.procs_priv OK mysql.servers OK -mysql.slow_log OK +mysql.slow_log +Error : You can't use locks with log tables. +status : OK mysql.tables_priv OK mysql.time_zone OK mysql.time_zone_leap_second OK @@ -29,7 +33,9 @@ mysql.columns_priv OK mysql.db OK mysql.event OK mysql.func OK -mysql.general_log OK +mysql.general_log +Error : You can't use locks with log tables. +status : OK mysql.help_category OK mysql.help_keyword OK mysql.help_relation OK @@ -40,7 +46,9 @@ mysql.plugin OK mysql.proc OK mysql.procs_priv OK mysql.servers OK -mysql.slow_log OK +mysql.slow_log +Error : You can't use locks with log tables. +status : OK mysql.tables_priv OK mysql.time_zone OK mysql.time_zone_leap_second OK @@ -55,7 +63,9 @@ mysql.columns_priv OK mysql.db OK mysql.event OK mysql.func OK -mysql.general_log OK +mysql.general_log +Error : You can't use locks with log tables. +status : OK mysql.help_category OK mysql.help_keyword OK mysql.help_relation OK @@ -66,7 +76,9 @@ mysql.plugin OK mysql.proc OK mysql.procs_priv OK mysql.servers OK -mysql.slow_log OK +mysql.slow_log +Error : You can't use locks with log tables. +status : OK mysql.tables_priv OK mysql.time_zone OK mysql.time_zone_leap_second OK @@ -83,7 +95,9 @@ mysql.columns_priv OK mysql.db OK mysql.event OK mysql.func OK -mysql.general_log OK +mysql.general_log +Error : You can't use locks with log tables. +status : OK mysql.help_category OK mysql.help_keyword OK mysql.help_relation OK @@ -94,7 +108,9 @@ mysql.plugin OK mysql.proc OK mysql.procs_priv OK mysql.servers OK -mysql.slow_log OK +mysql.slow_log +Error : You can't use locks with log tables. +status : OK mysql.tables_priv OK mysql.time_zone OK mysql.time_zone_leap_second OK From 6fdcb4c7b3a095bcfb2f8ce257da302007b62ad9 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 27 Aug 2007 11:31:49 +0200 Subject: [PATCH 132/194] Bug#29805 mysql_upgrade test fail if ~/.my.cnf contain a password - "mysql" and "mysqlcheck" should not read defaults file client/mysql_upgrade.c: Instruct "mysql" and "mysqlcheck" that is invoked by "mysql_upgrade" not to read defaults file, they should get all the parameters they need from mysql_upgrade(that read the default file) --- client/mysql_upgrade.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/client/mysql_upgrade.c b/client/mysql_upgrade.c index 630267f1a5e..fb30c6f2613 100644 --- a/client/mysql_upgrade.c +++ b/client/mysql_upgrade.c @@ -455,6 +455,7 @@ static int run_query(const char *query, DYNAMIC_STRING *ds_res, ret= run_tool(mysql_path, ds_res, + "--no-defaults", ds_args.str, "--database=mysql", "--batch", /* Turns off pager etc. */ @@ -617,6 +618,7 @@ static int run_mysqlcheck_upgrade(void) verbose("Running 'mysqlcheck'..."); return run_tool(mysqlcheck_path, NULL, /* Send output from mysqlcheck directly to screen */ + "--no-defaults", ds_args.str, "--check-upgrade", "--all-databases", From 7388ea3c56a268387e60fc28b671d664ecfa8ad4 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 27 Aug 2007 11:38:32 +0200 Subject: [PATCH 133/194] adjust version number configure.in: adjust version number after 5.0.48 clone-off --- configure.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configure.in b/configure.in index 1dff42cbfb1..f0b7089f968 100644 --- a/configure.in +++ b/configure.in @@ -7,7 +7,7 @@ AC_INIT(sql/mysqld.cc) AC_CANONICAL_SYSTEM # The Docs Makefile.am parses this line! # remember to also change ndb version below and update version.c in ndb -AM_INIT_AUTOMAKE(mysql, 5.0.48) +AM_INIT_AUTOMAKE(mysql, 5.0.50) AM_CONFIG_HEADER([include/config.h:config.h.in]) PROTOCOL_VERSION=10 @@ -23,7 +23,7 @@ NDB_SHARED_LIB_VERSION=$NDB_SHARED_LIB_MAJOR_VERSION:0:0 # ndb version NDB_VERSION_MAJOR=5 NDB_VERSION_MINOR=0 -NDB_VERSION_BUILD=48 +NDB_VERSION_BUILD=50 NDB_VERSION_STATUS="" # Set all version vars based on $VERSION. How do we do this more elegant ? From caf6f3d9e4db46a7bdb17030ca263fa2ed9b910c Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 27 Aug 2007 13:16:39 +0200 Subject: [PATCH 134/194] Cset exclude: msvensson@pilot.(none)|ChangeSet|20070827092310|49459 scripts/mysql_system_tables.sql: Exclude --- scripts/mysql_system_tables.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/mysql_system_tables.sql b/scripts/mysql_system_tables.sql index 81eb3340d32..cd0882e3af4 100644 --- a/scripts/mysql_system_tables.sql +++ b/scripts/mysql_system_tables.sql @@ -65,7 +65,7 @@ CREATE TABLE IF NOT EXISTS procs_priv ( Host char(60) binary DEFAULT '' NOT NULL -- Create general_log if CSV is enabled. -SET @str = IF (@@have_csv = 'YES', 'CREATE TABLE IF NOT EXISTS general_log (event_time TIMESTAMP NOT NULL, user_host MEDIUMTEXT, thread_id INTEGER, server_id INTEGER, command_type VARCHAR(64), argument MEDIUMTEXT) engine=CSV CHARACTER SET utf8 comment=''General log''', 'SET @dummy = 0'); +SET @str = IF (@@have_csv = 'YES', 'CREATE TABLE IF NOT EXISTS general_log (event_time TIMESTAMP NOT NULL, user_host MEDIUMTEXT, thread_id INTEGER, server_id INTEGER, command_type VARCHAR(64), argument MEDIUMTEXT) engine=CSV CHARACTER SET utf8 comment="General log"', 'SET @dummy = 0'); PREPARE stmt FROM @str; EXECUTE stmt; @@ -73,7 +73,7 @@ DROP PREPARE stmt; -- Create slow_log if CSV is enabled. -SET @str = IF (@@have_csv = 'YES', 'CREATE TABLE IF NOT EXISTS slow_log (start_time TIMESTAMP NOT NULL, user_host MEDIUMTEXT NOT NULL, query_time TIME NOT NULL, lock_time TIME NOT NULL, rows_sent INTEGER NOT NULL, rows_examined INTEGER NOT NULL, db VARCHAR(512), last_insert_id INTEGER, insert_id INTEGER, server_id INTEGER, sql_text MEDIUMTEXT NOT NULL) engine=CSV CHARACTER SET utf8 comment=''Slow log''', 'SET @dummy = 0'); +SET @str = IF (@@have_csv = 'YES', 'CREATE TABLE IF NOT EXISTS slow_log (start_time TIMESTAMP NOT NULL, user_host MEDIUMTEXT NOT NULL, query_time TIME NOT NULL, lock_time TIME NOT NULL, rows_sent INTEGER NOT NULL, rows_examined INTEGER NOT NULL, db VARCHAR(512), last_insert_id INTEGER, insert_id INTEGER, server_id INTEGER, sql_text MEDIUMTEXT NOT NULL) engine=CSV CHARACTER SET utf8 comment="Slow log"', 'SET @dummy = 0'); PREPARE stmt FROM @str; EXECUTE stmt; From 88c778127e04d6fcae19f6b79376e9d3ea336515 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 27 Aug 2007 13:39:34 +0200 Subject: [PATCH 135/194] Bug#28401 mysql_upgrade Failed with STRICT_ALL_TABLES, ANSI_QUOTES and NO_ZERO_DATE - Set sql_mode to default when creating system tables scripts/mysql_system_tables.sql: set sql_mode = "" when creating the system tables --- scripts/mysql_system_tables.sql | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/mysql_system_tables.sql b/scripts/mysql_system_tables.sql index cd0882e3af4..f7b23e4e7ae 100644 --- a/scripts/mysql_system_tables.sql +++ b/scripts/mysql_system_tables.sql @@ -2,6 +2,7 @@ -- The system tables of MySQL Server -- +set sql_mode=''; set storage_engine=myisam; CREATE TABLE IF NOT EXISTS db ( Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Select_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Insert_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Update_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Delete_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Create_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Drop_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Grant_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, References_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Index_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Alter_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Create_tmp_table_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Lock_tables_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Create_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Show_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Event_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Trigger_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, PRIMARY KEY Host (Host,Db,User), KEY User (User) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Database privileges'; From 1413fdb24e0acc72299e95daff983364e17c3796 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 27 Aug 2007 13:55:45 +0200 Subject: [PATCH 136/194] Enable abi_check for 5.1 - Run icheck on all files in HEADERS_ABI list - Update reference include/Makefile.am: Enable abi_check for external API header files include/mysql_h.ic: Update abi_check reference --- include/Makefile.am | 12 +- include/mysql_h.ic | 1073 +++++++++++++++++++++++++------------------ 2 files changed, 643 insertions(+), 442 deletions(-) diff --git a/include/Makefile.am b/include/Makefile.am index fe54a7e35e0..2775932f46d 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -15,18 +15,17 @@ # Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, # MA 02111-1307, USA -# FIXME 'abi_check' should be in BUILT_SOURCES, disabled for now -BUILT_SOURCES = $(HEADERS_GEN) link_sources +BUILT_SOURCES = $(HEADERS_GEN) link_sources abi_check HEADERS_GEN = mysql_version.h my_config.h HEADERS_ABI = mysql.h mysql_com.h mysql_time.h \ - my_list.h my_alloc.h typelib.h + my_list.h my_alloc.h typelib.h mysql/plugin.h pkginclude_HEADERS = $(HEADERS_ABI) my_dbug.h m_string.h my_sys.h \ my_xml.h mysql_embed.h \ my_pthread.h my_no_pthread.h \ decimal.h errmsg.h my_global.h my_net.h \ my_getopt.h sslopt-longopts.h my_dir.h \ sslopt-vars.h sslopt-case.h sql_common.h keycache.h \ - m_ctype.h mysql/plugin.h my_attribute.h $(HEADERS_GEN) + m_ctype.h my_attribute.h $(HEADERS_GEN) noinst_HEADERS = config-win.h config-netware.h \ heap.h my_bitmap.h my_uctype.h \ myisam.h myisampack.h myisammrg.h ft_global.h\ @@ -72,9 +71,8 @@ dist-hook: abi_check: $(HEADERS_ABI) mysql_version.h mysql_h.ic @set -ex; \ if [ @ICHECK@ != no ] ; then \ - @ICHECK@ --canonify --skip-from-re /usr/ -o $@.ic mysql.h; \ - @ICHECK@ --compare mysql_h.ic $@.ic; \ - $(RM) -f $@.ic; \ + @ICHECK@ --canonify --skip-from-re /usr/ -o $@ $(HEADERS_ABI); \ + @ICHECK@ --compare mysql_h.ic $@; \ fi; \ touch abi_check; diff --git a/include/mysql_h.ic b/include/mysql_h.ic index 7d16a886fd8..8b1c36fdaab 100644 --- a/include/mysql_h.ic +++ b/include/mysql_h.ic @@ -4,16 +4,27 @@ struct st_list; struct st_mem_root; struct st_mysql; struct st_mysql_bind; +struct st_mysql_daemon; struct st_mysql_data; struct st_mysql_field; +struct st_mysql_ftparser; +struct st_mysql_ftparser_boolean_info; +struct st_mysql_ftparser_param; +struct st_mysql_information_schema; +struct st_mysql_lex_string; struct st_mysql_manager; struct st_mysql_methods; struct st_mysql_options; struct st_mysql_parameters; +struct st_mysql_plugin; struct st_mysql_res; struct st_mysql_rows; +struct st_mysql_show_var; struct st_mysql_stmt; +struct st_mysql_storage_engine; struct st_mysql_time; +struct st_mysql_value; +struct st_mysql_xid; struct st_net; struct st_typelib; struct st_udf_args; @@ -22,7 +33,10 @@ struct st_used_mem; enum Item_result; enum enum_cursor_type; enum enum_field_types; +enum enum_ft_token_type; +enum enum_ftparser_mode; enum enum_mysql_set_option; +enum enum_mysql_show_type; enum enum_mysql_stmt_state; enum enum_mysql_timestamp_type; enum enum_server_command; @@ -32,65 +46,79 @@ enum mysql_option; enum mysql_protocol_type; enum mysql_rpl_type; enum mysql_status; -# 134 "mysql.h" +# 139 "mysql.h" typedef struct st_mysql_rows MYSQL_ROWS; -# 24 "my_list.h" +# 23 "my_list.h" typedef struct st_list LIST; -# 35 "my_alloc.h" +# 34 "my_alloc.h" typedef struct st_mem_root MEM_ROOT; -# 251 "mysql.h" +# 258 "mysql.h" typedef struct st_mysql MYSQL; -# 653 "mysql.h" +# 664 "mysql.h" typedef struct st_mysql_bind MYSQL_BIND; -# 93 "mysql.h" +# 95 "mysql.h" typedef struct st_mysql_field MYSQL_FIELD; -# 117 "mysql.h" +# 120 "mysql.h" typedef unsigned int MYSQL_FIELD_OFFSET; -# 340 "mysql.h" +# 35 "mysql/plugin.h" +typedef struct st_mysql_lex_string MYSQL_LEX_STRING; +# 348 "mysql.h" typedef struct st_mysql_manager MYSQL_MANAGER; -# 354 "mysql.h" +# 363 "mysql.h" typedef struct st_mysql_parameters MYSQL_PARAMETERS; -# 309 "mysql.h" +# 316 "mysql.h" typedef struct st_mysql_res MYSQL_RES; -# 116 "mysql.h" +# 119 "mysql.h" typedef char * * MYSQL_ROW; -# 140 "mysql.h" -typedef MYSQL_ROWS * MYSQL_ROW_OFFSET; -# 681 "mysql.h" -typedef struct st_mysql_stmt MYSQL_STMT; -# 236 "mysql.h" -typedef struct character_set MY_CHARSET_INFO; -# 184 "mysql_com.h" -typedef struct st_net NET; -# 23 "typelib.h" -typedef struct st_typelib TYPELIB; -# 174 "mysql_com.h" -typedef struct st_vio Vio; -# 57 "mysql.h" -typedef char * gptr; -# 29 "my_list.h" -typedef int (* list_walk_action)(void *, void *); -# 48 "mysql.h" -typedef char my_bool; -# 63 "mysql.h" -typedef int my_socket; -# 125 "mysql.h" -typedef unsigned long long int my_ulonglong; -# 144 "mysql.h" -typedef struct embedded_query_result EMBEDDED_QUERY_RESULT; # 145 "mysql.h" +typedef MYSQL_ROWS * MYSQL_ROW_OFFSET; +# 693 "mysql.h" +typedef struct st_mysql_stmt MYSQL_STMT; +# 52 "mysql/plugin.h" +typedef struct st_mysql_xid MYSQL_XID; +# 243 "mysql.h" +typedef struct character_set MY_CHARSET_INFO; +# 187 "mysql_com.h" +typedef struct st_net NET; +# 22 "typelib.h" +typedef struct st_typelib TYPELIB; +# 177 "mysql_com.h" +typedef struct st_vio Vio; +# 28 "my_list.h" +typedef int (* list_walk_action)(void *, void *); +# 51 "mysql.h" +typedef char my_bool; +# 65 "mysql.h" +typedef int my_socket; +# 128 "mysql.h" +typedef unsigned long long int my_ulonglong; +# 214 "/usr/lib/gcc/i486-linux-gnu/4.1.2/include/stddef.h" +typedef unsigned int size_t; +# 149 "mysql.h" +typedef struct embedded_query_result EMBEDDED_QUERY_RESULT; +# 150 "mysql.h" typedef struct st_mysql_data MYSQL_DATA; -# 750 "mysql.h" +# 495 "mysql/plugin.h" +typedef struct st_mysql_ftparser_boolean_info MYSQL_FTPARSER_BOOLEAN_INFO; +# 557 "mysql/plugin.h" +typedef struct st_mysql_ftparser_param MYSQL_FTPARSER_PARAM; +# 763 "mysql.h" typedef struct st_mysql_methods MYSQL_METHODS; -# 48 "mysql_time.h" +# 47 "mysql_time.h" typedef struct st_mysql_time MYSQL_TIME; -# 375 "mysql_com.h" +# 383 "mysql_com.h" typedef struct st_udf_args UDF_ARGS; -# 388 "mysql_com.h" +# 397 "mysql_com.h" typedef struct st_udf_init UDF_INIT; -# 27 "my_alloc.h" +# 26 "my_alloc.h" typedef struct st_used_mem USED_MEM; -# 236 "mysql.h" +# 123 "mysql/plugin.h" +typedef int (* mysql_show_var_func)(void *, struct st_mysql_show_var *, char *); +# 170 "mysql/plugin.h" +typedef int (* mysql_var_check_func)(void * thd, struct st_mysql_sys_var * var, void * save, struct st_mysql_value * value); +# 188 "mysql/plugin.h" +typedef void (* mysql_var_update_func)(void * thd, struct st_mysql_sys_var * var, void * var_ptr, void * save); +# 243 "mysql.h" struct __attribute__((aligned(__alignof__(unsigned int)), aligned(__alignof__(void *)))) character_set { unsigned int number; @@ -102,7 +130,7 @@ struct __attribute__((aligned(__alignof__(unsigned int)), aligned(__alignof__(vo unsigned int mbminlen; unsigned int mbmaxlen; }; -# 361 "mysql_com.h" +# 369 "mysql_com.h" struct __attribute__((aligned(__alignof__(unsigned long int)), aligned(__alignof__(double)))) rand_struct { unsigned long int seed1; @@ -110,30 +138,30 @@ struct __attribute__((aligned(__alignof__(unsigned long int)), aligned(__alignof unsigned long int max_value; double max_value_dbl; }; -# 24 "my_list.h" +# 23 "my_list.h" struct __attribute__((aligned(__alignof__(void *)))) st_list { struct st_list * prev; struct st_list * next; void * data; }; -# 35 "my_alloc.h" +# 34 "my_alloc.h" struct __attribute__((aligned(__alignof__(void *)), aligned(__alignof__(unsigned int)))) st_mem_root { USED_MEM * free; USED_MEM * used; USED_MEM * pre_alloc; - unsigned int min_malloc; - unsigned int block_size; + size_t min_malloc; + size_t block_size; unsigned int block_num; unsigned int first_block_usage; void (* error_handler)(void); }; -# 251 "mysql.h" +# 258 "mysql.h" struct __attribute__((aligned(__alignof__(void *)), aligned(__alignof__(unsigned long long int)))) st_mysql { NET net; - gptr connector_fd; + unsigned char * connector_fd; char * host; char * user; char * passwd; @@ -173,39 +201,47 @@ struct __attribute__((aligned(__alignof__(void *)), aligned(__alignof__(unsigned void * thd; my_bool * unbuffered_fetch_owner; char * info_buffer; + void * extension; }; -# 653 "mysql.h" +# 664 "mysql.h" struct __attribute__((aligned(__alignof__(void *)), aligned(__alignof__(unsigned long int)))) st_mysql_bind { unsigned long int * length; my_bool * is_null; void * buffer; my_bool * error; - enum enum_field_types buffer_type; - unsigned long int buffer_length; unsigned char * row_ptr; + void (* store_param_func)(NET * net, struct st_mysql_bind * param); + void (* fetch_result)(struct st_mysql_bind *, MYSQL_FIELD *, unsigned char * * row); + void (* skip_result)(struct st_mysql_bind *, MYSQL_FIELD *, unsigned char * * row); + unsigned long int buffer_length; unsigned long int offset; unsigned long int length_value; unsigned int param_number; unsigned int pack_length; + enum enum_field_types buffer_type; my_bool error_value; my_bool is_unsigned; my_bool long_data_used; my_bool is_null_value; - void (* store_param_func)(NET * net, struct st_mysql_bind * param); - void (* fetch_result)(struct st_mysql_bind *, MYSQL_FIELD *, unsigned char * * row); - void (* skip_result)(struct st_mysql_bind *, MYSQL_FIELD *, unsigned char * * row); + void * extension; }; -# 145 "mysql.h" -struct __attribute__((aligned(__alignof__(unsigned long long int)), aligned(__alignof__(void *)))) st_mysql_data +# 628 "mysql/plugin.h" +struct __attribute__((aligned(__alignof__(int)))) st_mysql_daemon { + int interface_version; + }; +# 150 "mysql.h" +struct __attribute__((aligned(__alignof__(void *)), aligned(__alignof__(unsigned long long int)))) st_mysql_data + { + MYSQL_ROWS * data; + struct embedded_query_result * embedded_info; + MEM_ROOT alloc; my_ulonglong rows; unsigned int fields; - MYSQL_ROWS * data; - MEM_ROOT alloc; - struct embedded_query_result * embedded_info; + void * extension; }; -# 93 "mysql.h" +# 95 "mysql.h" struct __attribute__((aligned(__alignof__(void *)), aligned(__alignof__(unsigned long int)))) st_mysql_field { char * name; @@ -228,30 +264,75 @@ struct __attribute__((aligned(__alignof__(void *)), aligned(__alignof__(unsigned unsigned int decimals; unsigned int charsetnr; enum enum_field_types type; + void * extension; }; -# 340 "mysql.h" +# 581 "mysql/plugin.h" +struct __attribute__((aligned(__alignof__(int)), aligned(__alignof__(void *)))) st_mysql_ftparser + { + int interface_version; + int (* parse)(MYSQL_FTPARSER_PARAM * param); + int (* init)(MYSQL_FTPARSER_PARAM * param); + int (* deinit)(MYSQL_FTPARSER_PARAM * param); + }; +# 495 "mysql/plugin.h" +struct __attribute__((aligned(__alignof__(int)), aligned(__alignof__(void *)))) st_mysql_ftparser_boolean_info + { + enum enum_ft_token_type type; + int yesno; + int weight_adjust; + char wasign; + char trunc; + char prev; + char * quot; + }; +# 557 "mysql/plugin.h" +struct __attribute__((aligned(__alignof__(void *)), aligned(__alignof__(int)))) st_mysql_ftparser_param + { + int (* mysql_parse)(struct st_mysql_ftparser_param *, char * doc, int); + int (* mysql_add_word)(struct st_mysql_ftparser_param *, char * word, int, MYSQL_FTPARSER_BOOLEAN_INFO * boolean_info); + void * ftparser_state; + void * mysql_ftparam; + struct charset_info_st * cs; + char * doc; + int length; + int flags; + enum enum_ftparser_mode mode; + }; +# 638 "mysql/plugin.h" +struct __attribute__((aligned(__alignof__(int)))) st_mysql_information_schema + { + int interface_version; + }; +# 29 "mysql/plugin.h" +struct __attribute__((aligned(__alignof__(void *)), aligned(__alignof__(unsigned int)))) st_mysql_lex_string + { + char * str; + unsigned int length; + }; +# 348 "mysql.h" struct __attribute__((aligned(__alignof__(void *)), aligned(__alignof__(unsigned long int)))) st_mysql_manager { NET net; char * host; char * user; char * passwd; - unsigned int port; - my_bool free_me; - my_bool eof; - int cmd_status; - int last_errno; char * net_buf; char * net_buf_pos; char * net_data_end; + unsigned int port; + int cmd_status; + int last_errno; int net_buf_size; + my_bool free_me; + my_bool eof; char last_error[256]; + void * extension; }; -# 750 "mysql.h" +# 763 "mysql.h" struct __attribute__((aligned(__alignof__(void *)))) st_mysql_methods { my_bool (* read_query_result)(MYSQL * mysql); - my_bool (* advanced_command)(MYSQL * mysql, enum enum_server_command, char const * header, unsigned long int, char const * arg, unsigned long int, my_bool, MYSQL_STMT * stmt); + my_bool (* advanced_command)(MYSQL * mysql, enum enum_server_command, unsigned char const * header, unsigned long int, unsigned char const * arg, unsigned long int, my_bool, MYSQL_STMT * stmt); MYSQL_DATA * (* read_rows)(MYSQL * mysql, MYSQL_FIELD * mysql_fields, unsigned int); MYSQL_RES * (* use_result)(MYSQL * mysql); void (* fetch_lengths)(unsigned long int * to, MYSQL_ROW, unsigned int); @@ -267,7 +348,7 @@ struct __attribute__((aligned(__alignof__(void *)))) st_mysql_methods int (* read_change_user_result)(MYSQL * mysql, char * buff, char const * passwd); int (* read_rows_from_cursor)(MYSQL_STMT * stmt); }; -# 167 "mysql.h" +# 173 "mysql.h" struct __attribute__((aligned(__alignof__(unsigned long int)), aligned(__alignof__(void *)))) st_mysql_options { unsigned int connect_timeout; @@ -309,14 +390,32 @@ struct __attribute__((aligned(__alignof__(unsigned long int)), aligned(__alignof void (* local_infile_end)(void); int (* local_infile_error)(void *, char *, unsigned int); void * local_infile_userdata; + void * extension; }; -# 354 "mysql.h" +# 363 "mysql.h" struct __attribute__((aligned(__alignof__(void *)))) st_mysql_parameters { unsigned long int * p_max_allowed_packet; unsigned long int * p_net_buffer_length; + void * extension; }; -# 309 "mysql.h" +# 384 "mysql/plugin.h" +struct __attribute__((aligned(__alignof__(int)), aligned(__alignof__(void *)))) st_mysql_plugin + { + int type; + void * info; + char const * name; + char const * author; + char const * descr; + int license; + int (* init)(void); + int (* deinit)(void); + unsigned int version; + struct st_mysql_show_var * status_vars; + struct st_mysql_sys_var * * system_vars; + void * __reserved1; + }; +# 316 "mysql.h" struct __attribute__((aligned(__alignof__(unsigned long long int)), aligned(__alignof__(void *)))) st_mysql_res { my_ulonglong row_count; @@ -325,23 +424,31 @@ struct __attribute__((aligned(__alignof__(unsigned long long int)), aligned(__al MYSQL_ROWS * data_cursor; unsigned long int * lengths; MYSQL * handle; + struct st_mysql_methods const * methods; + MYSQL_ROW row; + MYSQL_ROW current_row; MEM_ROOT field_alloc; unsigned int field_count; unsigned int current_field; - MYSQL_ROW row; - MYSQL_ROW current_row; my_bool eof; my_bool unbuffered_fetch_cancelled; - struct st_mysql_methods const * methods; + void * extension; }; -# 134 "mysql.h" +# 139 "mysql.h" struct __attribute__((aligned(__alignof__(void *)), aligned(__alignof__(unsigned long int)))) st_mysql_rows { struct st_mysql_rows * next; MYSQL_ROW data; unsigned long int length; }; -# 681 "mysql.h" +# 116 "mysql/plugin.h" +struct __attribute__((aligned(__alignof__(void *)))) st_mysql_show_var + { + char const * name; + char * value; + enum enum_mysql_show_type type; + }; +# 693 "mysql.h" struct __attribute__((aligned(__alignof__(void *)), aligned(__alignof__(unsigned long long int)))) st_mysql_stmt { MEM_ROOT mem_root; @@ -352,9 +459,9 @@ struct __attribute__((aligned(__alignof__(void *)), aligned(__alignof__(unsigned MYSQL_FIELD * fields; MYSQL_DATA result; MYSQL_ROWS * data_cursor; + int (* read_row_func)(struct st_mysql_stmt * stmt, unsigned char * * row); my_ulonglong affected_rows; my_ulonglong insert_id; - int (* read_row_func)(struct st_mysql_stmt * stmt, unsigned char * * row); unsigned long int stmt_id; unsigned long int flags; unsigned long int prefetch_rows; @@ -370,8 +477,14 @@ struct __attribute__((aligned(__alignof__(void *)), aligned(__alignof__(unsigned unsigned char bind_result_done; my_bool unbuffered_fetch_cancelled; my_bool update_max_length; + void * extension; }; -# 48 "mysql_time.h" +# 616 "mysql/plugin.h" +struct __attribute__((aligned(__alignof__(int)))) st_mysql_storage_engine + { + int interface_version; + }; +# 47 "mysql_time.h" struct __attribute__((aligned(__alignof__(unsigned long int)))) st_mysql_time { unsigned int year; @@ -384,7 +497,23 @@ struct __attribute__((aligned(__alignof__(unsigned long int)))) st_mysql_time my_bool neg; enum enum_mysql_timestamp_type time_type; }; -# 184 "mysql_com.h" +# 658 "mysql/plugin.h" +struct __attribute__((aligned(__alignof__(void *)))) st_mysql_value + { + int (* value_type)(struct st_mysql_value *); + char const * (* val_str)(struct st_mysql_value *, char * buffer, int * length); + int (* val_real)(struct st_mysql_value *, double * realbuf); + int (* val_int)(struct st_mysql_value *, long long int * intbuf); + }; +# 46 "mysql/plugin.h" +struct __attribute__((aligned(__alignof__(long int)))) st_mysql_xid + { + long int formatID; + long int gtrid_length; + long int bqual_length; + char data[128]; + }; +# 187 "mysql_com.h" struct __attribute__((aligned(__alignof__(void *)), aligned(__alignof__(unsigned long int)))) st_net { Vio * vio; @@ -393,6 +522,10 @@ struct __attribute__((aligned(__alignof__(void *)), aligned(__alignof__(unsigned unsigned char * write_pos; unsigned char * read_pos; my_socket fd; + unsigned long int remain_in_buf; + unsigned long int length; + unsigned long int buf_length; + unsigned long int where_b; unsigned long int max_packet; unsigned long int max_packet_size; unsigned int pkt_nr; @@ -401,26 +534,23 @@ struct __attribute__((aligned(__alignof__(void *)), aligned(__alignof__(unsigned unsigned int read_timeout; unsigned int retry_count; int fcntl; - my_bool compress; - unsigned long int remain_in_buf; - unsigned long int length; - unsigned long int buf_length; - unsigned long int where_b; unsigned int * return_status; unsigned char reading_or_writing; char save_char; my_bool no_send_ok; my_bool no_send_eof; + my_bool compress; my_bool no_send_error; - char last_error[512]; - char sqlstate[(5 + 1)]; + unsigned char * query_cache_query; unsigned int last_errno; unsigned char error; - gptr query_cache_query; my_bool report_error; my_bool return_errno; + char last_error[512]; + char sqlstate[(5 + 1)]; + void * extension; }; -# 23 "typelib.h" +# 22 "typelib.h" struct __attribute__((aligned(__alignof__(unsigned int)), aligned(__alignof__(void *)))) st_typelib { unsigned int count; @@ -428,7 +558,7 @@ struct __attribute__((aligned(__alignof__(unsigned int)), aligned(__alignof__(vo char const * * type_names; unsigned int * type_lengths; }; -# 375 "mysql_com.h" +# 383 "mysql_com.h" struct __attribute__((aligned(__alignof__(unsigned int)), aligned(__alignof__(void *)))) st_udf_args { unsigned int arg_count; @@ -438,8 +568,9 @@ struct __attribute__((aligned(__alignof__(unsigned int)), aligned(__alignof__(vo char * maybe_null; char * * attributes; unsigned long int * attribute_lengths; + void * extension; }; -# 388 "mysql_com.h" +# 397 "mysql_com.h" struct __attribute__((aligned(__alignof__(unsigned long int)), aligned(__alignof__(void *)))) st_udf_init { my_bool maybe_null; @@ -447,15 +578,16 @@ struct __attribute__((aligned(__alignof__(unsigned long int)), aligned(__alignof unsigned long int max_length; char * ptr; my_bool const_item; + void * extension; }; -# 27 "my_alloc.h" +# 26 "my_alloc.h" struct __attribute__((aligned(__alignof__(void *)), aligned(__alignof__(unsigned int)))) st_used_mem { struct st_used_mem * next; unsigned int left; unsigned int size; }; -# 372 "mysql_com.h" +# 380 "mysql_com.h" enum Item_result { STRING_RESULT = 0, @@ -464,7 +596,7 @@ enum Item_result ROW_RESULT = 3, DECIMAL_RESULT = 4, }; -# 318 "mysql_com.h" +# 321 "mysql_com.h" enum enum_cursor_type { CURSOR_TYPE_NO_CURSOR = 0, @@ -472,7 +604,7 @@ enum enum_cursor_type CURSOR_TYPE_FOR_UPDATE = 2, CURSOR_TYPE_SCROLLABLE = 4, }; -# 231 "mysql_com.h" +# 234 "mysql_com.h" enum enum_field_types { MYSQL_TYPE_DECIMAL = 0, @@ -503,13 +635,43 @@ enum enum_field_types MYSQL_TYPE_STRING = 254, MYSQL_TYPE_GEOMETRY = 255, }; -# 328 "mysql_com.h" +# 455 "mysql/plugin.h" +enum enum_ft_token_type + { + FT_TOKEN_EOF = 0, + FT_TOKEN_WORD = 1, + FT_TOKEN_LEFT_PAREN = 2, + FT_TOKEN_RIGHT_PAREN = 3, + FT_TOKEN_STOPWORD = 4, + }; +# 407 "mysql/plugin.h" +enum enum_ftparser_mode + { + MYSQL_FTPARSER_SIMPLE_MODE = 0, + MYSQL_FTPARSER_WITH_STOPWORDS = 1, + MYSQL_FTPARSER_FULL_BOOLEAN_INFO = 2, + }; +# 331 "mysql_com.h" enum enum_mysql_set_option { MYSQL_OPTION_MULTI_STATEMENTS_ON = 0, MYSQL_OPTION_MULTI_STATEMENTS_OFF = 1, }; -# 583 "mysql.h" +# 109 "mysql/plugin.h" +enum enum_mysql_show_type + { + SHOW_UNDEF = 0, + SHOW_BOOL = 1, + SHOW_INT = 2, + SHOW_LONG = 3, + SHOW_LONGLONG = 4, + SHOW_CHAR = 5, + SHOW_CHAR_PTR = 6, + SHOW_ARRAY = 7, + SHOW_FUNC = 8, + SHOW_DOUBLE = 9, + }; +# 594 "mysql.h" enum enum_mysql_stmt_state { MYSQL_STMT_INIT_DONE = 1, @@ -517,7 +679,7 @@ enum enum_mysql_stmt_state MYSQL_STMT_EXECUTE_DONE = 3, MYSQL_STMT_FETCH_DONE = 4, }; -# 29 "mysql_time.h" +# 28 "mysql_time.h" enum enum_mysql_timestamp_type { MYSQL_TIMESTAMP_NONE = -(2), @@ -526,7 +688,7 @@ enum enum_mysql_timestamp_type MYSQL_TIMESTAMP_DATETIME = 1, MYSQL_TIMESTAMP_TIME = 2, }; -# 52 "mysql_com.h" +# 55 "mysql_com.h" enum enum_server_command { COM_SLEEP = 0, @@ -561,14 +723,14 @@ enum enum_server_command COM_DAEMON = 29, COM_END = 30, }; -# 727 "mysql.h" +# 740 "mysql.h" enum enum_stmt_attr_type { STMT_ATTR_UPDATE_MAX_LENGTH = 0, STMT_ATTR_CURSOR_TYPE = 1, STMT_ATTR_PREFETCH_ROWS = 2, }; -# 293 "mysql_com.h" +# 296 "mysql_com.h" enum mysql_enum_shutdown_level { SHUTDOWN_DEFAULT = 0, @@ -577,10 +739,9 @@ enum mysql_enum_shutdown_level SHUTDOWN_WAIT_UPDATES = (unsigned char)((1 << 3)), SHUTDOWN_WAIT_ALL_BUFFERS = ((unsigned char)((1 << 3)) << 1), SHUTDOWN_WAIT_CRITICAL_BUFFERS = (((unsigned char)((1 << 3)) << 1) + 1), - KILL_QUERY = 254, KILL_CONNECTION = 255, }; -# 154 "mysql.h" +# 160 "mysql.h" enum mysql_option { MYSQL_OPT_CONNECT_TIMEOUT = 0, @@ -606,7 +767,7 @@ enum mysql_option MYSQL_OPT_RECONNECT = 20, MYSQL_OPT_SSL_VERIFY_SERVER_CERT = 21, }; -# 221 "mysql.h" +# 228 "mysql.h" enum mysql_protocol_type { MYSQL_PROTOCOL_DEFAULT = 0, @@ -615,351 +776,393 @@ enum mysql_protocol_type MYSQL_PROTOCOL_PIPE = 3, MYSQL_PROTOCOL_MEMORY = 4, }; -# 231 "mysql.h" +# 238 "mysql.h" enum mysql_rpl_type { MYSQL_RPL_MASTER = 0, MYSQL_RPL_SLAVE = 1, MYSQL_RPL_ADMIN = 2, }; -# 216 "mysql.h" +# 223 "mysql.h" enum mysql_status { MYSQL_STATUS_READY = 0, MYSQL_STATUS_GET_RESULT = 1, MYSQL_STATUS_USE_RESULT = 2, }; -# 427 "mysql_com.h" +# 438 "mysql_com.h" extern my_bool check_scramble(char const * reply, char const * message, unsigned char const * hash_stage2); -# 420 "mysql_com.h" -extern my_bool check_scramble_323(char const *, char const * message, unsigned long int * salt); -# 33 "typelib.h" -extern TYPELIB * copy_typelib(MEM_ROOT * root, TYPELIB * from); -# 415 "mysql_com.h" -extern void create_random_string(char * to, unsigned int, struct rand_struct * rand_st); -# 30 "typelib.h" -extern int find_type(char * x, const TYPELIB * typelib, unsigned int); -# 429 "mysql_com.h" -extern void get_salt_from_password(unsigned char * res, char const * password); -# 422 "mysql_com.h" -extern void get_salt_from_password_323(unsigned long int * res, char const * password); -# 435 "mysql_com.h" -extern char * get_tty_password(char const * opt_message); -# 32 "typelib.h" -extern char const * get_type(TYPELIB * typelib, unsigned int); -# 417 "mysql_com.h" -extern void hash_password(unsigned long int * to, char const * password, unsigned int); -# 31 "my_list.h" -extern LIST * list_add(LIST * root, LIST * element); -# 33 "my_list.h" -extern LIST * list_cons(void * data, LIST * root); -# 32 "my_list.h" -extern LIST * list_delete(LIST * root, LIST * element); -# 35 "my_list.h" -extern void list_free(LIST * root, unsigned int); -# 36 "my_list.h" -extern unsigned int list_length(LIST *); -# 34 "my_list.h" -extern LIST * list_reverse(LIST * root); -# 37 "my_list.h" -extern int list_walk(LIST *, list_walk_action, gptr); -# 430 "mysql_com.h" -extern void make_password_from_salt(char * to, unsigned char const * hash_stage2); -# 423 "mysql_com.h" -extern void make_password_from_salt_323(char * to, unsigned long int const * salt); -# 425 "mysql_com.h" -extern void make_scrambled_password(char * to, char const * password); -# 418 "mysql_com.h" -extern void make_scrambled_password_323(char * to, char const * password); -# 31 "typelib.h" -extern void make_type(char * to, unsigned int, TYPELIB * typelib); -# 358 "mysql_com.h" -extern int my_connect(my_socket, struct sockaddr const * name, unsigned int, unsigned int); -# 340 "mysql_com.h" -extern my_bool my_net_init(NET * net, Vio * vio); -# 341 "mysql_com.h" -extern void my_net_local_init(NET * net); -# 351 "mysql_com.h" -extern unsigned long int my_net_read(NET * net); -# 346 "mysql_com.h" -extern my_bool my_net_write(NET * net, char const * packet, unsigned long int); -# 414 "mysql_com.h" -extern double my_rnd(struct rand_struct *); -# 441 "mysql_com.h" -extern void my_thread_end(void); -# 440 "mysql_com.h" -extern my_bool my_thread_init(void); -# 559 "mysql.h" -extern void myodbc_remove_escape(MYSQL * mysql, char * name); -# 501 "mysql.h" -extern int mysql_add_slave(MYSQL * mysql, char const * host, unsigned int, char const * user, char const * passwd); -# 410 "mysql.h" -extern my_ulonglong mysql_affected_rows(MYSQL * mysql); -# 823 "mysql.h" -extern my_bool mysql_autocommit(MYSQL * mysql, my_bool); -# 426 "mysql.h" -extern my_bool mysql_change_user(MYSQL * mysql, char const * user, char const * passwd, char const * db); -# 418 "mysql.h" -extern char const * mysql_character_set_name(MYSQL * mysql); -# 826 "mysql.h" -extern void mysql_close(MYSQL * sock); -# 821 "mysql.h" -extern my_bool mysql_commit(MYSQL * mysql); -# 530 "mysql.h" -extern void mysql_data_seek(MYSQL_RES * result, my_ulonglong); -# 548 "mysql.h" -extern void mysql_debug(char const * debug); -# 487 "mysql.h" -extern void mysql_disable_reads_from_master(MYSQL * mysql); -# 481 "mysql.h" -extern void mysql_disable_rpl_parse(MYSQL * mysql); -# 509 "mysql.h" -extern int mysql_dump_debug_info(MYSQL * mysql); -# 561 "mysql.h" -extern my_bool mysql_embedded(void); -# 486 "mysql.h" -extern void mysql_enable_reads_from_master(MYSQL * mysql); -# 480 "mysql.h" -extern void mysql_enable_rpl_parse(MYSQL * mysql); -# 402 "mysql.h" -extern my_bool mysql_eof(MYSQL_RES * res); -# 412 "mysql.h" -extern unsigned int mysql_errno(MYSQL * mysql); -# 436 "mysql_com.h" -extern char const * mysql_errno_to_sqlstate(unsigned int); -# 413 "mysql.h" -extern char const * mysql_error(MYSQL * mysql); -# 541 "mysql.h" -extern unsigned long int mysql_escape_string(char * to, char const * from, unsigned long int); -# 538 "mysql.h" -extern MYSQL_FIELD * mysql_fetch_field(MYSQL_RES * result); -# 403 "mysql.h" -extern MYSQL_FIELD * mysql_fetch_field_direct(MYSQL_RES * res, unsigned int); -# 405 "mysql.h" -extern MYSQL_FIELD * mysql_fetch_fields(MYSQL_RES * res); -# 537 "mysql.h" -extern unsigned long int * mysql_fetch_lengths(MYSQL_RES * result); -# 536 "mysql.h" -extern MYSQL_ROW mysql_fetch_row(MYSQL_RES * result); -# 409 "mysql.h" -extern unsigned int mysql_field_count(MYSQL * mysql); -# 534 "mysql.h" -extern MYSQL_FIELD_OFFSET mysql_field_seek(MYSQL_RES * result, MYSQL_FIELD_OFFSET); -# 407 "mysql.h" -extern MYSQL_FIELD_OFFSET mysql_field_tell(MYSQL_RES * res); -# 529 "mysql.h" -extern void mysql_free_result(MYSQL_RES * result); -# 454 "mysql.h" -extern void mysql_get_character_set_info(MYSQL * mysql, MY_CHARSET_INFO * charset); -# 519 "mysql.h" -extern char const * mysql_get_client_info(void); -# 520 "mysql.h" -extern unsigned long int mysql_get_client_version(void); -# 521 "mysql.h" -extern char const * mysql_get_host_info(MYSQL * mysql); -# 384 "mysql.h" -extern MYSQL_PARAMETERS * mysql_get_parameters(void); -# 523 "mysql.h" -extern unsigned int mysql_get_proto_info(MYSQL * mysql); -# 518 "mysql.h" -extern char const * mysql_get_server_info(MYSQL * mysql); -# 522 "mysql.h" -extern unsigned long int mysql_get_server_version(MYSQL * mysql); -# 425 "mysql.h" -extern char const * mysql_get_ssl_cipher(MYSQL * mysql); -# 543 "mysql.h" -extern unsigned long int mysql_hex_string(char * to, char const * from, unsigned long int); -# 416 "mysql.h" -extern char const * mysql_info(MYSQL * mysql); -# 421 "mysql.h" -extern MYSQL * mysql_init(MYSQL * mysql); -# 411 "mysql.h" -extern my_ulonglong mysql_insert_id(MYSQL * mysql); -# 512 "mysql.h" -extern int mysql_kill(MYSQL * mysql, unsigned long int); -# 524 "mysql.h" -extern MYSQL_RES * mysql_list_dbs(MYSQL * mysql, char const * wild); -# 539 "mysql.h" -extern MYSQL_RES * mysql_list_fields(MYSQL * mysql, char const * table, char const * wild); -# 526 "mysql.h" -extern MYSQL_RES * mysql_list_processes(MYSQL * mysql); -# 525 "mysql.h" -extern MYSQL_RES * mysql_list_tables(MYSQL * mysql, char const * wild); -# 568 "mysql.h" -extern void mysql_manager_close(MYSQL_MANAGER * con); -# 569 "mysql.h" -extern int mysql_manager_command(MYSQL_MANAGER * con, char const * cmd, int); -# 563 "mysql.h" -extern MYSQL_MANAGER * mysql_manager_connect(MYSQL_MANAGER * con, char const * host, char const * user, char const * passwd, unsigned int); -# 571 "mysql.h" -extern int mysql_manager_fetch_line(MYSQL_MANAGER * con, char * res_buf, int); -# 562 "mysql.h" -extern MYSQL_MANAGER * mysql_manager_init(MYSQL_MANAGER * con); -# 445 "mysql.h" -extern my_bool mysql_master_query(MYSQL * mysql, char const * q, unsigned long int); -# 447 "mysql.h" -extern my_bool mysql_master_send_query(MYSQL * mysql, char const * q, unsigned long int); -# 824 "mysql.h" -extern my_bool mysql_more_results(MYSQL * mysql); -# 825 "mysql.h" -extern int mysql_next_result(MYSQL * mysql); -# 401 "mysql.h" -extern unsigned int mysql_num_fields(MYSQL_RES * res); -# 400 "mysql.h" -extern my_ulonglong mysql_num_rows(MYSQL_RES * res); -# 549 "mysql.h" -extern char * mysql_odbc_escape_string(MYSQL * mysql, char * to, unsigned long int, char const * from, unsigned long int, void * param, char * (* extend_buffer)(void *, char * to, unsigned long int * length)); -# 527 "mysql.h" -extern int mysql_options(MYSQL * mysql, enum mysql_option, char const * arg); -# 516 "mysql.h" -extern int mysql_ping(MYSQL * mysql); -# 75 "mysql.h" -extern unsigned int mysql_port; -# 436 "mysql.h" -extern int mysql_query(MYSQL * mysql, char const * q); -# 574 "mysql.h" -extern my_bool mysql_read_query_result(MYSQL * mysql); -# 489 "mysql.h" -extern my_bool mysql_reads_from_master_enabled(MYSQL * mysql); -# 428 "mysql.h" -extern MYSQL * mysql_real_connect(MYSQL * mysql, char const * host, char const * user, char const * passwd, char const * db, unsigned int, char const * unix_socket, unsigned long int); -# 545 "mysql.h" -extern unsigned long int mysql_real_escape_string(MYSQL * mysql, char * to, char const * from, unsigned long int); -# 439 "mysql.h" -extern int mysql_real_query(MYSQL * mysql, char const * q, unsigned long int); -# 510 "mysql.h" -extern int mysql_refresh(MYSQL * mysql, unsigned int); -# 822 "mysql.h" -extern my_bool mysql_rollback(MYSQL * mysql); -# 532 "mysql.h" -extern MYSQL_ROW_OFFSET mysql_row_seek(MYSQL_RES * result, MYSQL_ROW_OFFSET); -# 406 "mysql.h" -extern MYSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES * res); -# 483 "mysql.h" -extern int mysql_rpl_parse_enabled(MYSQL * mysql); -# 494 "mysql.h" -extern my_bool mysql_rpl_probe(MYSQL * mysql); -# 491 "mysql.h" -extern enum mysql_rpl_type mysql_rpl_query_type(char const * q, int); -# 435 "mysql.h" -extern int mysql_select_db(MYSQL * mysql, char const * db); -# 437 "mysql.h" -extern int mysql_send_query(MYSQL * mysql, char const * q, unsigned long int); -# 371 "mysql.h" -extern void mysql_server_end(void); -# 370 "mysql.h" -extern int mysql_server_init(int, char * * argv, char * * groups); -# 419 "mysql.h" -extern int mysql_set_character_set(MYSQL * mysql, char const * csname); -# 472 "mysql.h" -extern void mysql_set_local_infile_default(MYSQL * mysql); -# 461 "mysql.h" -extern void mysql_set_local_infile_handler(MYSQL * mysql, int (* local_infile_init)(void * *, char const *, void *), int (* local_infile_read)(void *, char *, unsigned int), void (* local_infile_end)(void), int (* local_infile_error)(void *, char *, unsigned int), void *); -# 497 "mysql.h" -extern int mysql_set_master(MYSQL * mysql, char const * host, unsigned int, char const * user, char const * passwd); -# 513 "mysql.h" -extern int mysql_set_server_option(MYSQL * mysql, enum enum_mysql_set_option); -# 506 "mysql.h" -extern int mysql_shutdown(MYSQL * mysql, enum mysql_enum_shutdown_level); -# 450 "mysql.h" -extern my_bool mysql_slave_query(MYSQL * mysql, char const * q, unsigned long int); -# 452 "mysql.h" -extern my_bool mysql_slave_send_query(MYSQL * mysql, char const * q, unsigned long int); -# 414 "mysql.h" -extern char const * mysql_sqlstate(MYSQL * mysql); -# 422 "mysql.h" -extern my_bool mysql_ssl_set(MYSQL * mysql, char const * key, char const * cert, char const * ca, char const * capath, char const * cipher); -# 517 "mysql.h" -extern char const * mysql_stat(MYSQL * mysql); -# 817 "mysql.h" -extern my_ulonglong mysql_stmt_affected_rows(MYSQL_STMT * stmt); -# 795 "mysql.h" -extern my_bool mysql_stmt_attr_get(MYSQL_STMT * stmt, enum enum_stmt_attr_type, void * attr); -# 792 "mysql.h" -extern my_bool mysql_stmt_attr_set(MYSQL_STMT * stmt, enum enum_stmt_attr_type, void const * attr); -# 798 "mysql.h" -extern my_bool mysql_stmt_bind_param(MYSQL_STMT * stmt, MYSQL_BIND * bnd); -# 799 "mysql.h" -extern my_bool mysql_stmt_bind_result(MYSQL_STMT * stmt, MYSQL_BIND * bnd); -# 800 "mysql.h" -extern my_bool mysql_stmt_close(MYSQL_STMT * stmt); -# 815 "mysql.h" -extern void mysql_stmt_data_seek(MYSQL_STMT * stmt, my_ulonglong); -# 809 "mysql.h" -extern unsigned int mysql_stmt_errno(MYSQL_STMT * stmt); -# 810 "mysql.h" -extern char const * mysql_stmt_error(MYSQL_STMT * stmt); -# 785 "mysql.h" -extern int mysql_stmt_execute(MYSQL_STMT * stmt); -# 786 "mysql.h" -extern int mysql_stmt_fetch(MYSQL_STMT * stmt); -# 787 "mysql.h" -extern int mysql_stmt_fetch_column(MYSQL_STMT * stmt, MYSQL_BIND * bind, unsigned int, unsigned long int); -# 819 "mysql.h" -extern unsigned int mysql_stmt_field_count(MYSQL_STMT * stmt); -# 802 "mysql.h" -extern my_bool mysql_stmt_free_result(MYSQL_STMT * stmt); -# 782 "mysql.h" -extern MYSQL_STMT * mysql_stmt_init(MYSQL * mysql); -# 818 "mysql.h" -extern my_ulonglong mysql_stmt_insert_id(MYSQL_STMT * stmt); -# 816 "mysql.h" -extern my_ulonglong mysql_stmt_num_rows(MYSQL_STMT * stmt); -# 791 "mysql.h" -extern unsigned long int mysql_stmt_param_count(MYSQL_STMT * stmt); -# 808 "mysql.h" -extern MYSQL_RES * mysql_stmt_param_metadata(MYSQL_STMT * stmt); -# 783 "mysql.h" -extern int mysql_stmt_prepare(MYSQL_STMT * stmt, char const * query, unsigned long int); -# 801 "mysql.h" -extern my_bool mysql_stmt_reset(MYSQL_STMT * stmt); -# 807 "mysql.h" -extern MYSQL_RES * mysql_stmt_result_metadata(MYSQL_STMT * stmt); -# 812 "mysql.h" -extern MYSQL_ROW_OFFSET mysql_stmt_row_seek(MYSQL_STMT * stmt, MYSQL_ROW_OFFSET); -# 814 "mysql.h" -extern MYSQL_ROW_OFFSET mysql_stmt_row_tell(MYSQL_STMT * stmt); -# 803 "mysql.h" -extern my_bool mysql_stmt_send_long_data(MYSQL_STMT * stmt, unsigned int, char const * data, unsigned long int); -# 811 "mysql.h" -extern char const * mysql_stmt_sqlstate(MYSQL_STMT * stmt); -# 790 "mysql.h" -extern int mysql_stmt_store_result(MYSQL_STMT * stmt); -# 441 "mysql.h" -extern MYSQL_RES * mysql_store_result(MYSQL * mysql); -# 393 "mysql.h" -extern void mysql_thread_end(void); -# 417 "mysql.h" -extern unsigned long int mysql_thread_id(MYSQL * mysql); -# 392 "mysql.h" -extern my_bool mysql_thread_init(void); -# 560 "mysql.h" -extern unsigned int mysql_thread_safe(void); -# 76 "mysql.h" -extern char * mysql_unix_port; -# 442 "mysql.h" -extern MYSQL_RES * mysql_use_result(MYSQL * mysql); -# 415 "mysql.h" -extern unsigned int mysql_warning_count(MYSQL * mysql); -# 343 "mysql_com.h" -extern void net_clear(NET * net); -# 342 "mysql_com.h" -extern void net_end(NET * net); -# 345 "mysql_com.h" -extern my_bool net_flush(NET * net); -# 350 "mysql_com.h" -extern int net_real_write(NET * net, char const * packet, unsigned long int); -# 344 "mysql_com.h" -extern my_bool net_realloc(NET * net, unsigned long int); -# 347 "mysql_com.h" -extern my_bool net_write_command(NET * net, unsigned char, char const * header, unsigned long int, char const * packet, unsigned long int); # 431 "mysql_com.h" -extern char * octet2hex(char * to, char const * str, unsigned int); -# 412 "mysql_com.h" -extern void randominit(struct rand_struct *, unsigned long int, unsigned long int); -# 426 "mysql_com.h" -extern void scramble(char * to, char const * message, char const * password); -# 419 "mysql_com.h" -extern void scramble_323(char * to, char const * message, char const * password); +extern my_bool check_scramble_323(char const *, char const * message, unsigned long int * salt); # 35 "typelib.h" +extern TYPELIB * copy_typelib(MEM_ROOT * root, TYPELIB * from); +# 426 "mysql_com.h" +extern void create_random_string(char * to, unsigned int, struct rand_struct * rand_st); +# 32 "typelib.h" +extern int find_type(char * x, TYPELIB const * typelib, unsigned int); +# 30 "typelib.h" +extern int find_type_or_exit(char const * x, TYPELIB * typelib, char const * option); +# 29 "typelib.h" +extern my_ulonglong find_typeset(char * x, TYPELIB * typelib, int * error_position); +# 440 "mysql_com.h" +extern void get_salt_from_password(unsigned char * res, char const * password); +# 433 "mysql_com.h" +extern void get_salt_from_password_323(unsigned long int * res, char const * password); +# 446 "mysql_com.h" +extern char * get_tty_password(char const * opt_message); +# 34 "typelib.h" +extern char const * get_type(TYPELIB * typelib, unsigned int); +# 428 "mysql_com.h" +extern void hash_password(unsigned long int * to, char const * password, unsigned int); +# 30 "my_list.h" +extern LIST * list_add(LIST * root, LIST * element); +# 32 "my_list.h" +extern LIST * list_cons(void * data, LIST * root); +# 31 "my_list.h" +extern LIST * list_delete(LIST * root, LIST * element); +# 34 "my_list.h" +extern void list_free(LIST * root, unsigned int); +# 35 "my_list.h" +extern unsigned int list_length(LIST *); +# 33 "my_list.h" +extern LIST * list_reverse(LIST * root); +# 36 "my_list.h" +extern int list_walk(LIST *, list_walk_action, unsigned char * argument); +# 441 "mysql_com.h" +extern void make_password_from_salt(char * to, unsigned char const * hash_stage2); +# 434 "mysql_com.h" +extern void make_password_from_salt_323(char * to, unsigned long int const * salt); +# 436 "mysql_com.h" +extern void make_scrambled_password(char * to, char const * password); +# 429 "mysql_com.h" +extern void make_scrambled_password_323(char * to, char const * password); +# 33 "typelib.h" +extern void make_type(char * to, unsigned int, TYPELIB * typelib); +# 366 "mysql_com.h" +extern int my_connect(my_socket, struct sockaddr const * name, unsigned int, unsigned int); +# 343 "mysql_com.h" +extern my_bool my_net_init(NET * net, Vio * vio); +# 344 "mysql_com.h" +extern void my_net_local_init(NET * net); +# 354 "mysql_com.h" +extern unsigned long int my_net_read(NET * net); +# 349 "mysql_com.h" +extern my_bool my_net_write(NET * net, unsigned char const * packet, size_t); +# 425 "mysql_com.h" +extern double my_rnd(struct rand_struct *); +# 452 "mysql_com.h" +extern void my_thread_end(void); +# 451 "mysql_com.h" +extern my_bool my_thread_init(void); +# 570 "mysql.h" +extern void myodbc_remove_escape(MYSQL * mysql, char * name); +# 512 "mysql.h" +extern int mysql_add_slave(MYSQL * mysql, char const * host, unsigned int, char const * user, char const * passwd); +# 421 "mysql.h" +extern my_ulonglong mysql_affected_rows(MYSQL * mysql); +# 836 "mysql.h" +extern my_bool mysql_autocommit(MYSQL * mysql, my_bool); +# 437 "mysql.h" +extern my_bool mysql_change_user(MYSQL * mysql, char const * user, char const * passwd, char const * db); +# 429 "mysql.h" +extern char const * mysql_character_set_name(MYSQL * mysql); +# 839 "mysql.h" +extern void mysql_close(MYSQL * sock); +# 834 "mysql.h" +extern my_bool mysql_commit(MYSQL * mysql); +# 541 "mysql.h" +extern void mysql_data_seek(MYSQL_RES * result, my_ulonglong); +# 559 "mysql.h" +extern void mysql_debug(char const * debug); +# 498 "mysql.h" +extern void mysql_disable_reads_from_master(MYSQL * mysql); +# 492 "mysql.h" +extern void mysql_disable_rpl_parse(MYSQL * mysql); +# 520 "mysql.h" +extern int mysql_dump_debug_info(MYSQL * mysql); +# 572 "mysql.h" +extern my_bool mysql_embedded(void); +# 497 "mysql.h" +extern void mysql_enable_reads_from_master(MYSQL * mysql); +# 491 "mysql.h" +extern void mysql_enable_rpl_parse(MYSQL * mysql); +# 413 "mysql.h" +extern my_bool mysql_eof(MYSQL_RES * res); +# 423 "mysql.h" +extern unsigned int mysql_errno(MYSQL * mysql); +# 447 "mysql_com.h" +extern char const * mysql_errno_to_sqlstate(unsigned int); +# 424 "mysql.h" +extern char const * mysql_error(MYSQL * mysql); +# 552 "mysql.h" +extern unsigned long int mysql_escape_string(char * to, char const * from, unsigned long int); +# 549 "mysql.h" +extern MYSQL_FIELD * mysql_fetch_field(MYSQL_RES * result); +# 414 "mysql.h" +extern MYSQL_FIELD * mysql_fetch_field_direct(MYSQL_RES * res, unsigned int); +# 416 "mysql.h" +extern MYSQL_FIELD * mysql_fetch_fields(MYSQL_RES * res); +# 548 "mysql.h" +extern unsigned long int * mysql_fetch_lengths(MYSQL_RES * result); +# 547 "mysql.h" +extern MYSQL_ROW mysql_fetch_row(MYSQL_RES * result); +# 420 "mysql.h" +extern unsigned int mysql_field_count(MYSQL * mysql); +# 545 "mysql.h" +extern MYSQL_FIELD_OFFSET mysql_field_seek(MYSQL_RES * result, MYSQL_FIELD_OFFSET); +# 418 "mysql.h" +extern MYSQL_FIELD_OFFSET mysql_field_tell(MYSQL_RES * res); +# 540 "mysql.h" +extern void mysql_free_result(MYSQL_RES * result); +# 465 "mysql.h" +extern void mysql_get_character_set_info(MYSQL * mysql, MY_CHARSET_INFO * charset); +# 530 "mysql.h" +extern char const * mysql_get_client_info(void); +# 531 "mysql.h" +extern unsigned long int mysql_get_client_version(void); +# 532 "mysql.h" +extern char const * mysql_get_host_info(MYSQL * mysql); +# 395 "mysql.h" +extern MYSQL_PARAMETERS * mysql_get_parameters(void); +# 534 "mysql.h" +extern unsigned int mysql_get_proto_info(MYSQL * mysql); +# 529 "mysql.h" +extern char const * mysql_get_server_info(MYSQL * mysql); +# 533 "mysql.h" +extern unsigned long int mysql_get_server_version(MYSQL * mysql); +# 436 "mysql.h" +extern char const * mysql_get_ssl_cipher(MYSQL * mysql); +# 554 "mysql.h" +extern unsigned long int mysql_hex_string(char * to, char const * from, unsigned long int); +# 427 "mysql.h" +extern char const * mysql_info(MYSQL * mysql); +# 432 "mysql.h" +extern MYSQL * mysql_init(MYSQL * mysql); +# 422 "mysql.h" +extern my_ulonglong mysql_insert_id(MYSQL * mysql); +# 523 "mysql.h" +extern int mysql_kill(MYSQL * mysql, unsigned long int); +# 535 "mysql.h" +extern MYSQL_RES * mysql_list_dbs(MYSQL * mysql, char const * wild); +# 550 "mysql.h" +extern MYSQL_RES * mysql_list_fields(MYSQL * mysql, char const * table, char const * wild); +# 537 "mysql.h" +extern MYSQL_RES * mysql_list_processes(MYSQL * mysql); +# 536 "mysql.h" +extern MYSQL_RES * mysql_list_tables(MYSQL * mysql, char const * wild); +# 579 "mysql.h" +extern void mysql_manager_close(MYSQL_MANAGER * con); +# 580 "mysql.h" +extern int mysql_manager_command(MYSQL_MANAGER * con, char const * cmd, int); +# 574 "mysql.h" +extern MYSQL_MANAGER * mysql_manager_connect(MYSQL_MANAGER * con, char const * host, char const * user, char const * passwd, unsigned int); +# 582 "mysql.h" +extern int mysql_manager_fetch_line(MYSQL_MANAGER * con, char * res_buf, int); +# 573 "mysql.h" +extern MYSQL_MANAGER * mysql_manager_init(MYSQL_MANAGER * con); +# 456 "mysql.h" +extern my_bool mysql_master_query(MYSQL * mysql, char const * q, unsigned long int); +# 458 "mysql.h" +extern my_bool mysql_master_send_query(MYSQL * mysql, char const * q, unsigned long int); +# 837 "mysql.h" +extern my_bool mysql_more_results(MYSQL * mysql); +# 838 "mysql.h" +extern int mysql_next_result(MYSQL * mysql); +# 412 "mysql.h" +extern unsigned int mysql_num_fields(MYSQL_RES * res); +# 411 "mysql.h" +extern my_ulonglong mysql_num_rows(MYSQL_RES * res); +# 560 "mysql.h" +extern char * mysql_odbc_escape_string(MYSQL * mysql, char * to, unsigned long int, char const * from, unsigned long int, void * param, char * (* extend_buffer)(void *, char * to, unsigned long int * length)); +# 538 "mysql.h" +extern int mysql_options(MYSQL * mysql, enum mysql_option, void const * arg); +# 527 "mysql.h" +extern int mysql_ping(MYSQL * mysql); +# 76 "mysql.h" +extern unsigned int mysql_port; +# 447 "mysql.h" +extern int mysql_query(MYSQL * mysql, char const * q); +# 780 "mysql/plugin.h" +extern void mysql_query_cache_invalidate4(void * thd, char const * key, unsigned int, int); +# 585 "mysql.h" +extern my_bool mysql_read_query_result(MYSQL * mysql); +# 500 "mysql.h" +extern my_bool mysql_reads_from_master_enabled(MYSQL * mysql); +# 439 "mysql.h" +extern MYSQL * mysql_real_connect(MYSQL * mysql, char const * host, char const * user, char const * passwd, char const * db, unsigned int, char const * unix_socket, unsigned long int); +# 556 "mysql.h" +extern unsigned long int mysql_real_escape_string(MYSQL * mysql, char * to, char const * from, unsigned long int); +# 450 "mysql.h" +extern int mysql_real_query(MYSQL * mysql, char const * q, unsigned long int); +# 521 "mysql.h" +extern int mysql_refresh(MYSQL * mysql, unsigned int); +# 835 "mysql.h" +extern my_bool mysql_rollback(MYSQL * mysql); +# 543 "mysql.h" +extern MYSQL_ROW_OFFSET mysql_row_seek(MYSQL_RES * result, MYSQL_ROW_OFFSET); +# 417 "mysql.h" +extern MYSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES * res); +# 494 "mysql.h" +extern int mysql_rpl_parse_enabled(MYSQL * mysql); +# 505 "mysql.h" +extern my_bool mysql_rpl_probe(MYSQL * mysql); +# 502 "mysql.h" +extern enum mysql_rpl_type mysql_rpl_query_type(char const * q, int); +# 446 "mysql.h" +extern int mysql_select_db(MYSQL * mysql, char const * db); +# 448 "mysql.h" +extern int mysql_send_query(MYSQL * mysql, char const * q, unsigned long int); +# 381 "mysql.h" +extern void mysql_server_end(void); +# 380 "mysql.h" +extern int mysql_server_init(int, char * * argv, char * * groups); +# 430 "mysql.h" +extern int mysql_set_character_set(MYSQL * mysql, char const * csname); +# 483 "mysql.h" +extern void mysql_set_local_infile_default(MYSQL * mysql); +# 472 "mysql.h" +extern void mysql_set_local_infile_handler(MYSQL * mysql, int (* local_infile_init)(void * *, char const *, void *), int (* local_infile_read)(void *, char *, unsigned int), void (* local_infile_end)(void), int (* local_infile_error)(void *, char *, unsigned int), void *); +# 508 "mysql.h" +extern int mysql_set_master(MYSQL * mysql, char const * host, unsigned int, char const * user, char const * passwd); +# 524 "mysql.h" +extern int mysql_set_server_option(MYSQL * mysql, enum enum_mysql_set_option); +# 517 "mysql.h" +extern int mysql_shutdown(MYSQL * mysql, enum mysql_enum_shutdown_level); +# 461 "mysql.h" +extern my_bool mysql_slave_query(MYSQL * mysql, char const * q, unsigned long int); +# 463 "mysql.h" +extern my_bool mysql_slave_send_query(MYSQL * mysql, char const * q, unsigned long int); +# 425 "mysql.h" +extern char const * mysql_sqlstate(MYSQL * mysql); +# 433 "mysql.h" +extern my_bool mysql_ssl_set(MYSQL * mysql, char const * key, char const * cert, char const * ca, char const * capath, char const * cipher); +# 528 "mysql.h" +extern char const * mysql_stat(MYSQL * mysql); +# 830 "mysql.h" +extern my_ulonglong mysql_stmt_affected_rows(MYSQL_STMT * stmt); +# 808 "mysql.h" +extern my_bool mysql_stmt_attr_get(MYSQL_STMT * stmt, enum enum_stmt_attr_type, void * attr); +# 805 "mysql.h" +extern my_bool mysql_stmt_attr_set(MYSQL_STMT * stmt, enum enum_stmt_attr_type, void const * attr); +# 811 "mysql.h" +extern my_bool mysql_stmt_bind_param(MYSQL_STMT * stmt, MYSQL_BIND * bnd); +# 812 "mysql.h" +extern my_bool mysql_stmt_bind_result(MYSQL_STMT * stmt, MYSQL_BIND * bnd); +# 813 "mysql.h" +extern my_bool mysql_stmt_close(MYSQL_STMT * stmt); +# 828 "mysql.h" +extern void mysql_stmt_data_seek(MYSQL_STMT * stmt, my_ulonglong); +# 822 "mysql.h" +extern unsigned int mysql_stmt_errno(MYSQL_STMT * stmt); +# 823 "mysql.h" +extern char const * mysql_stmt_error(MYSQL_STMT * stmt); +# 798 "mysql.h" +extern int mysql_stmt_execute(MYSQL_STMT * stmt); +# 799 "mysql.h" +extern int mysql_stmt_fetch(MYSQL_STMT * stmt); +# 800 "mysql.h" +extern int mysql_stmt_fetch_column(MYSQL_STMT * stmt, MYSQL_BIND * bind_arg, unsigned int, unsigned long int); +# 832 "mysql.h" +extern unsigned int mysql_stmt_field_count(MYSQL_STMT * stmt); +# 815 "mysql.h" +extern my_bool mysql_stmt_free_result(MYSQL_STMT * stmt); +# 795 "mysql.h" +extern MYSQL_STMT * mysql_stmt_init(MYSQL * mysql); +# 831 "mysql.h" +extern my_ulonglong mysql_stmt_insert_id(MYSQL_STMT * stmt); +# 829 "mysql.h" +extern my_ulonglong mysql_stmt_num_rows(MYSQL_STMT * stmt); +# 804 "mysql.h" +extern unsigned long int mysql_stmt_param_count(MYSQL_STMT * stmt); +# 821 "mysql.h" +extern MYSQL_RES * mysql_stmt_param_metadata(MYSQL_STMT * stmt); +# 796 "mysql.h" +extern int mysql_stmt_prepare(MYSQL_STMT * stmt, char const * query, unsigned long int); +# 814 "mysql.h" +extern my_bool mysql_stmt_reset(MYSQL_STMT * stmt); +# 820 "mysql.h" +extern MYSQL_RES * mysql_stmt_result_metadata(MYSQL_STMT * stmt); +# 825 "mysql.h" +extern MYSQL_ROW_OFFSET mysql_stmt_row_seek(MYSQL_STMT * stmt, MYSQL_ROW_OFFSET); +# 827 "mysql.h" +extern MYSQL_ROW_OFFSET mysql_stmt_row_tell(MYSQL_STMT * stmt); +# 816 "mysql.h" +extern my_bool mysql_stmt_send_long_data(MYSQL_STMT * stmt, unsigned int, char const * data, unsigned long int); +# 824 "mysql.h" +extern char const * mysql_stmt_sqlstate(MYSQL_STMT * stmt); +# 803 "mysql.h" +extern int mysql_stmt_store_result(MYSQL_STMT * stmt); +# 452 "mysql.h" +extern MYSQL_RES * mysql_store_result(MYSQL * mysql); +# 404 "mysql.h" +extern void mysql_thread_end(void); +# 428 "mysql.h" +extern unsigned long int mysql_thread_id(MYSQL * mysql); +# 403 "mysql.h" +extern my_bool mysql_thread_init(void); +# 571 "mysql.h" +extern unsigned int mysql_thread_safe(void); +# 699 "mysql/plugin.h" +extern int mysql_tmpfile(char const * prefix); +# 77 "mysql.h" +extern char * mysql_unix_port; +# 453 "mysql.h" +extern MYSQL_RES * mysql_use_result(MYSQL * mysql); +# 426 "mysql.h" +extern unsigned int mysql_warning_count(MYSQL * mysql); +# 346 "mysql_com.h" +extern void net_clear(NET * net, my_bool); +# 345 "mysql_com.h" +extern void net_end(NET * net); +# 348 "mysql_com.h" +extern my_bool net_flush(NET * net); +# 353 "mysql_com.h" +extern int net_real_write(NET * net, unsigned char const * packet, size_t); +# 347 "mysql_com.h" +extern my_bool net_realloc(NET * net, size_t); +# 350 "mysql_com.h" +extern my_bool net_write_command(NET * net, unsigned char, unsigned char const * header, size_t, unsigned char const * packet, size_t); +# 442 "mysql_com.h" +extern char * octet2hex(char * to, char const * str, unsigned int); +# 423 "mysql_com.h" +extern void randominit(struct rand_struct *, unsigned long int, unsigned long int); +# 437 "mysql_com.h" +extern void scramble(char * to, char const * message, char const * password); +# 430 "mysql_com.h" +extern void scramble_323(char * to, char const * message, char const * password); +# 37 "typelib.h" extern TYPELIB sql_protocol_typelib; +# 729 "mysql/plugin.h" +extern void * thd_alloc(void * thd, unsigned int); +# 733 "mysql/plugin.h" +extern void * thd_calloc(void * thd, unsigned int); +# 770 "mysql/plugin.h" +extern void thd_get_xid(void const * thd, MYSQL_XID * xid); +# 680 "mysql/plugin.h" +extern void * * thd_ha_data(void const * thd, struct handlerton const * hton); +# 675 "mysql/plugin.h" +extern int thd_in_lock_tables(void const * thd); +# 685 "mysql/plugin.h" +extern void thd_inc_row_count(void); +# 715 "mysql/plugin.h" +extern int thd_killed(void const * thd); +# 760 "mysql/plugin.h" +extern MYSQL_LEX_STRING * thd_make_lex_string(void * thd, MYSQL_LEX_STRING * lex_str, char const * str, unsigned int, int); +# 745 "mysql/plugin.h" +extern void * thd_memdup(void * thd, void const * str, unsigned int); +# 679 "mysql/plugin.h" +extern char const * thd_proc_info(void * thd, char const * info); +# 682 "mysql/plugin.h" +extern char * thd_security_context(void * thd, char * buffer, unsigned int, unsigned int); +# 678 "mysql/plugin.h" +extern int thd_sql_command(void const * thd); +# 737 "mysql/plugin.h" +extern char * thd_strdup(void * thd, char const * str); +# 741 "mysql/plugin.h" +extern char * thd_strmake(void * thd, char const * str, unsigned int); +# 676 "mysql/plugin.h" +extern int thd_tablespace_op(void const * thd); +# 677 "mysql/plugin.h" +extern long long int thd_test_options(void const * thd, long long int); +# 681 "mysql/plugin.h" +extern int thd_tx_isolation(void const * thd); From 369a5f1cdcd569a02de4a12d64faebc33e9128f0 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 27 Aug 2007 10:13:54 -0300 Subject: [PATCH 137/194] Bug#25164 create table `a` as select * from `A` hangs The problem from a user's perspective: user creates table A, and then tries to CREATE TABLE a SELECT from A - and this causes a deadlock error, a hang, or fails with a debug assert, but only if the storage engine is InnoDB. The origin of the problem: InnoDB uses case-insensitive collation (system_charset_info) when looking up the internal table share, thus returning the same share for 'a' and 'A'. Cause of the user-visible behavior: since the same share is returned to SQL locking subsystem, it assumes that the same table is first locked (within the same session) for WRITE, and then for READ, and returns a deadlock error. However, the code is wrong in not properly cleaning up upon an error, leaving external locks in place, which leads to assertion failures and hangs. Fix that has been implemented: the SQL layer should properly propagate the deadlock error, cleaning up and freeing all resources. Further work towards a more complete solution: InnoDB should not use case insensitive collation for table share hash if table names on disk honor the case. mysql-test/r/innodb-deadlock.result: Bug#25164 test case result mysql-test/t/innodb-deadlock.test: Bug#25164 test case. The CREATE TABLE may fail depending on the character set of the system and filesystem, but it should never hang. sql/lock.cc: Unlock the storage engine "external" table level locks, if the MySQL thr_lock locking subsystem detects a deadlock error. --- mysql-test/r/innodb-deadlock.result | 11 +++++++++++ mysql-test/t/innodb-deadlock.test | 27 ++++++++++++++++++++++++++- sql/lock.cc | 2 ++ 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/innodb-deadlock.result b/mysql-test/r/innodb-deadlock.result index 2ca82101fb4..b6a3373e8c6 100644 --- a/mysql-test/r/innodb-deadlock.result +++ b/mysql-test/r/innodb-deadlock.result @@ -94,3 +94,14 @@ id x 300 300 commit; drop table t1, t2; +End of 4.1 tests +set storage_engine=innodb; +drop table if exists a; +drop table if exists A; +create table A (c int); +insert into A (c) values (0); +create table a as select * from A; +drop table A; +drop table if exists a; +set storage_engine=default; +End of 5.0 tests. diff --git a/mysql-test/t/innodb-deadlock.test b/mysql-test/t/innodb-deadlock.test index 81acfba5c93..1a184f98771 100644 --- a/mysql-test/t/innodb-deadlock.test +++ b/mysql-test/t/innodb-deadlock.test @@ -112,4 +112,29 @@ commit; drop table t1, t2; -# End of 4.1 tests +--echo End of 4.1 tests + +# +# Bug#25164 create table `a` as select * from `A` hangs +# + +set storage_engine=innodb; + +--disable_warnings +drop table if exists a; +drop table if exists A; +--enable_warnings + +create table A (c int); +insert into A (c) values (0); +--error 0,ER_LOCK_DEADLOCK,ER_UPDATE_TABLE_USED +create table a as select * from A; +drop table A; + +--disable_warnings +drop table if exists a; +--enable_warnings + +set storage_engine=default; + +--echo End of 5.0 tests. diff --git a/sql/lock.cc b/sql/lock.cc index 0036d0aef77..cf06be5f95f 100644 --- a/sql/lock.cc +++ b/sql/lock.cc @@ -172,6 +172,8 @@ MYSQL_LOCK *mysql_lock_tables(THD *thd, TABLE **tables, uint count, thd->lock_id)]; if (rc > 1) /* a timeout or a deadlock */ { + if (sql_lock->table_count) + VOID(unlock_external(thd, sql_lock->table, sql_lock->table_count)); my_error(rc, MYF(0)); my_free((gptr) sql_lock,MYF(0)); sql_lock= 0; From 34ded629086fa8e1ddd3b73ffb3531b10452d46f Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 27 Aug 2007 10:37:12 -0300 Subject: [PATCH 138/194] Bug#30632 HANDLER read failure causes hang If, after the tables are locked, one of the conditions to read from a HANDLER table is not met, the handler code wrongly jumps to a error path that won't unlock the tables. The user-visible effect is that after a error in a handler read command, all subsequent handler operations on the same table will hang. The fix is simply to correct the code to jump to the (same) error path that unlocks the tables. mysql-test/r/handler.result: Bug#30632 test case result mysql-test/t/handler.test: Bug#30632 test case sql/sql_handler.cc: Always unlock the internal and external table level locks if any of the conditions (including errors) to read from a HANDLER table are not met. --- mysql-test/r/handler.result | 13 +++++++++++++ mysql-test/t/handler.test | 19 +++++++++++++++++++ sql/sql_handler.cc | 6 +++--- 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/mysql-test/r/handler.result b/mysql-test/r/handler.result index 5e123df9103..dc3750e16ea 100644 --- a/mysql-test/r/handler.result +++ b/mysql-test/r/handler.result @@ -489,3 +489,16 @@ handler t1 open; ERROR HY000: Table storage engine for 't1' doesn't have this option --> client 1 drop table t1; +drop table if exists t1; +create table t1 (a int); +handler t1 open as t1_alias; +handler t1_alias read a next; +ERROR HY000: Key 'a' doesn't exist in table 't1_alias' +handler t1_alias READ a next where inexistent > 0; +ERROR 42S22: Unknown column 'inexistent' in 'field list' +handler t1_alias read a next; +ERROR HY000: Key 'a' doesn't exist in table 't1_alias' +handler t1_alias READ a next where inexistent > 0; +ERROR 42S22: Unknown column 'inexistent' in 'field list' +handler t1_alias close; +drop table t1; diff --git a/mysql-test/t/handler.test b/mysql-test/t/handler.test index 4edd5b5ec32..6ef216f6ed2 100644 --- a/mysql-test/t/handler.test +++ b/mysql-test/t/handler.test @@ -441,3 +441,22 @@ handler t1 open; --echo --> client 1 connection default; drop table t1; + +# +# Bug#30632 HANDLER read failure causes hang +# +--disable_warnings +drop table if exists t1; +--enable_warnings +create table t1 (a int); +handler t1 open as t1_alias; +--error 1176 +handler t1_alias read a next; +--error 1054 +handler t1_alias READ a next where inexistent > 0; +--error 1176 +handler t1_alias read a next; +--error 1054 +handler t1_alias READ a next where inexistent > 0; +handler t1_alias close; +drop table t1; diff --git a/sql/sql_handler.cc b/sql/sql_handler.cc index 83c141f099f..9aefa71647e 100644 --- a/sql/sql_handler.cc +++ b/sql/sql_handler.cc @@ -440,7 +440,7 @@ bool mysql_ha_read(THD *thd, TABLE_LIST *tables, cond->cleanup(); // File was reopened if ((!cond->fixed && cond->fix_fields(thd, &cond)) || cond->check_cols(1)) - goto err0; + goto err; } if (keyname) @@ -448,13 +448,13 @@ bool mysql_ha_read(THD *thd, TABLE_LIST *tables, if ((keyno=find_type(keyname, &table->s->keynames, 1+2)-1)<0) { my_error(ER_KEY_DOES_NOT_EXITS, MYF(0), keyname, tables->alias); - goto err0; + goto err; } } if (insert_fields(thd, &thd->lex->select_lex.context, tables->db, tables->alias, &it, 0)) - goto err0; + goto err; protocol->send_fields(&list, Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF); From 8e0805db78e2f2609ac17dd22dac6a76a6d214f8 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 28 Aug 2007 01:02:57 -0600 Subject: [PATCH 139/194] Post-merge fixes sql/ha_partition.cc: Post-merge fix (remove duplicate definition of ::column_bitmaps_signal) sql/mysqld.cc: Post-merge fix (cast away some compiler warnings in DBUG_PRINT, remove duplicate definition of OPT_KEEP_FILES_ON_CREATE). --- sql/ha_partition.cc | 7 ------- sql/mysqld.cc | 9 +++++---- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc index 26f1419fa07..42cbaa1cdb0 100644 --- a/sql/ha_partition.cc +++ b/sql/ha_partition.cc @@ -5601,13 +5601,6 @@ int ha_partition::indexes_are_disabled(void) } -void ha_partition::column_bitmaps_signal() -{ - handler::column_bitmaps_signal(); - bitmap_union(table->read_set, &m_part_info->full_part_field_set); -} - - /**************************************************************************** MODULE Partition Share ****************************************************************************/ diff --git a/sql/mysqld.cc b/sql/mysqld.cc index b59e9225ef7..6ea1cf111bb 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -746,14 +746,16 @@ static void close_connections(void) (void) pthread_mutex_lock(&LOCK_manager); if (manager_thread_in_use) { - DBUG_PRINT("quit",("killing manager thread: 0x%lx",manager_thread)); + DBUG_PRINT("quit", ("killing manager thread: 0x%lx", + (ulong)manager_thread)); (void) pthread_cond_signal(&COND_manager); } (void) pthread_mutex_unlock(&LOCK_manager); /* kill connection thread */ #if !defined(__WIN__) && !defined(__NETWARE__) - DBUG_PRINT("quit",("waiting for select thread: 0x%lx",select_thread)); + DBUG_PRINT("quit", ("waiting for select thread: 0x%lx", + (ulong) select_thread)); (void) pthread_mutex_lock(&LOCK_thread_count); while (select_thread_in_use) @@ -5087,8 +5089,7 @@ enum options_mysqld OPT_SECURE_FILE_PRIV, OPT_MIN_EXAMINED_ROW_LIMIT, OPT_LOG_SLOW_SLAVE_STATEMENTS, - OPT_OLD_MODE, - OPT_KEEP_FILES_ON_CREATE + OPT_OLD_MODE }; From fe4abfb2f7034addeab80050e8a12029f41871ce Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 28 Aug 2007 10:35:55 +0200 Subject: [PATCH 140/194] Import yaSSL version 1.7.2 - Fix bug#27265 - Support for fixing bug#18441 extra/yassl/include/openssl/crypto.h: Import patch yassl.diff extra/yassl/include/openssl/ssl.h: Import patch yassl.diff extra/yassl/include/yassl_int.hpp: Import patch yassl.diff extra/yassl/src/handshake.cpp: Import patch yassl.diff extra/yassl/src/socket_wrapper.cpp: Import patch yassl.diff extra/yassl/src/ssl.cpp: Import patch yassl.diff extra/yassl/src/yassl_int.cpp: Import patch yassl.diff extra/yassl/taocrypt/src/coding.cpp: Import patch yassl.diff extra/yassl/taocrypt/src/crypto.cpp: Import patch yassl.diff extra/yassl/include/openssl/des_old.h: Import patch yassl.diff extra/yassl/include/openssl/evp.h: Import patch yassl.diff extra/yassl/include/openssl/hmac.h: Import patch yassl.diff extra/yassl/include/openssl/objects.h: Import patch yassl.diff extra/yassl/include/openssl/sha.h: Import patch yassl.diff extra/yassl/include/openssl/prefix_ssl.h: Update prefixes --- extra/yassl/include/openssl/crypto.h | 1 + extra/yassl/include/openssl/des_old.h | 1 + extra/yassl/include/openssl/evp.h | 10 ++++++++++ extra/yassl/include/openssl/hmac.h | 1 + extra/yassl/include/openssl/objects.h | 1 + extra/yassl/include/openssl/prefix_ssl.h | 3 +++ extra/yassl/include/openssl/sha.h | 1 + extra/yassl/include/openssl/ssl.h | 3 ++- extra/yassl/include/yassl_int.hpp | 2 +- extra/yassl/src/handshake.cpp | 4 ++++ extra/yassl/src/socket_wrapper.cpp | 4 ---- extra/yassl/src/ssl.cpp | 6 ++++++ extra/yassl/src/yassl_int.cpp | 1 + extra/yassl/taocrypt/src/coding.cpp | 5 +++-- extra/yassl/taocrypt/src/crypto.cpp | 5 +++++ 15 files changed, 40 insertions(+), 8 deletions(-) create mode 100644 extra/yassl/include/openssl/des_old.h create mode 100644 extra/yassl/include/openssl/evp.h create mode 100644 extra/yassl/include/openssl/hmac.h create mode 100644 extra/yassl/include/openssl/objects.h create mode 100644 extra/yassl/include/openssl/sha.h diff --git a/extra/yassl/include/openssl/crypto.h b/extra/yassl/include/openssl/crypto.h index 288990e1318..f53e5231027 100644 --- a/extra/yassl/include/openssl/crypto.h +++ b/extra/yassl/include/openssl/crypto.h @@ -9,6 +9,7 @@ const char* SSLeay_version(int type); +#define SSLEAY_NUMBER_DEFINED #define SSLEAY_VERSION 0x0900L #define SSLEAY_VERSION_NUMBER SSLEAY_VERSION diff --git a/extra/yassl/include/openssl/des_old.h b/extra/yassl/include/openssl/des_old.h new file mode 100644 index 00000000000..40e8fbc02af --- /dev/null +++ b/extra/yassl/include/openssl/des_old.h @@ -0,0 +1 @@ +/* des_old.h for openvn */ diff --git a/extra/yassl/include/openssl/evp.h b/extra/yassl/include/openssl/evp.h new file mode 100644 index 00000000000..1d66b08df46 --- /dev/null +++ b/extra/yassl/include/openssl/evp.h @@ -0,0 +1,10 @@ +/* evp.h for openSSL */ + +#ifndef SSLEAY_NUMBER_DEFINED +#define SSLEAY_NUMBER_DEFINED + +/* for OpenVPN */ +#define SSLEAY_VERSION_NUMBER 0x0090700f + + +#endif /* SSLEAY_NUMBER_DEFINED */ diff --git a/extra/yassl/include/openssl/hmac.h b/extra/yassl/include/openssl/hmac.h new file mode 100644 index 00000000000..a2eae4c08c1 --- /dev/null +++ b/extra/yassl/include/openssl/hmac.h @@ -0,0 +1 @@ +/* hmac.h for openvpn */ diff --git a/extra/yassl/include/openssl/objects.h b/extra/yassl/include/openssl/objects.h new file mode 100644 index 00000000000..99f2326e51b --- /dev/null +++ b/extra/yassl/include/openssl/objects.h @@ -0,0 +1 @@ +/* objects.h for openvpn */ diff --git a/extra/yassl/include/openssl/prefix_ssl.h b/extra/yassl/include/openssl/prefix_ssl.h index dc6e3ef81f0..3a3a8c26c9c 100644 --- a/extra/yassl/include/openssl/prefix_ssl.h +++ b/extra/yassl/include/openssl/prefix_ssl.h @@ -30,6 +30,7 @@ #define SSL_CTX_new yaSSL_CTX_new #define SSL_new yaSSL_new #define SSL_set_fd yaSSL_set_fd +#define SSL_get_fd yaSSL_get_fd #define SSL_connect yaSSL_connect #define SSL_write yaSSL_write #define SSL_read yaSSL_read @@ -91,6 +92,8 @@ #define SSL_set_rfd yaSSL_set_rfd #define SSL_set_wfd yaSSL_set_wfd #define SSL_set_shutdown yaSSL_set_shutdown +#define SSL_set_quiet_shutdown yaSSL_set_quiet_shutdown +#define SSL_get_quiet_shutdown yaSSL_get_quiet_shutdown #define SSL_want_read yaSSL_want_read #define SSL_want_write yaSSL_want_write #define SSL_pending yaSSL_pending diff --git a/extra/yassl/include/openssl/sha.h b/extra/yassl/include/openssl/sha.h new file mode 100644 index 00000000000..bb487c05c2e --- /dev/null +++ b/extra/yassl/include/openssl/sha.h @@ -0,0 +1 @@ +/* sha.h for openvpn */ diff --git a/extra/yassl/include/openssl/ssl.h b/extra/yassl/include/openssl/ssl.h index efd0dec75b6..c0b87f804ad 100644 --- a/extra/yassl/include/openssl/ssl.h +++ b/extra/yassl/include/openssl/ssl.h @@ -34,7 +34,7 @@ #include "rsa.h" -#define YASSL_VERSION "1.6.5" +#define YASSL_VERSION "1.7.2" #if defined(__cplusplus) @@ -201,6 +201,7 @@ typedef int YASSL_SOCKET_T; SSL_CTX* SSL_CTX_new(SSL_METHOD*); SSL* SSL_new(SSL_CTX*); int SSL_set_fd (SSL*, YASSL_SOCKET_T); +YASSL_SOCKET_T SSL_get_fd(const SSL*); int SSL_connect(SSL*); int SSL_write(SSL*, const void*, int); int SSL_read(SSL*, void*, int); diff --git a/extra/yassl/include/yassl_int.hpp b/extra/yassl/include/yassl_int.hpp index b7bd35f5fa2..b207f0bffbd 100644 --- a/extra/yassl/include/yassl_int.hpp +++ b/extra/yassl/include/yassl_int.hpp @@ -584,7 +584,7 @@ class SSL { Socket socket_; // socket wrapper Buffers buffers_; // buffered handshakes and data Log log_; // logger - bool quietShutdown_; // shutdown without handshakes + bool quietShutdown_; // optimization variables bool has_data_; // buffered data ready? diff --git a/extra/yassl/src/handshake.cpp b/extra/yassl/src/handshake.cpp index 0cd0dfe9c7c..1d5a95820bb 100644 --- a/extra/yassl/src/handshake.cpp +++ b/extra/yassl/src/handshake.cpp @@ -719,6 +719,10 @@ int DoProcessReply(SSL& ssl) // add new data uint read = ssl.useSocket().receive(buffer.get_buffer() + buffSz, ready); + if (read == static_cast(-1)) { + ssl.SetError(receive_error); + return 0; + } buffer.add_size(read); uint offset = 0; const MessageFactory& mf = ssl.getFactory().getMessage(); diff --git a/extra/yassl/src/socket_wrapper.cpp b/extra/yassl/src/socket_wrapper.cpp index d53a109d70e..eee5d47377f 100644 --- a/extra/yassl/src/socket_wrapper.cpp +++ b/extra/yassl/src/socket_wrapper.cpp @@ -114,8 +114,6 @@ uint Socket::send(const byte* buf, unsigned int sz, int flags) const const byte* pos = buf; const byte* end = pos + sz; - assert(socket_ != INVALID_SOCKET); - while (pos != end) { int sent = ::send(socket_, reinterpret_cast(pos), static_cast(end - pos), flags); @@ -132,7 +130,6 @@ uint Socket::send(const byte* buf, unsigned int sz, int flags) const uint Socket::receive(byte* buf, unsigned int sz, int flags) { - assert(socket_ != INVALID_SOCKET); wouldBlock_ = false; int recvd = ::recv(socket_, reinterpret_cast(buf), sz, flags); @@ -163,7 +160,6 @@ bool Socket::wait() void Socket::shutDown(int how) { - assert(socket_ != INVALID_SOCKET); shutdown(socket_, how); } diff --git a/extra/yassl/src/ssl.cpp b/extra/yassl/src/ssl.cpp index c3d580a93ab..f09a43be56e 100644 --- a/extra/yassl/src/ssl.cpp +++ b/extra/yassl/src/ssl.cpp @@ -239,6 +239,12 @@ int SSL_set_fd(SSL* ssl, YASSL_SOCKET_T fd) } +YASSL_SOCKET_T SSL_get_fd(const SSL* ssl) +{ + return ssl->getSocket().get_fd(); +} + + int SSL_connect(SSL* ssl) { if (ssl->GetError() == YasslError(SSL_ERROR_WANT_READ)) diff --git a/extra/yassl/src/yassl_int.cpp b/extra/yassl/src/yassl_int.cpp index f5ab2f200a5..0b6cb89e77e 100644 --- a/extra/yassl/src/yassl_int.cpp +++ b/extra/yassl/src/yassl_int.cpp @@ -773,6 +773,7 @@ void SSL::SetError(YasslError ye) // TODO: add string here } + // set the quiet shutdown mode (close_nofiy not sent or received on shutdown) void SSL::SetQuietShutdown(bool mode) { diff --git a/extra/yassl/taocrypt/src/coding.cpp b/extra/yassl/taocrypt/src/coding.cpp index 55fe31831e3..7a9d50aaac9 100644 --- a/extra/yassl/taocrypt/src/coding.cpp +++ b/extra/yassl/taocrypt/src/coding.cpp @@ -107,11 +107,12 @@ void HexDecoder::Decode() // sanity checks assert( b < sizeof(hexDecode)/sizeof(hexDecode[0]) ); assert( b2 < sizeof(hexDecode)/sizeof(hexDecode[0]) ); - assert( b != bad && b2 != bad ); b = hexDecode[b]; b2 = hexDecode[b2]; + assert( b != bad && b2 != bad ); + decoded_[i++] = (b << 4) | b2; bytes -= 2; } @@ -184,7 +185,7 @@ void Base64Decoder::Decode() { word32 bytes = coded_.size(); word32 plainSz = bytes - ((bytes + (pemLineSz - 1)) / pemLineSz); - plainSz = ((plainSz * 3) / 4) + 3; + plainSz = (plainSz * 3 + 3) / 4; decoded_.New(plainSz); word32 i = 0; diff --git a/extra/yassl/taocrypt/src/crypto.cpp b/extra/yassl/taocrypt/src/crypto.cpp index 82d3b853084..90d406bf0c2 100644 --- a/extra/yassl/taocrypt/src/crypto.cpp +++ b/extra/yassl/taocrypt/src/crypto.cpp @@ -26,6 +26,11 @@ extern "C" { // locking handled internally by library char CRYPTO_lock() { return 0;} char CRYPTO_add_lock() { return 0;} + + + // for openvpn, test are the signatures they use + char EVP_CIPHER_CTX_init() { return 0; } + char CRYPTO_mem_ctrl() { return 0; } } // extern "C" From 9c3a03a239da3b3757d461f908674df79f379c9f Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 28 Aug 2007 11:34:43 +0200 Subject: [PATCH 141/194] Bug#28812 rpl_ssl fails due to assert in extra/yassl/src/socket_wrapper.cpp:117 - Merge sslaccept and sslconnect. - Atomically "reset" vio to VIO_TYPE_SSL when the SSL connection has succeeded, this avoids having to revert anything and thus protects against "close_active_vio" in the middle. - Add some variance to the testcase mysql-test/t/rpl_ssl.test: Add some variance by running two selects before stopping the slave Check that number of records in t1 are equal on master and slave vio/viossl.c: Rewrite sslconnect and sslaccept to automically "reset" the vio to VIO_TYPE_SSL. Also use the fd from 'SSL_get_fd' to avoid setting vio->sd to -1, that previously occured when "close_active_vio" was called during connect/accept. Merge the two function since they were exactly the same except for one line. Update the DBUG printouts to be generic(i.e use peer instead of client/server). --- mysql-test/t/rpl_ssl.test | 15 ++++ vio/viossl.c | 142 ++++++++++++-------------------------- 2 files changed, 61 insertions(+), 96 deletions(-) diff --git a/mysql-test/t/rpl_ssl.test b/mysql-test/t/rpl_ssl.test index d08004cb00b..bf4dcbf8af0 100644 --- a/mysql-test/t/rpl_ssl.test +++ b/mysql-test/t/rpl_ssl.test @@ -41,24 +41,39 @@ select * from t1; # Do the same thing a number of times disable_query_log; +disable_result_log; let $i= 100; while ($i) { start slave; connection master; insert into t1 values (NULL); + select * from t1; # Some variance connection slave; + select * from t1; # Some variance stop slave; dec $i; } start slave; enable_query_log; +enable_result_log; connection master; insert into t1 values (NULL); +let $master_count= `select count(*) from t1`; + sync_slave_with_master; --source include/wait_for_slave_to_start.inc --replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR $MASTER_MYPORT MASTER_MYPORT --replace_column 1 # 7 # 8 # 9 # 22 # 23 # 33 # query_vertical show slave status; +let $slave_count= `select count(*) from t1`; + +if (`select $slave_count != $master_count`) +{ + echo master and slave differed in number of rows; + echo master: $master_count; + echo slave: $slave_count; +} + --echo End of 5.0 tests diff --git a/vio/viossl.c b/vio/viossl.c index 861989136d3..c178d9e9d1b 100644 --- a/vio/viossl.c +++ b/vio/viossl.c @@ -172,78 +172,10 @@ void vio_ssl_delete(Vio *vio) vio_delete(vio); } - int sslaccept(struct st_VioSSLFd *ptr, Vio *vio, long timeout) { - SSL *ssl; - my_bool unused; - my_bool net_blocking; - enum enum_vio_type old_type; DBUG_ENTER("sslaccept"); - DBUG_PRINT("enter", ("sd: %d ptr: 0x%lx, timeout: %ld", - vio->sd, (long) ptr, timeout)); - - old_type= vio->type; - net_blocking= vio_is_blocking(vio); - vio_blocking(vio, 1, &unused); /* Must be called before reset */ - vio_reset(vio, VIO_TYPE_SSL, vio->sd, 0, FALSE); - - if (!(ssl= SSL_new(ptr->ssl_context))) - { - DBUG_PRINT("error", ("SSL_new failure")); - report_errors(ssl); - vio_reset(vio, old_type,vio->sd,0,FALSE); - vio_blocking(vio, net_blocking, &unused); - DBUG_RETURN(1); - } - vio->ssl_arg= (void*)ssl; - DBUG_PRINT("info", ("ssl: 0x%lx timeout: %ld", (long) ssl, timeout)); - SSL_clear(ssl); - SSL_SESSION_set_timeout(SSL_get_session(ssl), timeout); - SSL_set_fd(ssl, vio->sd); - if (SSL_accept(ssl) < 1) - { - DBUG_PRINT("error", ("SSL_accept failure")); - report_errors(ssl); - SSL_free(ssl); - vio->ssl_arg= 0; - vio_reset(vio, old_type,vio->sd,0,FALSE); - vio_blocking(vio, net_blocking, &unused); - DBUG_RETURN(1); - } - -#ifndef DBUG_OFF - { - char buf[1024]; - X509 *client_cert; - DBUG_PRINT("info",("cipher_name= '%s'", SSL_get_cipher_name(ssl))); - - if ((client_cert= SSL_get_peer_certificate (ssl))) - { - DBUG_PRINT("info",("Client certificate:")); - X509_NAME_oneline (X509_get_subject_name (client_cert), - buf, sizeof(buf)); - DBUG_PRINT("info",("\t subject: %s", buf)); - - X509_NAME_oneline (X509_get_issuer_name (client_cert), - buf, sizeof(buf)); - DBUG_PRINT("info",("\t issuer: %s", buf)); - - X509_free (client_cert); - } - else - DBUG_PRINT("info",("Client does not have certificate.")); - - if (SSL_get_shared_ciphers(ssl, buf, sizeof(buf))) - { - DBUG_PRINT("info",("shared_ciphers: '%s'", buf)); - } - else - DBUG_PRINT("info",("no shared ciphers!")); - } -#endif - - DBUG_RETURN(0); + DBUG_RETURN(sslconnect(ptr, vio, timeout)); } @@ -251,57 +183,75 @@ int sslconnect(struct st_VioSSLFd *ptr, Vio *vio, long timeout) { SSL *ssl; my_bool unused; - my_bool net_blocking; - enum enum_vio_type old_type; + my_bool was_blocking; DBUG_ENTER("sslconnect"); - DBUG_PRINT("enter", ("sd: %d ptr: 0x%lx ctx: 0x%lx", - vio->sd, (long) ptr, (long) ptr->ssl_context)); + DBUG_PRINT("enter", ("ptr: 0x%lx, sd: %d ctx: 0x%lx", + (long) ptr, vio->sd, (long) ptr->ssl_context)); + + /* Set socket to blocking if not already set */ + vio_blocking(vio, 1, &was_blocking); - old_type= vio->type; - net_blocking= vio_is_blocking(vio); - vio_blocking(vio, 1, &unused); /* Must be called before reset */ - vio_reset(vio, VIO_TYPE_SSL, vio->sd, 0, FALSE); if (!(ssl= SSL_new(ptr->ssl_context))) { DBUG_PRINT("error", ("SSL_new failure")); report_errors(ssl); - vio_reset(vio, old_type, vio->sd, 0, FALSE); - vio_blocking(vio, net_blocking, &unused); + vio_blocking(vio, was_blocking, &unused); DBUG_RETURN(1); } - vio->ssl_arg= (void*)ssl; DBUG_PRINT("info", ("ssl: 0x%lx timeout: %ld", (long) ssl, timeout)); SSL_clear(ssl); SSL_SESSION_set_timeout(SSL_get_session(ssl), timeout); SSL_set_fd(ssl, vio->sd); - if (SSL_connect(ssl) < 1) + + /* + SSL_do_handshake will select between SSL_connect + or SSL_accept depending on server or client side + */ + if (SSL_do_handshake(ssl) < 1) { - DBUG_PRINT("error", ("SSL_connect failure")); + DBUG_PRINT("error", ("SSL_do_handshake failure")); report_errors(ssl); SSL_free(ssl); - vio->ssl_arg= 0; - vio_reset(vio, old_type, vio->sd, 0, FALSE); - vio_blocking(vio, net_blocking, &unused); + vio_blocking(vio, was_blocking, &unused); DBUG_RETURN(1); } + + /* + Connection succeeded. Install new function handlers, + change type, set sd to the fd used when connecting + and set pointer to the SSL structure + */ + vio_reset(vio, VIO_TYPE_SSL, SSL_get_fd(ssl), 0, 0); + vio->ssl_arg= (void*)ssl; + #ifndef DBUG_OFF { - X509 *server_cert; - DBUG_PRINT("info",("cipher_name: '%s'" , SSL_get_cipher_name(ssl))); + /* Print some info about the peer */ + X509 *cert; + char buf[512]; - if ((server_cert= SSL_get_peer_certificate (ssl))) + DBUG_PRINT("info",("SSL connection succeeded")); + DBUG_PRINT("info",("Using cipher: '%s'" , SSL_get_cipher_name(ssl))); + + if ((cert= SSL_get_peer_certificate (ssl))) { - char buf[256]; - DBUG_PRINT("info",("Server certificate:")); - X509_NAME_oneline(X509_get_subject_name(server_cert), buf, sizeof(buf)); - DBUG_PRINT("info",("\t subject: %s", buf)); - X509_NAME_oneline (X509_get_issuer_name(server_cert), buf, sizeof(buf)); - DBUG_PRINT("info",("\t issuer: %s", buf)); - X509_free (server_cert); + DBUG_PRINT("info",("Peer certificate:")); + X509_NAME_oneline(X509_get_subject_name(cert), buf, sizeof(buf)); + DBUG_PRINT("info",("\t subject: '%s'", buf)); + X509_NAME_oneline(X509_get_issuer_name(cert), buf, sizeof(buf)); + DBUG_PRINT("info",("\t issuer: '%s'", buf)); + X509_free(cert); } else - DBUG_PRINT("info",("Server does not have certificate.")); + DBUG_PRINT("info",("Peer does not have certificate.")); + + if (SSL_get_shared_ciphers(ssl, buf, sizeof(buf))) + { + DBUG_PRINT("info",("shared_ciphers: '%s'", buf)); + } + else + DBUG_PRINT("info",("no shared ciphers!")); } #endif From 3a53dbbae5825d8e05b47f94e7e4c275409c593e Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 28 Aug 2007 11:39:29 +0200 Subject: [PATCH 142/194] Fix warning --- client/mysqltest.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/mysqltest.c b/client/mysqltest.c index 3b83fdb56fc..e851c9dac89 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -1987,7 +1987,7 @@ void var_set_query_get_value(struct st_command *command, VAR *var) while ((row= mysql_fetch_row(res))) { - if (++rows == (ulong) row_no) + if (++rows == row_no) { DBUG_PRINT("info", ("At row %ld, column %d is '%s'", From 7edc7d63569d12ed02c1739361bc389dd2dfc902 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 28 Aug 2007 12:41:25 +0200 Subject: [PATCH 143/194] Temp disable of icheck --- include/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/Makefile.am b/include/Makefile.am index 2775932f46d..8335da36e93 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -15,7 +15,7 @@ # Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, # MA 02111-1307, USA -BUILT_SOURCES = $(HEADERS_GEN) link_sources abi_check +BUILT_SOURCES = $(HEADERS_GEN) link_sources HEADERS_GEN = mysql_version.h my_config.h HEADERS_ABI = mysql.h mysql_com.h mysql_time.h \ my_list.h my_alloc.h typelib.h mysql/plugin.h From 345c18e4e18c27eb387c6cec2e252c8b91bfc302 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 28 Aug 2007 15:32:13 +0200 Subject: [PATCH 144/194] Move "analyze_testcase_failure" to mysqltest(since it knows best when to perform this analyzis) client/mysqltest.c: Add function 'show_query' and use it to output some debug queries when "sync_with_master" has failed. mysql-test/mysql-test-run.pl: Move "analyze_testcase_failure" to mysqltest --- client/mysqltest.c | 69 ++++++++++++++++++++++++++++++++++++ mysql-test/mysql-test-run.pl | 54 ---------------------------- 2 files changed, 69 insertions(+), 54 deletions(-) diff --git a/client/mysqltest.c b/client/mysqltest.c index 693c6d0fb65..23a23dc5719 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -604,6 +604,71 @@ void do_eval(DYNAMIC_STRING *query_eval, const char *query, } +/* + Run query and dump the result to stdout in vertical format + + NOTE! This function should be safe to call when an error + has occured and thus any further errors will be ignored(although logged) + + SYNOPSIS + show_query + mysql - connection to use + query - query to run + +*/ + +static void show_query(MYSQL* mysql, const char* query) +{ + MYSQL_RES* res; + DBUG_ENTER("show_query"); + + if (!mysql) + DBUG_VOID_RETURN; + + if (mysql_query(mysql, query)) + { + log_msg("Error running query '%s': %d %s", + query, mysql_errno(mysql), mysql_error(mysql)); + DBUG_VOID_RETURN; + } + + if ((res= mysql_store_result(mysql)) == NULL) + { + /* No result set returned */ + DBUG_VOID_RETURN; + } + + { + MYSQL_ROW row; + unsigned int i; + unsigned int row_num= 0; + unsigned int num_fields= mysql_num_fields(res); + MYSQL_FIELD *fields= mysql_fetch_fields(res); + + fprintf(stderr, "=== %s ===\n", query); + while ((row= mysql_fetch_row(res))) + { + unsigned long *lengths= mysql_fetch_lengths(res); + row_num++; + + fprintf(stderr, "---- %d. ----\n", row_num); + for(i= 0; i < num_fields; i++) + { + fprintf(stderr, "%s\t%.*s\n", + fields[i].name, + (int)lengths[i], row[i] ? row[i] : "NULL"); + } + } + for (i= 0; i < strlen(query)+8; i++) + fprintf(stderr, "="); + fprintf(stderr, "\n\n"); + } + mysql_free_result(res); + + DBUG_VOID_RETURN; +} + + /* Show any warnings just before the error. Since the last error is added to the warning stack, only print @@warning_count-1 warnings. @@ -3150,7 +3215,11 @@ wait_for_position: SLAVE has been issued ? */ if (tries++ == 30) + { + show_query(mysql, "SHOW MASTER STATUS"); + show_query(mysql, "SHOW SLAVE STATUS"); die("could not sync with master ('%s' returned NULL)", query_buf); + } sleep(1); /* So at most we will wait 30 seconds and make 31 tries */ mysql_free_result(res); goto wait_for_position; diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 269bfbcb40f..48a85f020ae 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -3361,56 +3361,6 @@ sub find_testcase_skipped_reason($) } -sub analyze_testcase_failure_sync_with_master($) -{ - my ($tinfo)= @_; - - my $args; - mtr_init_args(\$args); - - mtr_add_arg($args, "--no-defaults"); - mtr_add_arg($args, "--silent"); - mtr_add_arg($args, "--skip-safemalloc"); - mtr_add_arg($args, "--tmpdir=%s", $opt_tmpdir); - mtr_add_arg($args, "--character-sets-dir=%s", $path_charsetsdir); - - mtr_add_arg($args, "--socket=%s", $master->[0]->{'path_sock'}); - mtr_add_arg($args, "--port=%d", $master->[0]->{'port'}); - mtr_add_arg($args, "--database=test"); - mtr_add_arg($args, "--user=%s", $opt_user); - mtr_add_arg($args, "--password="); - - # Run the test file and append output to log file - mtr_run_test($exe_mysqltest,$args, - "include/analyze_failure_sync_with_master.test", - "$path_timefile", "$path_timefile","", - { append_log_file => 1 }); - -} - -sub analyze_testcase_failure($) -{ - my ($tinfo)= @_; - - # Open mysqltest.log - my $F= IO::File->new($path_timefile) - or return; - - while ( my $line= <$F> ) - { - # Look for "mysqltest: At line nnn: - if ( $line =~ /mysqltest: At line [0-9]*: (.*)/ ) - { - my $error= $1; - # Look for "could not sync with master" - if ( $error =~ /could not sync with master/ ) - { - analyze_testcase_failure_sync_with_master($tinfo); - } - } - } -} - ############################################################################## # # Run a single test case @@ -3503,10 +3453,6 @@ sub run_testcase ($) { } elsif ( $res == 1 ) { - if ( $opt_force ) - { - analyze_testcase_failure($tinfo); - } # Test case failure reported by mysqltest report_failure_and_restart($tinfo); } From 93665e88990904335f5097aaec94de46f67fa9b2 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 28 Aug 2007 15:32:44 +0200 Subject: [PATCH 145/194] Remove unportable constructs in loaddata.test --- mysql-test/r/bdb_notembedded.result | 35 -------------------------- mysql-test/t/bdb_notembedded.test | 38 ----------------------------- mysql-test/t/loaddata.test | 22 ++++++++--------- 3 files changed, 10 insertions(+), 85 deletions(-) delete mode 100644 mysql-test/r/bdb_notembedded.result delete mode 100644 mysql-test/t/bdb_notembedded.test diff --git a/mysql-test/r/bdb_notembedded.result b/mysql-test/r/bdb_notembedded.result deleted file mode 100644 index 14cb5fad915..00000000000 --- a/mysql-test/r/bdb_notembedded.result +++ /dev/null @@ -1,35 +0,0 @@ -set autocommit=1; -reset master; -create table bug16206 (a int); -insert into bug16206 values(1); -start transaction; -insert into bug16206 values(2); -commit; -show binlog events; -Log_name Pos Event_type Server_id End_log_pos Info -f n Format_desc 1 n Server ver: VERSION, Binlog ver: 4 -f n Query 1 n use `test`; create table bug16206 (a int) -f n Query 1 n use `test`; insert into bug16206 values(1) -f n Query 1 n use `test`; insert into bug16206 values(2) -drop table bug16206; -reset master; -create table bug16206 (a int) engine= bdb; -insert into bug16206 values(0); -insert into bug16206 values(1); -start transaction; -insert into bug16206 values(2); -commit; -insert into bug16206 values(3); -show binlog events; -Log_name Pos Event_type Server_id End_log_pos Info -f n Format_desc 1 n Server ver: VERSION, Binlog ver: 4 -f n Query 1 n use `test`; create table bug16206 (a int) engine= bdb -f n Query 1 n use `test`; insert into bug16206 values(0) -f n Query 1 n use `test`; insert into bug16206 values(1) -f n Query 1 n use `test`; BEGIN -f n Query 1 n use `test`; insert into bug16206 values(2) -f n Query 1 n use `test`; COMMIT -f n Query 1 n use `test`; insert into bug16206 values(3) -drop table bug16206; -set autocommit=0; -End of 5.0 tests diff --git a/mysql-test/t/bdb_notembedded.test b/mysql-test/t/bdb_notembedded.test deleted file mode 100644 index 24e64ebbfb2..00000000000 --- a/mysql-test/t/bdb_notembedded.test +++ /dev/null @@ -1,38 +0,0 @@ --- source include/not_embedded.inc --- source include/have_bdb.inc - -# -# Bug #16206: Superfluous COMMIT event in binlog when updating BDB in autocommit mode -# -set autocommit=1; - -let $VERSION=`select version()`; - -reset master; -create table bug16206 (a int); -insert into bug16206 values(1); -start transaction; -insert into bug16206 values(2); -commit; ---replace_result $VERSION VERSION ---replace_column 1 f 2 n 5 n -show binlog events; -drop table bug16206; - -reset master; -create table bug16206 (a int) engine= bdb; -insert into bug16206 values(0); -insert into bug16206 values(1); -start transaction; -insert into bug16206 values(2); -commit; -insert into bug16206 values(3); ---replace_result $VERSION VERSION ---replace_column 1 f 2 n 5 n -show binlog events; -drop table bug16206; - -set autocommit=0; - - ---echo End of 5.0 tests diff --git a/mysql-test/t/loaddata.test b/mysql-test/t/loaddata.test index 260e760e7b3..9eb92015399 100644 --- a/mysql-test/t/loaddata.test +++ b/mysql-test/t/loaddata.test @@ -43,7 +43,7 @@ delete from t1; eval load data infile '$MYSQLTEST_VARDIR/tmp/t1' into table t1; enable_query_log; select * from t1; ---exec rm $MYSQLTEST_VARDIR/tmp/t1 +remove_file $MYSQLTEST_VARDIR/tmp/t1; disable_query_log; eval SELECT * INTO OUTFILE '$MYSQLTEST_VARDIR/tmp/t1' @@ -54,7 +54,7 @@ eval load data infile '$MYSQLTEST_VARDIR/tmp/t1' into table t1 FIELDS TERMINATED BY '' OPTIONALLY ENCLOSED BY '' LINES TERMINATED BY '\r\n'; enable_query_log; select * from t1; ---exec rm $MYSQLTEST_VARDIR/tmp/t1 +remove_file $MYSQLTEST_VARDIR/tmp/t1; SET @@SQL_MODE=@OLD_SQL_MODE; drop table t1; @@ -89,17 +89,16 @@ INSERT INTO t1 (c1) VALUES ('.r.'), ('.rr.'), ('.rrr.'), ('.rrrr.'); SELECT * FROM t1; ---exec rm -f $MYSQLTEST_VARDIR/tmp/t1 --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR eval SELECT * INTO OUTFILE '$MYSQLTEST_VARDIR/tmp/t1' FIELDS ENCLOSED BY 'r' FROM t1; ---exec cat $MYSQLTEST_VARDIR/tmp/t1 +cat_file $MYSQLTEST_VARDIR/tmp/t1; --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR eval LOAD DATA INFILE '$MYSQLTEST_VARDIR/tmp/t1' INTO TABLE t2 FIELDS ENCLOSED BY 'r'; SELECT t1.id, c1, c2 FROM t1 LEFT JOIN t2 ON t1.id=t2.id WHERE c1 != c2; SELECT t1.id, c1, c2 FROM t1 RIGHT JOIN t2 ON t1.id=t2.id WHERE c1 != c2; ---exec rm $MYSQLTEST_VARDIR/tmp/t1 +remove_file $MYSQLTEST_VARDIR/tmp/t1; DROP TABLE t1,t2; # End of 4.1 tests @@ -184,7 +183,7 @@ SET @OLD_SQL_MODE=@@SQL_MODE, @@SQL_MODE=NO_AUTO_VALUE_ON_ZERO; eval load data infile '$MYSQLTEST_VARDIR/tmp/t1' into table t2; enable_query_log; select * from t2; ---exec rm $MYSQLTEST_VARDIR/tmp/t1 +remove_file $MYSQLTEST_VARDIR/tmp/t1; SET @@SQL_MODE=@OLD_SQL_MODE; drop table t1,t2; @@ -200,7 +199,7 @@ eval select * into outfile '$MYSQLTEST_VARDIR/tmp/t2' from t2; eval load data infile '$MYSQLTEST_VARDIR/tmp/t2' into table t1; enable_query_log; select f1 from t1 where f2 <> '0000-00-00 00:00:00' order by f1; ---exec rm $MYSQLTEST_VARDIR/tmp/t2 +remove_file $MYSQLTEST_VARDIR/tmp/t2; delete from t1; disable_query_log; eval SELECT * INTO OUTFILE '$MYSQLTEST_VARDIR/tmp/t2' @@ -210,7 +209,7 @@ eval load data infile '$MYSQLTEST_VARDIR/tmp/t2' into table t1 FIELDS TERMINATED BY '' OPTIONALLY ENCLOSED BY '' LINES TERMINATED BY '\r\n'; enable_query_log; select f1 from t1 where f2 <> '0000-00-00 00:00:00' order by f1; ---exec rm $MYSQLTEST_VARDIR/tmp/t2 +remove_file $MYSQLTEST_VARDIR/tmp/t2; drop table t1,t2; # @@ -223,11 +222,10 @@ CREATE TABLE t1 (c1 INT, c2 TIMESTAMP, c3 REAL, c4 DOUBLE); INSERT INTO t1 (c1, c2, c3, c4) VALUES (10, '1970-02-01 01:02:03', 1.1E-100, 1.1E+100); SELECT * FROM t1; ---exec rm -f $MYSQLTEST_VARDIR/tmp/t1 --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR eval SELECT * INTO OUTFILE '$MYSQLTEST_VARDIR/tmp/t1' FIELDS ENCLOSED BY '-' FROM t1; ---exec cat $MYSQLTEST_VARDIR/tmp/t1 ---exec echo EOF +cat_file $MYSQLTEST_VARDIR/tmp/t1; +echo EOF; TRUNCATE t1; @@ -235,7 +233,7 @@ TRUNCATE t1; eval LOAD DATA INFILE '$MYSQLTEST_VARDIR/tmp/t1' INTO TABLE t1 FIELDS ENCLOSED BY '-'; SELECT * FROM t1; ---exec rm $MYSQLTEST_VARDIR/tmp/t1 +remove_file $MYSQLTEST_VARDIR/tmp/t1; DROP TABLE t1; # End of 5.0 tests From 9e70dba8e98bab6aec2bdc102ed3985b176dc7cf Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 28 Aug 2007 15:35:42 +0200 Subject: [PATCH 146/194] Remove unportable construct in loaddata.test --- mysql-test/t/loaddata.test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysql-test/t/loaddata.test b/mysql-test/t/loaddata.test index 58d5ee7bb31..5433d787c14 100644 --- a/mysql-test/t/loaddata.test +++ b/mysql-test/t/loaddata.test @@ -262,6 +262,6 @@ select @@character_set_filesystem; LOAD DATA INFILE 't@002d1' INTO TABLE t1; SELECT * FROM t1; DROP TABLE t1; ---exec rm $MYSQLTEST_VARDIR/master-data/test/t@002d1 +remove_file $MYSQLTEST_VARDIR/master-data/test/t@002d1; SET character_set_filesystem=default; select @@character_set_filesystem; From 5f524dadcdad94c9a2b9dcbd4cf8031981c891c6 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 28 Aug 2007 16:44:31 +0200 Subject: [PATCH 147/194] Remove unportable constructs in loaddata.test --- mysql-test/t/loaddata.test | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/mysql-test/t/loaddata.test b/mysql-test/t/loaddata.test index 260e760e7b3..9eb92015399 100644 --- a/mysql-test/t/loaddata.test +++ b/mysql-test/t/loaddata.test @@ -43,7 +43,7 @@ delete from t1; eval load data infile '$MYSQLTEST_VARDIR/tmp/t1' into table t1; enable_query_log; select * from t1; ---exec rm $MYSQLTEST_VARDIR/tmp/t1 +remove_file $MYSQLTEST_VARDIR/tmp/t1; disable_query_log; eval SELECT * INTO OUTFILE '$MYSQLTEST_VARDIR/tmp/t1' @@ -54,7 +54,7 @@ eval load data infile '$MYSQLTEST_VARDIR/tmp/t1' into table t1 FIELDS TERMINATED BY '' OPTIONALLY ENCLOSED BY '' LINES TERMINATED BY '\r\n'; enable_query_log; select * from t1; ---exec rm $MYSQLTEST_VARDIR/tmp/t1 +remove_file $MYSQLTEST_VARDIR/tmp/t1; SET @@SQL_MODE=@OLD_SQL_MODE; drop table t1; @@ -89,17 +89,16 @@ INSERT INTO t1 (c1) VALUES ('.r.'), ('.rr.'), ('.rrr.'), ('.rrrr.'); SELECT * FROM t1; ---exec rm -f $MYSQLTEST_VARDIR/tmp/t1 --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR eval SELECT * INTO OUTFILE '$MYSQLTEST_VARDIR/tmp/t1' FIELDS ENCLOSED BY 'r' FROM t1; ---exec cat $MYSQLTEST_VARDIR/tmp/t1 +cat_file $MYSQLTEST_VARDIR/tmp/t1; --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR eval LOAD DATA INFILE '$MYSQLTEST_VARDIR/tmp/t1' INTO TABLE t2 FIELDS ENCLOSED BY 'r'; SELECT t1.id, c1, c2 FROM t1 LEFT JOIN t2 ON t1.id=t2.id WHERE c1 != c2; SELECT t1.id, c1, c2 FROM t1 RIGHT JOIN t2 ON t1.id=t2.id WHERE c1 != c2; ---exec rm $MYSQLTEST_VARDIR/tmp/t1 +remove_file $MYSQLTEST_VARDIR/tmp/t1; DROP TABLE t1,t2; # End of 4.1 tests @@ -184,7 +183,7 @@ SET @OLD_SQL_MODE=@@SQL_MODE, @@SQL_MODE=NO_AUTO_VALUE_ON_ZERO; eval load data infile '$MYSQLTEST_VARDIR/tmp/t1' into table t2; enable_query_log; select * from t2; ---exec rm $MYSQLTEST_VARDIR/tmp/t1 +remove_file $MYSQLTEST_VARDIR/tmp/t1; SET @@SQL_MODE=@OLD_SQL_MODE; drop table t1,t2; @@ -200,7 +199,7 @@ eval select * into outfile '$MYSQLTEST_VARDIR/tmp/t2' from t2; eval load data infile '$MYSQLTEST_VARDIR/tmp/t2' into table t1; enable_query_log; select f1 from t1 where f2 <> '0000-00-00 00:00:00' order by f1; ---exec rm $MYSQLTEST_VARDIR/tmp/t2 +remove_file $MYSQLTEST_VARDIR/tmp/t2; delete from t1; disable_query_log; eval SELECT * INTO OUTFILE '$MYSQLTEST_VARDIR/tmp/t2' @@ -210,7 +209,7 @@ eval load data infile '$MYSQLTEST_VARDIR/tmp/t2' into table t1 FIELDS TERMINATED BY '' OPTIONALLY ENCLOSED BY '' LINES TERMINATED BY '\r\n'; enable_query_log; select f1 from t1 where f2 <> '0000-00-00 00:00:00' order by f1; ---exec rm $MYSQLTEST_VARDIR/tmp/t2 +remove_file $MYSQLTEST_VARDIR/tmp/t2; drop table t1,t2; # @@ -223,11 +222,10 @@ CREATE TABLE t1 (c1 INT, c2 TIMESTAMP, c3 REAL, c4 DOUBLE); INSERT INTO t1 (c1, c2, c3, c4) VALUES (10, '1970-02-01 01:02:03', 1.1E-100, 1.1E+100); SELECT * FROM t1; ---exec rm -f $MYSQLTEST_VARDIR/tmp/t1 --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR eval SELECT * INTO OUTFILE '$MYSQLTEST_VARDIR/tmp/t1' FIELDS ENCLOSED BY '-' FROM t1; ---exec cat $MYSQLTEST_VARDIR/tmp/t1 ---exec echo EOF +cat_file $MYSQLTEST_VARDIR/tmp/t1; +echo EOF; TRUNCATE t1; @@ -235,7 +233,7 @@ TRUNCATE t1; eval LOAD DATA INFILE '$MYSQLTEST_VARDIR/tmp/t1' INTO TABLE t1 FIELDS ENCLOSED BY '-'; SELECT * FROM t1; ---exec rm $MYSQLTEST_VARDIR/tmp/t1 +remove_file $MYSQLTEST_VARDIR/tmp/t1; DROP TABLE t1; # End of 5.0 tests From 2bb6a44af1dd478690eac91ce8ae89d786dd0838 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 28 Aug 2007 16:47:05 +0200 Subject: [PATCH 148/194] Streamline "do_close_connection" and "do_send_quit" Fix typo, "next_con" -> "con" client/mysqltest.c: Reuse "find_connection_by_name" both from "do_close_connection" and "do_send_quit" Adjust alignment of comment Fix typo in "do_close_connection", it used the global variable "next_con" instead of local variable "con" --- client/mysqltest.c | 128 +++++++++++++++++++++------------------------ 1 file changed, 60 insertions(+), 68 deletions(-) diff --git a/client/mysqltest.c b/client/mysqltest.c index 23a23dc5719..b2b579528ae 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -2983,15 +2983,30 @@ void do_diff_files(struct st_command *command) DBUG_VOID_RETURN; } - /* - SYNOPSIS - do_send_quit - command called command - DESCRIPTION - Sends a simple quit command to the server for the named connection. +struct st_connection * find_connection_by_name(const char *name) +{ + struct st_connection *con; + for (con= connections; con < next_con; con++) + { + if (!strcmp(con->name, name)) + { + return con; + } + } + return 0; /* Connection not found */ +} - */ + +/* + SYNOPSIS + do_send_quit + command called command + + DESCRIPTION + Sends a simple quit command to the server for the named connection. + +*/ void do_send_quit(struct st_command *command) { @@ -3002,7 +3017,7 @@ void do_send_quit(struct st_command *command) DBUG_PRINT("enter",("name: '%s'",p)); if (!*p) - die("Missing connection name in do_send_quit"); + die("Missing connection name in send_quit"); name= p; while (*p && !my_isspace(charset_info,*p)) p++; @@ -3011,17 +3026,12 @@ void do_send_quit(struct st_command *command) *p++= 0; command->last_argument= p; - /* Loop through connection pool for connection to close */ - for (con= connections; con < next_con; con++) - { - DBUG_PRINT("info", ("con->name: %s", con->name)); - if (!strcmp(con->name, name)) - { - simple_command(&con->mysql,COM_QUIT,NullS,0,1); - DBUG_VOID_RETURN; - } - } - die("connection '%s' not found in connection pool", name); + if (!(con= find_connection_by_name(name))) + die("connection '%s' not found in connection pool", name); + + simple_command(&con->mysql,COM_QUIT,NullS,0,1); + + DBUG_VOID_RETURN; } @@ -3858,20 +3868,6 @@ void set_reconnect(MYSQL* mysql, int val) } -struct st_connection * find_connection_by_name(const char *name) -{ - struct st_connection *con; - for (con= connections; con < next_con; con++) - { - if (!strcmp(con->name, name)) - { - return con; - } - } - return 0; /* Connection not found */ -} - - int select_connection_name(const char *name) { DBUG_ENTER("select_connection2"); @@ -3919,44 +3915,40 @@ void do_close_connection(struct st_command *command) *p++= 0; command->last_argument= p; - /* Loop through connection pool for connection to close */ - for (con= connections; con < next_con; con++) - { - DBUG_PRINT("info", ("con->name: %s", con->name)); - if (!strcmp(con->name, name)) - { - DBUG_PRINT("info", ("Closing connection %s", con->name)); + if (!(con= find_connection_by_name(name))) + die("connection '%s' not found in connection pool", name); + + DBUG_PRINT("info", ("Closing connection %s", con->name)); #ifndef EMBEDDED_LIBRARY - if (command->type == Q_DIRTY_CLOSE) - { - if (con->mysql.net.vio) - { - vio_delete(con->mysql.net.vio); - con->mysql.net.vio = 0; - } - } -#endif - if (next_con->stmt) - mysql_stmt_close(next_con->stmt); - next_con->stmt= 0; - - mysql_close(&con->mysql); - if (con->util_mysql) - mysql_close(con->util_mysql); - con->util_mysql= 0; - my_free(con->name, MYF(0)); - - /* - When the connection is closed set name to "-closed_connection-" - to make it possible to reuse the connection name. - */ - if (!(con->name = my_strdup("-closed_connection-", MYF(MY_WME)))) - die("Out of memory"); - - DBUG_VOID_RETURN; + if (command->type == Q_DIRTY_CLOSE) + { + if (con->mysql.net.vio) + { + vio_delete(con->mysql.net.vio); + con->mysql.net.vio = 0; } } - die("connection '%s' not found in connection pool", name); +#endif + if (con->stmt) + mysql_stmt_close(con->stmt); + con->stmt= 0; + + mysql_close(&con->mysql); + + if (con->util_mysql) + mysql_close(con->util_mysql); + con->util_mysql= 0; + + my_free(con->name, MYF(0)); + + /* + When the connection is closed set name to "-closed_connection-" + to make it possible to reuse the connection name. + */ + if (!(con->name = my_strdup("-closed_connection-", MYF(MY_WME)))) + die("Out of memory"); + + DBUG_VOID_RETURN; } From e0e44ad66e81cbff0d885ecd271eb9e546a02190 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 28 Aug 2007 11:16:03 -0600 Subject: [PATCH 149/194] Bug#30625 (Performance, reduce depth for expressions) This is a performance bug, affecting in particular the bison generated code for the parser. Prior to this fix, the grammar used a long chain of reduces to parse an expression, like: bit_expr -> bit_term bit_term -> bit_factor bit_factor -> value_expr value_expr -> term term -> factor etc This chain of reduces cause the internal state automaton in the generated parser to execute more state transitions and more reduces, so that the generated MySQLParse() function would spend a lot of time looping to execute all the grammar reductions. With this patch, the grammar has been reorganized so that rules are more "flat", limiting the depth of reduces needed to parse . Tests have been written to enforce that relative priorities and properties of operators have not changed while changing the grammar. See the bug report for performance data. mysql-test/r/parser_precedence.result: Improved test coverage for operator precedence mysql-test/t/parser_precedence.test: Improved test coverage for operator precedence sql/sql_yacc.yy: Simplified the grammar to improve performances --- mysql-test/r/parser_precedence.result | 391 ++++++++++++++++++++++++++ mysql-test/t/parser_precedence.test | 240 ++++++++++++++++ sql/sql_yacc.yy | 115 ++++---- 3 files changed, 686 insertions(+), 60 deletions(-) diff --git a/mysql-test/r/parser_precedence.result b/mysql-test/r/parser_precedence.result index e2d35521ca9..cf301ec677b 100644 --- a/mysql-test/r/parser_precedence.result +++ b/mysql-test/r/parser_precedence.result @@ -354,3 +354,394 @@ where (A OR (B XOR C)) != (A OR B XOR C); count(*) 0 drop table t1_30237_bool; +Testing that NOT has precedence over OR +select (NOT FALSE) OR TRUE, NOT (FALSE OR TRUE), NOT FALSE OR TRUE; +(NOT FALSE) OR TRUE NOT (FALSE OR TRUE) NOT FALSE OR TRUE +1 0 1 +Testing that NOT has precedence over XOR +select (NOT FALSE) XOR FALSE, NOT (FALSE XOR FALSE), NOT FALSE XOR FALSE; +(NOT FALSE) XOR FALSE NOT (FALSE XOR FALSE) NOT FALSE XOR FALSE +1 1 1 +Testing that NOT has precedence over AND +select (NOT FALSE) AND FALSE, NOT (FALSE AND FALSE), NOT FALSE AND FALSE; +(NOT FALSE) AND FALSE NOT (FALSE AND FALSE) NOT FALSE AND FALSE +0 1 0 +Testing that NOT is associative +select NOT NOT TRUE, NOT NOT NOT FALSE; +NOT NOT TRUE NOT NOT NOT FALSE +1 1 +Testing that IS has precedence over NOT +select (NOT NULL) IS TRUE, NOT (NULL IS TRUE), NOT NULL IS TRUE; +(NOT NULL) IS TRUE NOT (NULL IS TRUE) NOT NULL IS TRUE +0 1 1 +select (NOT NULL) IS NOT TRUE, NOT (NULL IS NOT TRUE), NOT NULL IS NOT TRUE; +(NOT NULL) IS NOT TRUE NOT (NULL IS NOT TRUE) NOT NULL IS NOT TRUE +1 0 0 +select (NOT NULL) IS FALSE, NOT (NULL IS FALSE), NOT NULL IS FALSE; +(NOT NULL) IS FALSE NOT (NULL IS FALSE) NOT NULL IS FALSE +0 1 1 +select (NOT NULL) IS NOT FALSE, NOT (NULL IS NOT FALSE), NOT NULL IS NOT FALSE; +(NOT NULL) IS NOT FALSE NOT (NULL IS NOT FALSE) NOT NULL IS NOT FALSE +1 0 0 +select (NOT TRUE) IS UNKNOWN, NOT (TRUE IS UNKNOWN), NOT TRUE IS UNKNOWN; +(NOT TRUE) IS UNKNOWN NOT (TRUE IS UNKNOWN) NOT TRUE IS UNKNOWN +0 1 1 +select (NOT TRUE) IS NOT UNKNOWN, NOT (TRUE IS NOT UNKNOWN), NOT TRUE IS NOT UNKNOWN; +(NOT TRUE) IS NOT UNKNOWN NOT (TRUE IS NOT UNKNOWN) NOT TRUE IS NOT UNKNOWN +1 0 0 +select (NOT TRUE) IS NULL, NOT (TRUE IS NULL), NOT TRUE IS NULL; +(NOT TRUE) IS NULL NOT (TRUE IS NULL) NOT TRUE IS NULL +0 1 1 +select (NOT TRUE) IS NOT NULL, NOT (TRUE IS NOT NULL), NOT TRUE IS NOT NULL; +(NOT TRUE) IS NOT NULL NOT (TRUE IS NOT NULL) NOT TRUE IS NOT NULL +1 0 0 +Testing that IS [NOT] TRUE/FALSE/UNKNOWN predicates are not associative +select TRUE IS TRUE IS TRUE IS TRUE; +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 'IS TRUE IS TRUE' at line 1 +select FALSE IS NOT TRUE IS NOT TRUE IS NOT TRUE; +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 'IS NOT TRUE IS NOT TRUE' at line 1 +select NULL IS FALSE IS FALSE IS FALSE; +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 'IS FALSE IS FALSE' at line 1 +select TRUE IS NOT FALSE IS NOT FALSE IS NOT FALSE; +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 'IS NOT FALSE IS NOT FALSE' at line 1 +select FALSE IS UNKNOWN IS UNKNOWN IS UNKNOWN; +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 'IS UNKNOWN IS UNKNOWN' at line 1 +select TRUE IS NOT UNKNOWN IS NOT UNKNOWN IS NOT UNKNOWN; +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 'IS NOT UNKNOWN IS NOT UNKNOWN' at line 1 +Testing that IS [NOT] NULL predicates are associative +select FALSE IS NULL IS NULL IS NULL; +FALSE IS NULL IS NULL IS NULL +0 +select TRUE IS NOT NULL IS NOT NULL IS NOT NULL; +TRUE IS NOT NULL IS NOT NULL IS NOT NULL +1 +Testing that comparison operators are left associative +select 1 <=> 2 <=> 2, (1 <=> 2) <=> 2, 1 <=> (2 <=> 2); +1 <=> 2 <=> 2 (1 <=> 2) <=> 2 1 <=> (2 <=> 2) +0 0 1 +select 1 = 2 = 2, (1 = 2) = 2, 1 = (2 = 2); +1 = 2 = 2 (1 = 2) = 2 1 = (2 = 2) +0 0 1 +select 1 != 2 != 3, (1 != 2) != 3, 1 != (2 != 3); +1 != 2 != 3 (1 != 2) != 3 1 != (2 != 3) +1 1 0 +select 1 <> 2 <> 3, (1 <> 2) <> 3, 1 <> (2 <> 3); +1 <> 2 <> 3 (1 <> 2) <> 3 1 <> (2 <> 3) +1 1 0 +select 1 < 2 < 3, (1 < 2) < 3, 1 < (2 < 3); +1 < 2 < 3 (1 < 2) < 3 1 < (2 < 3) +1 1 0 +select 3 <= 2 <= 1, (3 <= 2) <= 1, 3 <= (2 <= 1); +3 <= 2 <= 1 (3 <= 2) <= 1 3 <= (2 <= 1) +1 1 0 +select 1 > 2 > 3, (1 > 2) > 3, 1 > (2 > 3); +1 > 2 > 3 (1 > 2) > 3 1 > (2 > 3) +0 0 1 +select 1 >= 2 >= 3, (1 >= 2) >= 3, 1 >= (2 >= 3); +1 >= 2 >= 3 (1 >= 2) >= 3 1 >= (2 >= 3) +0 0 1 +Testing that | is associative +select 0xF0 | 0x0F | 0x55, (0xF0 | 0x0F) | 0x55, 0xF0 | (0x0F | 0x55); +0xF0 | 0x0F | 0x55 (0xF0 | 0x0F) | 0x55 0xF0 | (0x0F | 0x55) +255 255 255 +Testing that & is associative +select 0xF5 & 0x5F & 0x55, (0xF5 & 0x5F) & 0x55, 0xF5 & (0x5F & 0x55); +0xF5 & 0x5F & 0x55 (0xF5 & 0x5F) & 0x55 0xF5 & (0x5F & 0x55) +85 85 85 +Testing that << is left associative +select 4 << 3 << 2, (4 << 3) << 2, 4 << (3 << 2); +4 << 3 << 2 (4 << 3) << 2 4 << (3 << 2) +128 128 16384 +Testing that >> is left associative +select 256 >> 3 >> 2, (256 >> 3) >> 2, 256 >> (3 >> 2); +256 >> 3 >> 2 (256 >> 3) >> 2 256 >> (3 >> 2) +8 8 256 +Testing that & has precedence over | +select 0xF0 & 0x0F | 0x55, (0xF0 & 0x0F) | 0x55, 0xF0 & (0x0F | 0x55); +0xF0 & 0x0F | 0x55 (0xF0 & 0x0F) | 0x55 0xF0 & (0x0F | 0x55) +85 85 80 +select 0x55 | 0xF0 & 0x0F, (0x55 | 0xF0) & 0x0F, 0x55 | (0xF0 & 0x0F); +0x55 | 0xF0 & 0x0F (0x55 | 0xF0) & 0x0F 0x55 | (0xF0 & 0x0F) +85 5 85 +Testing that << has precedence over | +select 0x0F << 4 | 0x0F, (0x0F << 4) | 0x0F, 0x0F << (4 | 0x0F); +0x0F << 4 | 0x0F (0x0F << 4) | 0x0F 0x0F << (4 | 0x0F) +255 255 491520 +select 0x0F | 0x0F << 4, (0x0F | 0x0F) << 4, 0x0F | (0x0F << 4); +0x0F | 0x0F << 4 (0x0F | 0x0F) << 4 0x0F | (0x0F << 4) +255 240 255 +Testing that >> has precedence over | +select 0xF0 >> 4 | 0xFF, (0xF0 >> 4) | 0xFF, 0xF0 >> (4 | 0xFF); +0xF0 >> 4 | 0xFF (0xF0 >> 4) | 0xFF 0xF0 >> (4 | 0xFF) +255 255 0 +select 0xFF | 0xF0 >> 4, (0xFF | 0xF0) >> 4, 0xFF | (0xF0 >> 4); +0xFF | 0xF0 >> 4 (0xFF | 0xF0) >> 4 0xFF | (0xF0 >> 4) +255 15 255 +Testing that << has precedence over & +select 0x0F << 4 & 0xF0, (0x0F << 4) & 0xF0, 0x0F << (4 & 0xF0); +0x0F << 4 & 0xF0 (0x0F << 4) & 0xF0 0x0F << (4 & 0xF0) +240 240 15 +select 0xF0 & 0x0F << 4, (0xF0 & 0x0F) << 4, 0xF0 & (0x0F << 4); +0xF0 & 0x0F << 4 (0xF0 & 0x0F) << 4 0xF0 & (0x0F << 4) +240 0 240 +Testing that >> has precedence over & +select 0xF0 >> 4 & 0x55, (0xF0 >> 4) & 0x55, 0xF0 >> (4 & 0x55); +0xF0 >> 4 & 0x55 (0xF0 >> 4) & 0x55 0xF0 >> (4 & 0x55) +5 5 15 +select 0x0F & 0xF0 >> 4, (0x0F & 0xF0) >> 4, 0x0F & (0xF0 >> 4); +0x0F & 0xF0 >> 4 (0x0F & 0xF0) >> 4 0x0F & (0xF0 >> 4) +15 0 15 +Testing that >> and << have the same precedence +select 0xFF >> 4 << 2, (0xFF >> 4) << 2, 0xFF >> (4 << 2); +0xFF >> 4 << 2 (0xFF >> 4) << 2 0xFF >> (4 << 2) +60 60 0 +select 0x0F << 4 >> 2, (0x0F << 4) >> 2, 0x0F << (4 >> 2); +0x0F << 4 >> 2 (0x0F << 4) >> 2 0x0F << (4 >> 2) +60 60 30 +Testing that binary + is associative +select 1 + 2 + 3, (1 + 2) + 3, 1 + (2 + 3); +1 + 2 + 3 (1 + 2) + 3 1 + (2 + 3) +6 6 6 +Testing that binary - is left associative +select 1 - 2 - 3, (1 - 2) - 3, 1 - (2 - 3); +1 - 2 - 3 (1 - 2) - 3 1 - (2 - 3) +-4 -4 2 +Testing that binary + and binary - have the same precedence +select 1 + 2 - 3, (1 + 2) - 3, 1 + (2 - 3); +1 + 2 - 3 (1 + 2) - 3 1 + (2 - 3) +0 0 0 +select 1 - 2 + 3, (1 - 2) + 3, 1 - (2 + 3); +1 - 2 + 3 (1 - 2) + 3 1 - (2 + 3) +2 2 -4 +Testing that binary + has precedence over | +select 0xF0 + 0x0F | 0x55, (0xF0 + 0x0F) | 0x55, 0xF0 + (0x0F | 0x55); +0xF0 + 0x0F | 0x55 (0xF0 + 0x0F) | 0x55 0xF0 + (0x0F | 0x55) +255 255 335 +select 0x55 | 0xF0 + 0x0F, (0x55 | 0xF0) + 0x0F, 0x55 | (0xF0 + 0x0F); +0x55 | 0xF0 + 0x0F (0x55 | 0xF0) + 0x0F 0x55 | (0xF0 + 0x0F) +255 260 255 +Testing that binary + has precedence over & +select 0xF0 + 0x0F & 0x55, (0xF0 + 0x0F) & 0x55, 0xF0 + (0x0F & 0x55); +0xF0 + 0x0F & 0x55 (0xF0 + 0x0F) & 0x55 0xF0 + (0x0F & 0x55) +85 85 245 +select 0x55 & 0xF0 + 0x0F, (0x55 & 0xF0) + 0x0F, 0x55 & (0xF0 + 0x0F); +0x55 & 0xF0 + 0x0F (0x55 & 0xF0) + 0x0F 0x55 & (0xF0 + 0x0F) +85 95 85 +Testing that binary + has precedence over << +select 2 + 3 << 4, (2 + 3) << 4, 2 + (3 << 4); +2 + 3 << 4 (2 + 3) << 4 2 + (3 << 4) +80 80 50 +select 3 << 4 + 2, (3 << 4) + 2, 3 << (4 + 2); +3 << 4 + 2 (3 << 4) + 2 3 << (4 + 2) +192 50 192 +Testing that binary + has precedence over >> +select 4 + 3 >> 2, (4 + 3) >> 2, 4 + (3 >> 2); +4 + 3 >> 2 (4 + 3) >> 2 4 + (3 >> 2) +1 1 4 +select 3 >> 2 + 1, (3 >> 2) + 1, 3 >> (2 + 1); +3 >> 2 + 1 (3 >> 2) + 1 3 >> (2 + 1) +0 1 0 +Testing that binary - has precedence over | +select 0xFF - 0x0F | 0x55, (0xFF - 0x0F) | 0x55, 0xFF - (0x0F | 0x55); +0xFF - 0x0F | 0x55 (0xFF - 0x0F) | 0x55 0xFF - (0x0F | 0x55) +245 245 160 +select 0x55 | 0xFF - 0xF0, (0x55 | 0xFF) - 0xF0, 0x55 | (0xFF - 0xF0); +0x55 | 0xFF - 0xF0 (0x55 | 0xFF) - 0xF0 0x55 | (0xFF - 0xF0) +95 15 95 +Testing that binary - has precedence over & +select 0xFF - 0xF0 & 0x55, (0xFF - 0xF0) & 0x55, 0xFF - (0xF0 & 0x55); +0xFF - 0xF0 & 0x55 (0xFF - 0xF0) & 0x55 0xFF - (0xF0 & 0x55) +5 5 175 +select 0x55 & 0xFF - 0xF0, (0x55 & 0xFF) - 0xF0, 0x55 & (0xFF - 0xF0); +0x55 & 0xFF - 0xF0 (0x55 & 0xFF) - 0xF0 0x55 & (0xFF - 0xF0) +5 -155 5 +Testing that binary - has precedence over << +select 16 - 3 << 2, (16 - 3) << 2, 16 - (3 << 2); +16 - 3 << 2 (16 - 3) << 2 16 - (3 << 2) +52 52 4 +select 4 << 3 - 2, (4 << 3) - 2, 4 << (3 - 2); +4 << 3 - 2 (4 << 3) - 2 4 << (3 - 2) +8 30 8 +Testing that binary - has precedence over >> +select 16 - 3 >> 2, (16 - 3) >> 2, 16 - (3 >> 2); +16 - 3 >> 2 (16 - 3) >> 2 16 - (3 >> 2) +3 3 16 +select 16 >> 3 - 2, (16 >> 3) - 2, 16 >> (3 - 2); +16 >> 3 - 2 (16 >> 3) - 2 16 >> (3 - 2) +8 0 8 +Testing that * is associative +select 2 * 3 * 4, (2 * 3) * 4, 2 * (3 * 4); +2 * 3 * 4 (2 * 3) * 4 2 * (3 * 4) +24 24 24 +Testing that * has precedence over | +select 2 * 0x40 | 0x0F, (2 * 0x40) | 0x0F, 2 * (0x40 | 0x0F); +2 * 0x40 | 0x0F (2 * 0x40) | 0x0F 2 * (0x40 | 0x0F) +143 143 158 +select 0x0F | 2 * 0x40, (0x0F | 2) * 0x40, 0x0F | (2 * 0x40); +0x0F | 2 * 0x40 (0x0F | 2) * 0x40 0x0F | (2 * 0x40) +143 960 143 +Testing that * has precedence over & +select 2 * 0x40 & 0x55, (2 * 0x40) & 0x55, 2 * (0x40 & 0x55); +2 * 0x40 & 0x55 (2 * 0x40) & 0x55 2 * (0x40 & 0x55) +0 0 128 +select 0xF0 & 2 * 0x40, (0xF0 & 2) * 0x40, 0xF0 & (2 * 0x40); +0xF0 & 2 * 0x40 (0xF0 & 2) * 0x40 0xF0 & (2 * 0x40) +128 0 128 +Testing that * has precedence over << +select 5 * 3 << 4, (5 * 3) << 4, 5 * (3 << 4); +5 * 3 << 4 (5 * 3) << 4 5 * (3 << 4) +240 240 240 +select 2 << 3 * 4, (2 << 3) * 4, 2 << (3 * 4); +2 << 3 * 4 (2 << 3) * 4 2 << (3 * 4) +8192 64 8192 +Testing that * has precedence over >> +select 3 * 4 >> 2, (3 * 4) >> 2, 3 * (4 >> 2); +3 * 4 >> 2 (3 * 4) >> 2 3 * (4 >> 2) +3 3 3 +select 4 >> 2 * 3, (4 >> 2) * 3, 4 >> (2 * 3); +4 >> 2 * 3 (4 >> 2) * 3 4 >> (2 * 3) +0 3 0 +Testing that * has precedence over binary + +select 2 * 3 + 4, (2 * 3) + 4, 2 * (3 + 4); +2 * 3 + 4 (2 * 3) + 4 2 * (3 + 4) +10 10 14 +select 2 + 3 * 4, (2 + 3) * 4, 2 + (3 * 4); +2 + 3 * 4 (2 + 3) * 4 2 + (3 * 4) +14 20 14 +Testing that * has precedence over binary - +select 4 * 3 - 2, (4 * 3) - 2, 4 * (3 - 2); +4 * 3 - 2 (4 * 3) - 2 4 * (3 - 2) +10 10 4 +select 4 - 3 * 2, (4 - 3) * 2, 4 - (3 * 2); +4 - 3 * 2 (4 - 3) * 2 4 - (3 * 2) +-2 2 -2 +Testing that / is left associative +select 15 / 5 / 3, (15 / 5) / 3, 15 / (5 / 3); +15 / 5 / 3 (15 / 5) / 3 15 / (5 / 3) +1.00000000 1.00000000 9.0000 +Testing that / has precedence over | +select 105 / 5 | 2, (105 / 5) | 2, 105 / (5 | 2); +105 / 5 | 2 (105 / 5) | 2 105 / (5 | 2) +23 23 15.0000 +select 105 | 2 / 5, (105 | 2) / 5, 105 | (2 / 5); +105 | 2 / 5 (105 | 2) / 5 105 | (2 / 5) +105 21.4000 105 +Testing that / has precedence over & +select 105 / 5 & 0x0F, (105 / 5) & 0x0F, 105 / (5 & 0x0F); +105 / 5 & 0x0F (105 / 5) & 0x0F 105 / (5 & 0x0F) +5 5 21.0000 +select 0x0F & 105 / 5, (0x0F & 105) / 5, 0x0F & (105 / 5); +0x0F & 105 / 5 (0x0F & 105) / 5 0x0F & (105 / 5) +5 1.8000 5 +Testing that / has precedence over << +select 0x80 / 4 << 2, (0x80 / 4) << 2, 0x80 / (4 << 2); +0x80 / 4 << 2 (0x80 / 4) << 2 0x80 / (4 << 2) +128 128 8.0000 +select 0x80 << 4 / 2, (0x80 << 4) / 2, 0x80 << (4 / 2); +0x80 << 4 / 2 (0x80 << 4) / 2 0x80 << (4 / 2) +512 1024.0000 512 +Testing that / has precedence over >> +select 0x80 / 4 >> 2, (0x80 / 4) >> 2, 0x80 / (4 >> 2); +0x80 / 4 >> 2 (0x80 / 4) >> 2 0x80 / (4 >> 2) +8 8 128.0000 +select 0x80 >> 4 / 2, (0x80 >> 4) / 2, 0x80 >> (4 / 2); +0x80 >> 4 / 2 (0x80 >> 4) / 2 0x80 >> (4 / 2) +32 4.0000 32 +Testing that / has precedence over binary + +select 0x80 / 2 + 2, (0x80 / 2) + 2, 0x80 / (2 + 2); +0x80 / 2 + 2 (0x80 / 2) + 2 0x80 / (2 + 2) +66.0000 66.0000 32.0000 +select 0x80 + 2 / 2, (0x80 + 2) / 2, 0x80 + (2 / 2); +0x80 + 2 / 2 (0x80 + 2) / 2 0x80 + (2 / 2) +129.0000 65.0000 129.0000 +Testing that / has precedence over binary - +select 0x80 / 4 - 2, (0x80 / 4) - 2, 0x80 / (4 - 2); +0x80 / 4 - 2 (0x80 / 4) - 2 0x80 / (4 - 2) +30.0000 30.0000 64.0000 +select 0x80 - 4 / 2, (0x80 - 4) / 2, 0x80 - (4 / 2); +0x80 - 4 / 2 (0x80 - 4) / 2 0x80 - (4 / 2) +126.0000 62.0000 126.0000 +Testing that ^ is associative +select 0xFF ^ 0xF0 ^ 0x0F, (0xFF ^ 0xF0) ^ 0x0F, 0xFF ^ (0xF0 ^ 0x0F); +0xFF ^ 0xF0 ^ 0x0F (0xFF ^ 0xF0) ^ 0x0F 0xFF ^ (0xF0 ^ 0x0F) +0 0 0 +select 0xFF ^ 0xF0 ^ 0x55, (0xFF ^ 0xF0) ^ 0x55, 0xFF ^ (0xF0 ^ 0x55); +0xFF ^ 0xF0 ^ 0x55 (0xFF ^ 0xF0) ^ 0x55 0xFF ^ (0xF0 ^ 0x55) +90 90 90 +Testing that ^ has precedence over | +select 0xFF ^ 0xF0 | 0x0F, (0xFF ^ 0xF0) | 0x0F, 0xFF ^ (0xF0 | 0x0F); +0xFF ^ 0xF0 | 0x0F (0xFF ^ 0xF0) | 0x0F 0xFF ^ (0xF0 | 0x0F) +15 15 0 +select 0xF0 | 0xFF ^ 0xF0, (0xF0 | 0xFF) ^ 0xF0, 0xF0 | (0xFF ^ 0xF0); +0xF0 | 0xFF ^ 0xF0 (0xF0 | 0xFF) ^ 0xF0 0xF0 | (0xFF ^ 0xF0) +255 15 255 +Testing that ^ has precedence over & +select 0xFF ^ 0xF0 & 0x0F, (0xFF ^ 0xF0) & 0x0F, 0xFF ^ (0xF0 & 0x0F); +0xFF ^ 0xF0 & 0x0F (0xFF ^ 0xF0) & 0x0F 0xFF ^ (0xF0 & 0x0F) +15 15 255 +select 0x0F & 0xFF ^ 0xF0, (0x0F & 0xFF) ^ 0xF0, 0x0F & (0xFF ^ 0xF0); +0x0F & 0xFF ^ 0xF0 (0x0F & 0xFF) ^ 0xF0 0x0F & (0xFF ^ 0xF0) +15 255 15 +Testing that ^ has precedence over << +select 0xFF ^ 0xF0 << 2, (0xFF ^ 0xF0) << 2, 0xFF ^ (0xF0 << 2); +0xFF ^ 0xF0 << 2 (0xFF ^ 0xF0) << 2 0xFF ^ (0xF0 << 2) +60 60 831 +select 0x0F << 2 ^ 0xFF, (0x0F << 2) ^ 0xFF, 0x0F << (2 ^ 0xFF); +0x0F << 2 ^ 0xFF (0x0F << 2) ^ 0xFF 0x0F << (2 ^ 0xFF) +0 195 0 +Testing that ^ has precedence over >> +select 0xFF ^ 0xF0 >> 2, (0xFF ^ 0xF0) >> 2, 0xFF ^ (0xF0 >> 2); +0xFF ^ 0xF0 >> 2 (0xFF ^ 0xF0) >> 2 0xFF ^ (0xF0 >> 2) +3 3 195 +select 0xFF >> 2 ^ 0xF0, (0xFF >> 2) ^ 0xF0, 0xFF >> (2 ^ 0xF0); +0xFF >> 2 ^ 0xF0 (0xFF >> 2) ^ 0xF0 0xFF >> (2 ^ 0xF0) +0 207 0 +Testing that ^ has precedence over binary + +select 0xFF ^ 0xF0 + 0x0F, (0xFF ^ 0xF0) + 0x0F, 0xFF ^ (0xF0 + 0x0F); +0xFF ^ 0xF0 + 0x0F (0xFF ^ 0xF0) + 0x0F 0xFF ^ (0xF0 + 0x0F) +30 30 0 +select 0x0F + 0xFF ^ 0xF0, (0x0F + 0xFF) ^ 0xF0, 0x0F + (0xFF ^ 0xF0); +0x0F + 0xFF ^ 0xF0 (0x0F + 0xFF) ^ 0xF0 0x0F + (0xFF ^ 0xF0) +30 510 30 +Testing that ^ has precedence over binary - +select 0xFF ^ 0xF0 - 1, (0xFF ^ 0xF0) - 1, 0xFF ^ (0xF0 - 1); +0xFF ^ 0xF0 - 1 (0xFF ^ 0xF0) - 1 0xFF ^ (0xF0 - 1) +14 14 16 +select 0x55 - 0x0F ^ 0x55, (0x55 - 0x0F) ^ 0x55, 0x55 - (0x0F ^ 0x55); +0x55 - 0x0F ^ 0x55 (0x55 - 0x0F) ^ 0x55 0x55 - (0x0F ^ 0x55) +-5 19 -5 +Testing that ^ has precedence over * +select 0xFF ^ 0xF0 * 2, (0xFF ^ 0xF0) * 2, 0xFF ^ (0xF0 * 2); +0xFF ^ 0xF0 * 2 (0xFF ^ 0xF0) * 2 0xFF ^ (0xF0 * 2) +30 30 287 +select 2 * 0xFF ^ 0xF0, (2 * 0xFF) ^ 0xF0, 2 * (0xFF ^ 0xF0); +2 * 0xFF ^ 0xF0 (2 * 0xFF) ^ 0xF0 2 * (0xFF ^ 0xF0) +30 270 30 +Testing that ^ has precedence over / +select 0xFF ^ 0xF0 / 2, (0xFF ^ 0xF0) / 2, 0xFF ^ (0xF0 / 2); +0xFF ^ 0xF0 / 2 (0xFF ^ 0xF0) / 2 0xFF ^ (0xF0 / 2) +7.5000 7.5000 135 +select 0xF2 / 2 ^ 0xF0, (0xF2 / 2) ^ 0xF0, 0xF2 / (2 ^ 0xF0); +0xF2 / 2 ^ 0xF0 (0xF2 / 2) ^ 0xF0 0xF2 / (2 ^ 0xF0) +1.0000 137 1.0000 +Testing that ^ has precedence over % +select 0xFF ^ 0xF0 % 0x20, (0xFF ^ 0xF0) % 0x20, 0xFF ^ (0xF0 % 0x20); +0xFF ^ 0xF0 % 0x20 (0xFF ^ 0xF0) % 0x20 0xFF ^ (0xF0 % 0x20) +15 15 239 +select 0xFF % 0x20 ^ 0xF0, (0xFF % 0x20) ^ 0xF0, 0xFF % (0x20 ^ 0xF0); +0xFF % 0x20 ^ 0xF0 (0xFF % 0x20) ^ 0xF0 0xFF % (0x20 ^ 0xF0) +47 239 47 +Testing that ^ has precedence over DIV +select 0xFF ^ 0xF0 DIV 2, (0xFF ^ 0xF0) DIV 2, 0xFF ^ (0xF0 DIV 2); +0xFF ^ 0xF0 DIV 2 (0xFF ^ 0xF0) DIV 2 0xFF ^ (0xF0 DIV 2) +7 7 135 +select 0xF2 DIV 2 ^ 0xF0, (0xF2 DIV 2) ^ 0xF0, 0xF2 DIV (2 ^ 0xF0); +0xF2 DIV 2 ^ 0xF0 (0xF2 DIV 2) ^ 0xF0 0xF2 DIV (2 ^ 0xF0) +1 137 1 +Testing that ^ has precedence over MOD +select 0xFF ^ 0xF0 MOD 0x20, (0xFF ^ 0xF0) MOD 0x20, 0xFF ^ (0xF0 MOD 0x20); +0xFF ^ 0xF0 MOD 0x20 (0xFF ^ 0xF0) MOD 0x20 0xFF ^ (0xF0 MOD 0x20) +15 15 239 +select 0xFF MOD 0x20 ^ 0xF0, (0xFF MOD 0x20) ^ 0xF0, 0xFF MOD (0x20 ^ 0xF0); +0xFF MOD 0x20 ^ 0xF0 (0xFF MOD 0x20) ^ 0xF0 0xFF MOD (0x20 ^ 0xF0) +47 239 47 diff --git a/mysql-test/t/parser_precedence.test b/mysql-test/t/parser_precedence.test index a3a80776fb1..484c8759779 100644 --- a/mysql-test/t/parser_precedence.test +++ b/mysql-test/t/parser_precedence.test @@ -91,3 +91,243 @@ select count(*) from t1_30237_bool drop table t1_30237_bool; +--echo Testing that NOT has precedence over OR +select (NOT FALSE) OR TRUE, NOT (FALSE OR TRUE), NOT FALSE OR TRUE; + +--echo Testing that NOT has precedence over XOR +select (NOT FALSE) XOR FALSE, NOT (FALSE XOR FALSE), NOT FALSE XOR FALSE; + +--echo Testing that NOT has precedence over AND +select (NOT FALSE) AND FALSE, NOT (FALSE AND FALSE), NOT FALSE AND FALSE; + +--echo Testing that NOT is associative +select NOT NOT TRUE, NOT NOT NOT FALSE; + +--echo Testing that IS has precedence over NOT +select (NOT NULL) IS TRUE, NOT (NULL IS TRUE), NOT NULL IS TRUE; +select (NOT NULL) IS NOT TRUE, NOT (NULL IS NOT TRUE), NOT NULL IS NOT TRUE; +select (NOT NULL) IS FALSE, NOT (NULL IS FALSE), NOT NULL IS FALSE; +select (NOT NULL) IS NOT FALSE, NOT (NULL IS NOT FALSE), NOT NULL IS NOT FALSE; +select (NOT TRUE) IS UNKNOWN, NOT (TRUE IS UNKNOWN), NOT TRUE IS UNKNOWN; +select (NOT TRUE) IS NOT UNKNOWN, NOT (TRUE IS NOT UNKNOWN), NOT TRUE IS NOT UNKNOWN; +select (NOT TRUE) IS NULL, NOT (TRUE IS NULL), NOT TRUE IS NULL; +select (NOT TRUE) IS NOT NULL, NOT (TRUE IS NOT NULL), NOT TRUE IS NOT NULL; + +--echo Testing that IS [NOT] TRUE/FALSE/UNKNOWN predicates are not associative +# Documenting existing behavior in 5.0.48 +-- error ER_PARSE_ERROR +select TRUE IS TRUE IS TRUE IS TRUE; +-- error ER_PARSE_ERROR +select FALSE IS NOT TRUE IS NOT TRUE IS NOT TRUE; +-- error ER_PARSE_ERROR +select NULL IS FALSE IS FALSE IS FALSE; +-- error ER_PARSE_ERROR +select TRUE IS NOT FALSE IS NOT FALSE IS NOT FALSE; +-- error ER_PARSE_ERROR +select FALSE IS UNKNOWN IS UNKNOWN IS UNKNOWN; +-- error ER_PARSE_ERROR +select TRUE IS NOT UNKNOWN IS NOT UNKNOWN IS NOT UNKNOWN; + +--echo Testing that IS [NOT] NULL predicates are associative +# Documenting existing behavior in 5.0.48 +select FALSE IS NULL IS NULL IS NULL; +select TRUE IS NOT NULL IS NOT NULL IS NOT NULL; + +--echo Testing that comparison operators are left associative +select 1 <=> 2 <=> 2, (1 <=> 2) <=> 2, 1 <=> (2 <=> 2); +select 1 = 2 = 2, (1 = 2) = 2, 1 = (2 = 2); +select 1 != 2 != 3, (1 != 2) != 3, 1 != (2 != 3); +select 1 <> 2 <> 3, (1 <> 2) <> 3, 1 <> (2 <> 3); +select 1 < 2 < 3, (1 < 2) < 3, 1 < (2 < 3); +select 3 <= 2 <= 1, (3 <= 2) <= 1, 3 <= (2 <= 1); +select 1 > 2 > 3, (1 > 2) > 3, 1 > (2 > 3); +select 1 >= 2 >= 3, (1 >= 2) >= 3, 1 >= (2 >= 3); + +-- echo Testing that | is associative +select 0xF0 | 0x0F | 0x55, (0xF0 | 0x0F) | 0x55, 0xF0 | (0x0F | 0x55); + +-- echo Testing that & is associative +select 0xF5 & 0x5F & 0x55, (0xF5 & 0x5F) & 0x55, 0xF5 & (0x5F & 0x55); + +-- echo Testing that << is left associative +select 4 << 3 << 2, (4 << 3) << 2, 4 << (3 << 2); + +-- echo Testing that >> is left associative +select 256 >> 3 >> 2, (256 >> 3) >> 2, 256 >> (3 >> 2); + +--echo Testing that & has precedence over | +select 0xF0 & 0x0F | 0x55, (0xF0 & 0x0F) | 0x55, 0xF0 & (0x0F | 0x55); +select 0x55 | 0xF0 & 0x0F, (0x55 | 0xF0) & 0x0F, 0x55 | (0xF0 & 0x0F); + +--echo Testing that << has precedence over | +select 0x0F << 4 | 0x0F, (0x0F << 4) | 0x0F, 0x0F << (4 | 0x0F); +select 0x0F | 0x0F << 4, (0x0F | 0x0F) << 4, 0x0F | (0x0F << 4); + +--echo Testing that >> has precedence over | +select 0xF0 >> 4 | 0xFF, (0xF0 >> 4) | 0xFF, 0xF0 >> (4 | 0xFF); +select 0xFF | 0xF0 >> 4, (0xFF | 0xF0) >> 4, 0xFF | (0xF0 >> 4); + +--echo Testing that << has precedence over & +select 0x0F << 4 & 0xF0, (0x0F << 4) & 0xF0, 0x0F << (4 & 0xF0); +select 0xF0 & 0x0F << 4, (0xF0 & 0x0F) << 4, 0xF0 & (0x0F << 4); + +--echo Testing that >> has precedence over & +select 0xF0 >> 4 & 0x55, (0xF0 >> 4) & 0x55, 0xF0 >> (4 & 0x55); +select 0x0F & 0xF0 >> 4, (0x0F & 0xF0) >> 4, 0x0F & (0xF0 >> 4); + +--echo Testing that >> and << have the same precedence +select 0xFF >> 4 << 2, (0xFF >> 4) << 2, 0xFF >> (4 << 2); +select 0x0F << 4 >> 2, (0x0F << 4) >> 2, 0x0F << (4 >> 2); + +--echo Testing that binary + is associative +select 1 + 2 + 3, (1 + 2) + 3, 1 + (2 + 3); + +--echo Testing that binary - is left associative +select 1 - 2 - 3, (1 - 2) - 3, 1 - (2 - 3); + +--echo Testing that binary + and binary - have the same precedence +# evaluated left to right +select 1 + 2 - 3, (1 + 2) - 3, 1 + (2 - 3); +select 1 - 2 + 3, (1 - 2) + 3, 1 - (2 + 3); + +--echo Testing that binary + has precedence over | +select 0xF0 + 0x0F | 0x55, (0xF0 + 0x0F) | 0x55, 0xF0 + (0x0F | 0x55); +select 0x55 | 0xF0 + 0x0F, (0x55 | 0xF0) + 0x0F, 0x55 | (0xF0 + 0x0F); + +--echo Testing that binary + has precedence over & +select 0xF0 + 0x0F & 0x55, (0xF0 + 0x0F) & 0x55, 0xF0 + (0x0F & 0x55); +select 0x55 & 0xF0 + 0x0F, (0x55 & 0xF0) + 0x0F, 0x55 & (0xF0 + 0x0F); + +--echo Testing that binary + has precedence over << +select 2 + 3 << 4, (2 + 3) << 4, 2 + (3 << 4); +select 3 << 4 + 2, (3 << 4) + 2, 3 << (4 + 2); + +--echo Testing that binary + has precedence over >> +select 4 + 3 >> 2, (4 + 3) >> 2, 4 + (3 >> 2); +select 3 >> 2 + 1, (3 >> 2) + 1, 3 >> (2 + 1); + +--echo Testing that binary - has precedence over | +select 0xFF - 0x0F | 0x55, (0xFF - 0x0F) | 0x55, 0xFF - (0x0F | 0x55); +select 0x55 | 0xFF - 0xF0, (0x55 | 0xFF) - 0xF0, 0x55 | (0xFF - 0xF0); + +--echo Testing that binary - has precedence over & +select 0xFF - 0xF0 & 0x55, (0xFF - 0xF0) & 0x55, 0xFF - (0xF0 & 0x55); +select 0x55 & 0xFF - 0xF0, (0x55 & 0xFF) - 0xF0, 0x55 & (0xFF - 0xF0); + +--echo Testing that binary - has precedence over << +select 16 - 3 << 2, (16 - 3) << 2, 16 - (3 << 2); +select 4 << 3 - 2, (4 << 3) - 2, 4 << (3 - 2); + +--echo Testing that binary - has precedence over >> +select 16 - 3 >> 2, (16 - 3) >> 2, 16 - (3 >> 2); +select 16 >> 3 - 2, (16 >> 3) - 2, 16 >> (3 - 2); + +--echo Testing that * is associative +select 2 * 3 * 4, (2 * 3) * 4, 2 * (3 * 4); + +--echo Testing that * has precedence over | +select 2 * 0x40 | 0x0F, (2 * 0x40) | 0x0F, 2 * (0x40 | 0x0F); +select 0x0F | 2 * 0x40, (0x0F | 2) * 0x40, 0x0F | (2 * 0x40); + +--echo Testing that * has precedence over & +select 2 * 0x40 & 0x55, (2 * 0x40) & 0x55, 2 * (0x40 & 0x55); +select 0xF0 & 2 * 0x40, (0xF0 & 2) * 0x40, 0xF0 & (2 * 0x40); + +--echo Testing that * has precedence over << +# Actually, can't prove it for the first case, +# since << is a multiplication by a power of 2, +# and * is associative +select 5 * 3 << 4, (5 * 3) << 4, 5 * (3 << 4); +select 2 << 3 * 4, (2 << 3) * 4, 2 << (3 * 4); + +--echo Testing that * has precedence over >> +# >> is a multiplication by a (negative) power of 2, +# see above. +select 3 * 4 >> 2, (3 * 4) >> 2, 3 * (4 >> 2); +select 4 >> 2 * 3, (4 >> 2) * 3, 4 >> (2 * 3); + +--echo Testing that * has precedence over binary + +select 2 * 3 + 4, (2 * 3) + 4, 2 * (3 + 4); +select 2 + 3 * 4, (2 + 3) * 4, 2 + (3 * 4); + +--echo Testing that * has precedence over binary - +select 4 * 3 - 2, (4 * 3) - 2, 4 * (3 - 2); +select 4 - 3 * 2, (4 - 3) * 2, 4 - (3 * 2); + +--echo Testing that / is left associative +select 15 / 5 / 3, (15 / 5) / 3, 15 / (5 / 3); + +--echo Testing that / has precedence over | +select 105 / 5 | 2, (105 / 5) | 2, 105 / (5 | 2); +select 105 | 2 / 5, (105 | 2) / 5, 105 | (2 / 5); + +--echo Testing that / has precedence over & +select 105 / 5 & 0x0F, (105 / 5) & 0x0F, 105 / (5 & 0x0F); +select 0x0F & 105 / 5, (0x0F & 105) / 5, 0x0F & (105 / 5); + +--echo Testing that / has precedence over << +select 0x80 / 4 << 2, (0x80 / 4) << 2, 0x80 / (4 << 2); +select 0x80 << 4 / 2, (0x80 << 4) / 2, 0x80 << (4 / 2); + +--echo Testing that / has precedence over >> +select 0x80 / 4 >> 2, (0x80 / 4) >> 2, 0x80 / (4 >> 2); +select 0x80 >> 4 / 2, (0x80 >> 4) / 2, 0x80 >> (4 / 2); + +--echo Testing that / has precedence over binary + +select 0x80 / 2 + 2, (0x80 / 2) + 2, 0x80 / (2 + 2); +select 0x80 + 2 / 2, (0x80 + 2) / 2, 0x80 + (2 / 2); + +--echo Testing that / has precedence over binary - +select 0x80 / 4 - 2, (0x80 / 4) - 2, 0x80 / (4 - 2); +select 0x80 - 4 / 2, (0x80 - 4) / 2, 0x80 - (4 / 2); + +# TODO: %, DIV, MOD + +--echo Testing that ^ is associative +select 0xFF ^ 0xF0 ^ 0x0F, (0xFF ^ 0xF0) ^ 0x0F, 0xFF ^ (0xF0 ^ 0x0F); +select 0xFF ^ 0xF0 ^ 0x55, (0xFF ^ 0xF0) ^ 0x55, 0xFF ^ (0xF0 ^ 0x55); + +--echo Testing that ^ has precedence over | +select 0xFF ^ 0xF0 | 0x0F, (0xFF ^ 0xF0) | 0x0F, 0xFF ^ (0xF0 | 0x0F); +select 0xF0 | 0xFF ^ 0xF0, (0xF0 | 0xFF) ^ 0xF0, 0xF0 | (0xFF ^ 0xF0); + +--echo Testing that ^ has precedence over & +select 0xFF ^ 0xF0 & 0x0F, (0xFF ^ 0xF0) & 0x0F, 0xFF ^ (0xF0 & 0x0F); +select 0x0F & 0xFF ^ 0xF0, (0x0F & 0xFF) ^ 0xF0, 0x0F & (0xFF ^ 0xF0); + +--echo Testing that ^ has precedence over << +select 0xFF ^ 0xF0 << 2, (0xFF ^ 0xF0) << 2, 0xFF ^ (0xF0 << 2); +select 0x0F << 2 ^ 0xFF, (0x0F << 2) ^ 0xFF, 0x0F << (2 ^ 0xFF); + +--echo Testing that ^ has precedence over >> +select 0xFF ^ 0xF0 >> 2, (0xFF ^ 0xF0) >> 2, 0xFF ^ (0xF0 >> 2); +select 0xFF >> 2 ^ 0xF0, (0xFF >> 2) ^ 0xF0, 0xFF >> (2 ^ 0xF0); + +--echo Testing that ^ has precedence over binary + +select 0xFF ^ 0xF0 + 0x0F, (0xFF ^ 0xF0) + 0x0F, 0xFF ^ (0xF0 + 0x0F); +select 0x0F + 0xFF ^ 0xF0, (0x0F + 0xFF) ^ 0xF0, 0x0F + (0xFF ^ 0xF0); + +--echo Testing that ^ has precedence over binary - +select 0xFF ^ 0xF0 - 1, (0xFF ^ 0xF0) - 1, 0xFF ^ (0xF0 - 1); +select 0x55 - 0x0F ^ 0x55, (0x55 - 0x0F) ^ 0x55, 0x55 - (0x0F ^ 0x55); + +--echo Testing that ^ has precedence over * +select 0xFF ^ 0xF0 * 2, (0xFF ^ 0xF0) * 2, 0xFF ^ (0xF0 * 2); +select 2 * 0xFF ^ 0xF0, (2 * 0xFF) ^ 0xF0, 2 * (0xFF ^ 0xF0); + +--echo Testing that ^ has precedence over / +select 0xFF ^ 0xF0 / 2, (0xFF ^ 0xF0) / 2, 0xFF ^ (0xF0 / 2); +select 0xF2 / 2 ^ 0xF0, (0xF2 / 2) ^ 0xF0, 0xF2 / (2 ^ 0xF0); + +--echo Testing that ^ has precedence over % +select 0xFF ^ 0xF0 % 0x20, (0xFF ^ 0xF0) % 0x20, 0xFF ^ (0xF0 % 0x20); +select 0xFF % 0x20 ^ 0xF0, (0xFF % 0x20) ^ 0xF0, 0xFF % (0x20 ^ 0xF0); + +--echo Testing that ^ has precedence over DIV +select 0xFF ^ 0xF0 DIV 2, (0xFF ^ 0xF0) DIV 2, 0xFF ^ (0xF0 DIV 2); +select 0xF2 DIV 2 ^ 0xF0, (0xF2 DIV 2) ^ 0xF0, 0xF2 DIV (2 ^ 0xF0); + +--echo Testing that ^ has precedence over MOD +select 0xFF ^ 0xF0 MOD 0x20, (0xFF ^ 0xF0) MOD 0x20, 0xFF ^ (0xF0 MOD 0x20); +select 0xFF MOD 0x20 ^ 0xF0, (0xFF MOD 0x20) ^ 0xF0, 0xFF MOD (0x20 ^ 0xF0); + diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index bfce73716c7..e0b9ab28594 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -1068,9 +1068,9 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); %type literal text_literal insert_ident order_ident simple_ident select_item2 expr opt_expr opt_else sum_expr in_sum_expr - variable variable_aux bool_factor - bool_test bool_pri - predicate bit_expr bit_term bit_factor value_expr term factor + variable variable_aux + bool_pri + predicate bit_expr table_wild simple_expr udf_expr expr_or_default set_expr_or_default interval_expr param_marker geometry_function @@ -4468,8 +4468,7 @@ optional_braces: /* all possible expressions */ expr: - bool_factor - | expr or expr %prec OR_SYM + expr or expr %prec OR_SYM { /* Design notes: @@ -4564,30 +4563,30 @@ expr: $$ = new (YYTHD->mem_root) Item_cond_and($1, $3); } } - ; - -bool_factor: - NOT_SYM bool_factor { $$= negate_expression(YYTHD, $2); } - | bool_test ; - -bool_test: - bool_pri IS TRUE_SYM + | NOT_SYM expr %prec NOT_SYM + { $$= negate_expression(YYTHD, $2); } + | bool_pri IS TRUE_SYM %prec IS { $$= new (YYTHD->mem_root) Item_func_istrue($1); } - | bool_pri IS not TRUE_SYM + | bool_pri IS not TRUE_SYM %prec IS { $$= new (YYTHD->mem_root) Item_func_isnottrue($1); } - | bool_pri IS FALSE_SYM + | bool_pri IS FALSE_SYM %prec IS { $$= new (YYTHD->mem_root) Item_func_isfalse($1); } - | bool_pri IS not FALSE_SYM + | bool_pri IS not FALSE_SYM %prec IS { $$= new (YYTHD->mem_root) Item_func_isnotfalse($1); } - | bool_pri IS UNKNOWN_SYM { $$= new Item_func_isnull($1); } - | bool_pri IS not UNKNOWN_SYM { $$= new Item_func_isnotnull($1); } + | bool_pri IS UNKNOWN_SYM %prec IS + { $$= new Item_func_isnull($1); } + | bool_pri IS not UNKNOWN_SYM %prec IS + { $$= new Item_func_isnotnull($1); } | bool_pri ; bool_pri: - bool_pri IS NULL_SYM { $$= new Item_func_isnull($1); } - | bool_pri IS not NULL_SYM { $$= new Item_func_isnotnull($1); } - | bool_pri EQUAL_SYM predicate { $$= new Item_func_equal($1,$3); } + bool_pri IS NULL_SYM %prec IS + { $$= new Item_func_isnull($1); } + | bool_pri IS not NULL_SYM %prec IS + { $$= new Item_func_isnotnull($1); } + | bool_pri EQUAL_SYM predicate %prec EQUAL_SYM + { $$= new Item_func_equal($1,$3); } | bool_pri comp_op predicate %prec EQ { $$= (*$2)(0)->create($1,$3); } | bool_pri comp_op all_or_any '(' subselect ')' %prec EQ @@ -4630,11 +4629,11 @@ predicate: | bit_expr BETWEEN_SYM bit_expr AND_SYM predicate { $$= new Item_func_between($1,$3,$5); } | bit_expr not BETWEEN_SYM bit_expr AND_SYM predicate - { - Item_func_between *item= new Item_func_between($1,$4,$6); - item->negate(); - $$= item; - } + { + Item_func_between *item= new Item_func_between($1,$4,$6); + item->negate(); + $$= item; + } | bit_expr SOUNDS_SYM LIKE bit_expr { $$= new Item_func_eq(new Item_func_soundex($1), new Item_func_soundex($4)); } @@ -4648,40 +4647,36 @@ predicate: | bit_expr ; bit_expr: - bit_expr '|' bit_term { $$= new Item_func_bit_or($1,$3); } - | bit_term ; - -bit_term: - bit_term '&' bit_factor { $$= new Item_func_bit_and($1,$3); } - | bit_factor ; - -bit_factor: - bit_factor SHIFT_LEFT value_expr - { $$= new Item_func_shift_left($1,$3); } - | bit_factor SHIFT_RIGHT value_expr - { $$= new Item_func_shift_right($1,$3); } - | value_expr ; - -value_expr: - value_expr '+' term { $$= new Item_func_plus($1,$3); } - | value_expr '-' term { $$= new Item_func_minus($1,$3); } - | value_expr '+' interval_expr interval - { $$= new Item_date_add_interval($1,$3,$4,0); } - | value_expr '-' interval_expr interval - { $$= new Item_date_add_interval($1,$3,$4,1); } - | term ; - -term: - term '*' factor { $$= new Item_func_mul($1,$3); } - | term '/' factor { $$= new Item_func_div($1,$3); } - | term '%' factor { $$= new Item_func_mod($1,$3); } - | term DIV_SYM factor { $$= new Item_func_int_div($1,$3); } - | term MOD_SYM factor { $$= new Item_func_mod($1,$3); } - | factor ; - -factor: - factor '^' simple_expr { $$= new Item_func_bit_xor($1,$3); } - | simple_expr ; + bit_expr '|' bit_expr %prec '|' + { $$= new Item_func_bit_or($1,$3); } + | bit_expr '&' bit_expr %prec '&' + { $$= new Item_func_bit_and($1,$3); } + | bit_expr SHIFT_LEFT bit_expr %prec SHIFT_LEFT + { $$= new Item_func_shift_left($1,$3); } + | bit_expr SHIFT_RIGHT bit_expr %prec SHIFT_RIGHT + { $$= new Item_func_shift_right($1,$3); } + | bit_expr '+' bit_expr %prec '+' + { $$= new Item_func_plus($1,$3); } + | bit_expr '-' bit_expr %prec '-' + { $$= new Item_func_minus($1,$3); } + | bit_expr '+' interval_expr interval %prec '+' + { $$= new Item_date_add_interval($1,$3,$4,0); } + | bit_expr '-' interval_expr interval %prec '-' + { $$= new Item_date_add_interval($1,$3,$4,1); } + | bit_expr '*' bit_expr %prec '*' + { $$= new Item_func_mul($1,$3); } + | bit_expr '/' bit_expr %prec '/' + { $$= new Item_func_div($1,$3); } + | bit_expr '%' bit_expr %prec '%' + { $$= new Item_func_mod($1,$3); } + | bit_expr DIV_SYM bit_expr %prec DIV_SYM + { $$= new Item_func_int_div($1,$3); } + | bit_expr MOD_SYM bit_expr %prec MOD_SYM + { $$= new Item_func_mod($1,$3); } + | bit_expr '^' bit_expr + { $$= new Item_func_bit_xor($1,$3); } + | simple_expr + ; or: OR_SYM | OR2_SYM; and: AND_SYM | AND_AND_SYM; From 0ecee6df3ded8b41703be689d37e224a1a1c1170 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 28 Aug 2007 15:56:12 -0600 Subject: [PATCH 150/194] Manual merge --- sql/sql_yacc.yy | 100 +++++++++++++++++++++--------------------------- 1 file changed, 44 insertions(+), 56 deletions(-) diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 24ee080a7aa..29c00bc54d0 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -1152,8 +1152,8 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); %type literal text_literal insert_ident order_ident simple_ident select_item2 expr opt_expr opt_else sum_expr in_sum_expr - variable variable_aux bool_factor bool_test bool_pri - predicate bit_expr bit_term bit_factor value_expr term factor + variable variable_aux bool_pri + predicate bit_expr table_wild simple_expr udf_expr expr_or_default set_expr_or_default interval_expr param_marker geometry_function @@ -6558,8 +6558,7 @@ optional_braces: /* all possible expressions */ expr: - bool_factor - | expr or expr %prec OR_SYM + expr or expr %prec OR_SYM { /* Design notes: @@ -6654,36 +6653,35 @@ expr: $$ = new (YYTHD->mem_root) Item_cond_and($1, $3); } } - ; - -bool_factor: - NOT_SYM bool_factor { $$= negate_expression(YYTHD, $2); } - | bool_test - ; - -bool_test: - bool_pri IS TRUE_SYM + | NOT_SYM expr %prec NOT_SYM + { $$= negate_expression(YYTHD, $2); } + | bool_pri IS TRUE_SYM %prec IS { $$= new (YYTHD->mem_root) Item_func_istrue($1); } - | bool_pri IS not TRUE_SYM + | bool_pri IS not TRUE_SYM %prec IS { $$= new (YYTHD->mem_root) Item_func_isnottrue($1); } - | bool_pri IS FALSE_SYM + | bool_pri IS FALSE_SYM %prec IS { $$= new (YYTHD->mem_root) Item_func_isfalse($1); } - | bool_pri IS not FALSE_SYM + | bool_pri IS not FALSE_SYM %prec IS { $$= new (YYTHD->mem_root) Item_func_isnotfalse($1); } - | bool_pri IS UNKNOWN_SYM { $$= new Item_func_isnull($1); } - | bool_pri IS not UNKNOWN_SYM { $$= new Item_func_isnotnull($1); } + | bool_pri IS UNKNOWN_SYM %prec IS + { $$= new Item_func_isnull($1); } + | bool_pri IS not UNKNOWN_SYM %prec IS + { $$= new Item_func_isnotnull($1); } | bool_pri ; bool_pri: - bool_pri IS NULL_SYM { $$= new Item_func_isnull($1); } - | bool_pri IS not NULL_SYM { $$= new Item_func_isnotnull($1); } - | bool_pri EQUAL_SYM predicate { $$= new Item_func_equal($1,$3); } + bool_pri IS NULL_SYM %prec IS + { $$= new Item_func_isnull($1); } + | bool_pri IS not NULL_SYM %prec IS + { $$= new Item_func_isnotnull($1); } + | bool_pri EQUAL_SYM predicate %prec EQUAL_SYM + { $$= new Item_func_equal($1,$3); } | bool_pri comp_op predicate %prec EQ { $$= (*$2)(0)->create($1,$3); } | bool_pri comp_op all_or_any '(' subselect ')' %prec EQ { $$= all_any_subquery_creator($1, $2, $3, $5); } - | predicate + | predicate ; ; predicate: @@ -6743,44 +6741,34 @@ predicate: ; bit_expr: - bit_expr '|' bit_term { $$= new Item_func_bit_or($1,$3); } - | bit_term - ; - -bit_term: - bit_term '&' bit_factor { $$= new Item_func_bit_and($1,$3); } - | bit_factor - ; - -bit_factor: - bit_factor SHIFT_LEFT value_expr + bit_expr '|' bit_expr %prec '|' + { $$= new Item_func_bit_or($1,$3); } + | bit_expr '&' bit_expr %prec '&' + { $$= new Item_func_bit_and($1,$3); } + | bit_expr SHIFT_LEFT bit_expr %prec SHIFT_LEFT { $$= new Item_func_shift_left($1,$3); } - | bit_factor SHIFT_RIGHT value_expr + | bit_expr SHIFT_RIGHT bit_expr %prec SHIFT_RIGHT { $$= new Item_func_shift_right($1,$3); } - | value_expr - ; - -value_expr: - value_expr '+' term { $$= new Item_func_plus($1,$3); } - | value_expr '-' term { $$= new Item_func_minus($1,$3); } - | value_expr '+' interval_expr interval + | bit_expr '+' bit_expr %prec '+' + { $$= new Item_func_plus($1,$3); } + | bit_expr '-' bit_expr %prec '-' + { $$= new Item_func_minus($1,$3); } + | bit_expr '+' interval_expr interval %prec '+' { $$= new Item_date_add_interval($1,$3,$4,0); } - | value_expr '-' interval_expr interval + | bit_expr '-' interval_expr interval %prec '-' { $$= new Item_date_add_interval($1,$3,$4,1); } - | term - ; - -term: - term '*' factor { $$= new Item_func_mul($1,$3); } - | term '/' factor { $$= new Item_func_div($1,$3); } - | term '%' factor { $$= new Item_func_mod($1,$3); } - | term DIV_SYM factor { $$= new Item_func_int_div($1,$3); } - | term MOD_SYM factor { $$= new Item_func_mod($1,$3); } - | factor - ; - -factor: - factor '^' simple_expr { $$= new Item_func_bit_xor($1,$3); } + | bit_expr '*' bit_expr %prec '*' + { $$= new Item_func_mul($1,$3); } + | bit_expr '/' bit_expr %prec '/' + { $$= new Item_func_div($1,$3); } + | bit_expr '%' bit_expr %prec '%' + { $$= new Item_func_mod($1,$3); } + | bit_expr DIV_SYM bit_expr %prec DIV_SYM + { $$= new Item_func_int_div($1,$3); } + | bit_expr MOD_SYM bit_expr %prec MOD_SYM + { $$= new Item_func_mod($1,$3); } + | bit_expr '^' bit_expr + { $$= new Item_func_bit_xor($1,$3); } | simple_expr ; From 038df2d05cc9137fc616a1141ee86b2bde65670e Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 29 Aug 2007 11:51:34 +0200 Subject: [PATCH 151/194] Add 'mtr_rmtree' mysql-test/lib/mtr_misc.pl: Add function 'mtr_rmtree' it will try 'rmtree' and if that fails (most likely due to permission problems we will fun File::find to chmod all files and dirs to 0777 and then delete. mysql-test/mysql-test-run.pl: Use 'mtr_rmtree' in favour of 'rmtree' --- mysql-test/lib/mtr_misc.pl | 60 ++++++++++++++++++++++++++++++++++++ mysql-test/mysql-test-run.pl | 20 ++++++------ 2 files changed, 70 insertions(+), 10 deletions(-) diff --git a/mysql-test/lib/mtr_misc.pl b/mysql-test/lib/mtr_misc.pl index ef7dda358f2..3da598faebc 100644 --- a/mysql-test/lib/mtr_misc.pl +++ b/mysql-test/lib/mtr_misc.pl @@ -5,6 +5,7 @@ # same name. use strict; +use File::Find; sub mtr_full_hostname (); sub mtr_short_hostname (); @@ -17,6 +18,7 @@ sub mtr_file_exists(@); sub mtr_exe_exists(@); sub mtr_exe_maybe_exists(@); sub mtr_copy_dir($$); +sub mtr_rmtree($$); sub mtr_same_opts($$); sub mtr_cmp_opts($$); @@ -202,6 +204,64 @@ sub mtr_copy_dir($$) { } +sub mtr_rmtree($) { + my ($dir)= @_; + my $need_file_find= 0; + mtr_verbose("mtr_rmtree: $dir"); + + { + # Try to use File::Path::rmtree. Recent versions + # handles removal of directories and files that don't + # have full permissions, while older versions + # may have a problem with that and we use our own version + + local $SIG{__WARN__}= sub { + $need_file_find= 1; + mtr_warning($_[0]); + }; + rmtree($dir); + } + if ( $need_file_find ) { + mtr_warning("rmtree($dir) failed, trying with File::Find..."); + + my $errors= 0; + + # chmod + find( { + no_chdir => 1, + wanted => sub { + chmod(0777, $_) + or mtr_warning("couldn't chmod(0777, $_): $!") and $errors++; + } + }, + $dir + ); + + # rm + finddepth( { + no_chdir => 1, + wanted => sub { + my $file= $_; + # Use special underscore (_) filehandle, caches stat info + if (!-l $file and -d _ ) { + rmdir($file) or + mtr_warning("couldn't rmdir($file): $!") and $errors++; + } else { + unlink($file) + or mtr_warning("couldn't unlink($file): $!") and $errors++; + } + } + }, + $dir + ); + + mtr_error("Failed to remove '$dir'") if $errors; + + mtr_report("OK, that worked!"); + } +} + + sub mtr_same_opts ($$) { my $l1= shift; my $l2= shift; diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 783d48b9f48..96c422d4d85 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -1988,7 +1988,7 @@ sub remove_stale_vardir () { { # Remove the directory which the link points at mtr_verbose("Removing " . readlink($opt_vardir)); - rmtree(readlink($opt_vardir)); + mtr_rmtree(readlink($opt_vardir)); # Remove the "var" symlink mtr_verbose("unlink($opt_vardir)"); @@ -2016,7 +2016,7 @@ sub remove_stale_vardir () { foreach my $bin ( glob("$opt_vardir/*") ) { mtr_verbose("Removing bin $bin"); - rmtree($bin); + mtr_rmtree($bin); } } } @@ -2024,7 +2024,7 @@ sub remove_stale_vardir () { { # Remove the entire "var" dir mtr_verbose("Removing $opt_vardir/"); - rmtree("$opt_vardir/"); + mtr_rmtree("$opt_vardir/"); } if ( $opt_mem ) @@ -2033,7 +2033,7 @@ sub remove_stale_vardir () { # remove the $opt_mem dir to assure the symlink # won't point at an old directory mtr_verbose("Removing $opt_mem"); - rmtree($opt_mem); + mtr_rmtree($opt_mem); } } @@ -2046,11 +2046,11 @@ sub remove_stale_vardir () { # Remove the var/ dir in mysql-test dir if any # this could be an old symlink that shouldn't be there mtr_verbose("Removing $default_vardir"); - rmtree($default_vardir); + mtr_rmtree($default_vardir); # Remove the "var" dir mtr_verbose("Removing $opt_vardir/"); - rmtree("$opt_vardir/"); + mtr_rmtree("$opt_vardir/"); } } @@ -2963,7 +2963,7 @@ sub restore_slave_databases ($) { { my $data_dir= $slave->[$idx]->{'path_myddir'}; my $name= basename($data_dir); - rmtree($data_dir); + mtr_rmtree($data_dir); mtr_copy_dir("$path_snapshot/$name", $data_dir); } } @@ -3310,7 +3310,7 @@ sub run_testcase ($) { sub save_installed_db () { mtr_report("Saving snapshot of installed databases"); - rmtree($path_snapshot); + mtr_rmtree($path_snapshot); foreach my $data_dir (@data_dir_lst) { @@ -3357,7 +3357,7 @@ sub restore_installed_db ($) { { my $name= basename($data_dir); save_files_before_restore($test_name, $data_dir); - rmtree("$data_dir"); + mtr_rmtree("$data_dir"); mtr_copy_dir("$path_snapshot/$name", "$data_dir"); } @@ -3367,7 +3367,7 @@ sub restore_installed_db ($) { { foreach my $ndbd (@{$cluster->{'ndbds'}}) { - rmtree("$ndbd->{'path_fs'}" ); + mtr_rmtree("$ndbd->{'path_fs'}" ); } } } From 2675c952170d4d7aaa4f3e88bef55008eab1ca04 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 29 Aug 2007 11:53:15 +0200 Subject: [PATCH 152/194] Remove unportable use of "exec chmod" --- mysql-test/t/information_schema_chmod.test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysql-test/t/information_schema_chmod.test b/mysql-test/t/information_schema_chmod.test index 38586ab8b67..51e67a0c956 100644 --- a/mysql-test/t/information_schema_chmod.test +++ b/mysql-test/t/information_schema_chmod.test @@ -19,5 +19,5 @@ create database mysqltest; create table mysqltest.t1(a int); chmod 0000 $MYSQLTEST_VARDIR/master-data/mysqltest; select table_schema from information_schema.tables where table_schema='mysqltest'; -exec chmod 0777 $MYSQLTEST_VARDIR/master-data/mysqltest; +chmod 0777 $MYSQLTEST_VARDIR/master-data/mysqltest; drop database mysqltest; From 643b2163e60acec5a3f4f55e63f85f8df9e8b8c5 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 29 Aug 2007 12:44:43 +0200 Subject: [PATCH 153/194] Remove unportable "system rm" --- mysql-test/t/backup.test | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/mysql-test/t/backup.test b/mysql-test/t/backup.test index 6ff4144aaf2..b05eef6a3ad 100644 --- a/mysql-test/t/backup.test +++ b/mysql-test/t/backup.test @@ -57,6 +57,15 @@ unlock tables; connection con1; reap; drop table t5; ---system rm $MYSQLTEST_VARDIR/tmp/t?.* +remove_file $MYSQLTEST_VARDIR/tmp/t1.MYD; +remove_file $MYSQLTEST_VARDIR/tmp/t2.MYD; +remove_file $MYSQLTEST_VARDIR/tmp/t3.MYD; +remove_file $MYSQLTEST_VARDIR/tmp/t4.MYD; +remove_file $MYSQLTEST_VARDIR/tmp/t5.MYD; +remove_file $MYSQLTEST_VARDIR/tmp/t1.frm; +remove_file $MYSQLTEST_VARDIR/tmp/t2.frm; +remove_file $MYSQLTEST_VARDIR/tmp/t3.frm; +remove_file $MYSQLTEST_VARDIR/tmp/t4.frm; +remove_file $MYSQLTEST_VARDIR/tmp/t5.frm; # End of 4.1 tests From cf37bc45fcba6f31b2cd50328f0443f120a48609 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 29 Aug 2007 12:47:00 +0200 Subject: [PATCH 154/194] Remove unportable use of "system rm" --- mysql-test/t/ps.test | 3 --- 1 file changed, 3 deletions(-) diff --git a/mysql-test/t/ps.test b/mysql-test/t/ps.test index 93a89c2b275..cd2fc44e3ce 100644 --- a/mysql-test/t/ps.test +++ b/mysql-test/t/ps.test @@ -1168,9 +1168,6 @@ deallocate prepare stmt2; # # CREATE TABLE with DATA DIRECTORY option # -# Protect ourselves from data left in tmp/ by a previos possibly failed -# test ---system rm -f $MYSQLTEST_VARDIR/tmp/t1.* --disable_warnings --disable_query_log eval prepare stmt from "create table t1 (c char(10)) data directory='$MYSQLTEST_VARDIR/tmp'"; From 3d5440505cf530404b7b4d9ef544718ffb8c637f Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 29 Aug 2007 14:57:59 +0400 Subject: [PATCH 155/194] Test case for Bug#13675: DATETIME/DATE type in store proc param seems to be converted as varbinary. The bug has been already fixed. This CS just adds a test case for it. mysql-test/r/sp.result: Update result file. mysql-test/t/sp.test: Test case for BUG#13675. --- mysql-test/r/sp.result | 52 ++++++++++++++++++++++++++++++++++++++++ mysql-test/t/sp.test | 54 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 106 insertions(+) diff --git a/mysql-test/r/sp.result b/mysql-test/r/sp.result index 4a278cd4aec..7e80d9c3ad9 100644 --- a/mysql-test/r/sp.result +++ b/mysql-test/r/sp.result @@ -6314,4 +6314,56 @@ CALL p1(); NULL SET NAMES default; DROP PROCEDURE p1; + +# Bug#13675. + +DROP PROCEDURE IF EXISTS p1; +DROP PROCEDURE IF EXISTS p2; +DROP TABLE IF EXISTS t1; + +CREATE PROCEDURE p1(v DATETIME) CREATE TABLE t1 SELECT v; +CREATE PROCEDURE p2(v INT) CREATE TABLE t1 SELECT v; + +CALL p1(NOW()); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `v` datetime default NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 + +DROP TABLE t1; + +CALL p1('text'); +Warnings: +Warning 1264 Out of range value adjusted for column 'v' at row 1 +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `v` datetime default NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 + +DROP TABLE t1; + +CALL p2(10); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `v` bigint(11) default NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 + +DROP TABLE t1; + +CALL p2('text'); +Warnings: +Warning 1366 Incorrect integer value: 'text' for column 'v' at row 1 +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `v` bigint(11) default NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 + +DROP TABLE t1; + +DROP PROCEDURE p1; +DROP PROCEDURE p2; End of 5.0 tests diff --git a/mysql-test/t/sp.test b/mysql-test/t/sp.test index 46a1b1dc740..189273aeb06 100644 --- a/mysql-test/t/sp.test +++ b/mysql-test/t/sp.test @@ -7299,4 +7299,58 @@ CALL p1(); SET NAMES default; DROP PROCEDURE p1; +# +# Bug#13675: DATETIME/DATE type in store proc param seems to be converted as +# varbinary +# + +--echo +--echo # Bug#13675. +--echo + +--disable_warnings +DROP PROCEDURE IF EXISTS p1; +DROP PROCEDURE IF EXISTS p2; + +DROP TABLE IF EXISTS t1; +--enable_warnings + +--echo + +CREATE PROCEDURE p1(v DATETIME) CREATE TABLE t1 SELECT v; + +CREATE PROCEDURE p2(v INT) CREATE TABLE t1 SELECT v; + +--echo +CALL p1(NOW()); +SHOW CREATE TABLE t1; + +--echo +DROP TABLE t1; + +--echo +CALL p1('text'); +SHOW CREATE TABLE t1; + +--echo +DROP TABLE t1; + +--echo +CALL p2(10); +SHOW CREATE TABLE t1; + +--echo +DROP TABLE t1; + +--echo +CALL p2('text'); +SHOW CREATE TABLE t1; + +--echo +DROP TABLE t1; + +--echo +DROP PROCEDURE p1; +DROP PROCEDURE p2; + --echo End of 5.0 tests From 305c35268597c1b37b054f0916556e774aeda8d0 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 29 Aug 2007 14:39:40 +0200 Subject: [PATCH 156/194] Fix typo: '$$' => '$' --- mysql-test/lib/mtr_misc.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysql-test/lib/mtr_misc.pl b/mysql-test/lib/mtr_misc.pl index 3da598faebc..931c93f52a1 100644 --- a/mysql-test/lib/mtr_misc.pl +++ b/mysql-test/lib/mtr_misc.pl @@ -18,7 +18,7 @@ sub mtr_file_exists(@); sub mtr_exe_exists(@); sub mtr_exe_maybe_exists(@); sub mtr_copy_dir($$); -sub mtr_rmtree($$); +sub mtr_rmtree($); sub mtr_same_opts($$); sub mtr_cmp_opts($$); From 2e4963c5b663768f0d928b9d11dcd9567cca2ad9 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 29 Aug 2007 14:44:23 +0200 Subject: [PATCH 157/194] Remove unportable use of "system rm" --- mysql-test/t/myisam.test | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mysql-test/t/myisam.test b/mysql-test/t/myisam.test index 12b9423be21..d5f403616c8 100644 --- a/mysql-test/t/myisam.test +++ b/mysql-test/t/myisam.test @@ -1051,14 +1051,14 @@ eval set storage_engine=$default; # Test how DROP TABLE works if the index or data file doesn't exists create table t1 (a int) engine=myisam; -system rm $MYSQLTEST_VARDIR/master-data/test/t1.MYI ; +remove_file $MYSQLTEST_VARDIR/master-data/test/t1.MYI ; drop table if exists t1; create table t1 (a int) engine=myisam; -system rm $MYSQLTEST_VARDIR/master-data/test/t1.MYI ; +remove_file $MYSQLTEST_VARDIR/master-data/test/t1.MYI ; --error 1051,6 drop table t1; create table t1 (a int) engine=myisam; -system rm $MYSQLTEST_VARDIR/master-data/test/t1.MYD ; +remove_file $MYSQLTEST_VARDIR/master-data/test/t1.MYD ; --error 1105,6,29 drop table t1; --error 1051 From 10012b36feb18180892201b4afdd995e9e0f1a0a Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 29 Aug 2007 17:54:02 +0200 Subject: [PATCH 158/194] Remove any old pidfile before starting mysqld to make sure that 'mysqld_wait_started' don't return prematurely because of an old pidfile --- mysql-test/mysql-test-run.pl | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 96c422d4d85..6df64ced2f9 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -3825,6 +3825,9 @@ sub mysqld_start ($$$) { $wait_for_pid_file= 0; } + # Remove the pidfile + unlink($mysqld->{'path_pid'}); + if ( defined $exe ) { $pid= mtr_spawn($exe, $args, "", From b201a6c7ac35c48f59f7b804a59ebc8cbac1b4e2 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 29 Aug 2007 19:02:33 +0200 Subject: [PATCH 159/194] Move instance manager tests to it's own suite mysql-test/suite/im/t/im_daemon_life_cycle-im.opt: Rename: mysql-test/t/im_daemon_life_cycle-im.opt -> mysql-test/suite/im/t/im_daemon_life_cycle-im.opt mysql-test/suite/im/t/im_instance_conf-im.opt: Rename: mysql-test/t/im_instance_conf-im.opt -> mysql-test/suite/im/t/im_instance_conf-im.opt mysql-test/suite/im/t/im_life_cycle-im.opt: Rename: mysql-test/t/im_life_cycle-im.opt -> mysql-test/suite/im/t/im_life_cycle-im.opt mysql-test/suite/im/t/im_options-im.opt: Rename: mysql-test/t/im_options-im.opt -> mysql-test/suite/im/t/im_options-im.opt mysql-test/suite/im/t/im_utils-im.opt: Rename: mysql-test/t/im_utils-im.opt -> mysql-test/suite/im/t/im_utils-im.opt mysql-test/suite/im/r/im_cmd_line.result: Rename: mysql-test/r/im_cmd_line.result -> mysql-test/suite/im/r/im_cmd_line.result mysql-test/suite/im/r/im_daemon_life_cycle.result: Rename: mysql-test/r/im_daemon_life_cycle.result -> mysql-test/suite/im/r/im_daemon_life_cycle.result mysql-test/suite/im/r/im_instance_conf.result: Rename: mysql-test/r/im_instance_conf.result -> mysql-test/suite/im/r/im_instance_conf.result mysql-test/suite/im/r/im_life_cycle.result: Rename: mysql-test/r/im_life_cycle.result -> mysql-test/suite/im/r/im_life_cycle.result mysql-test/suite/im/r/im_options.result: Rename: mysql-test/r/im_options.result -> mysql-test/suite/im/r/im_options.result mysql-test/suite/im/r/im_utils.result: Rename: mysql-test/r/im_utils.result -> mysql-test/suite/im/r/im_utils.result mysql-test/suite/im/t/utils.sh: Rename: mysql-test/t/utils.sh -> mysql-test/suite/im/t/utils.sh mysql-test/suite/im/t/wait_for_process.sh: Rename: mysql-test/t/wait_for_process.sh -> mysql-test/suite/im/t/wait_for_process.sh mysql-test/suite/im/t/wait_for_socket.sh: Rename: mysql-test/t/wait_for_socket.sh -> mysql-test/suite/im/t/wait_for_socket.sh mysql-test/suite/im/t/log.sh: Rename: mysql-test/t/log.sh -> mysql-test/suite/im/t/log.sh mysql-test/suite/im/t/kill_n_check.sh: Rename: mysql-test/t/kill_n_check.sh -> mysql-test/suite/im/t/kill_n_check.sh mysql-test/suite/im/t/im_check_env.inc: Rename: mysql-test/include/im_check_env.inc -> mysql-test/suite/im/t/im_check_env.inc mysql-test/suite/im/t/im_cmd_line.imtest: Update location of im_check_env.inc mysql-test/suite/im/t/im_daemon_life_cycle.imtest: Update location of im_check_env.inc Add variable UTIL that points to the "ugly" .sh scripts mysql-test/suite/im/t/im_instance_conf.imtest: Update location of im_check_env.inc mysql-test/suite/im/t/im_life_cycle.imtest: Update location of im_check_env.inc Add variable UTIL that points to the "ugly" .sh scripts mysql-test/suite/im/t/im_options.imtest: Update location of im_check_env.inc mysql-test/suite/im/t/im_utils.imtest: Update location of im_check_env.inc Add variable UTIL that points to the "ugly" .sh scripts mysql-test/t/disabled.def: Move disabled im test to suite/im/t/disabled.def mysql-test/suite/im/t/disabled.def: New BitKeeper file ``mysql-test/suite/im/t/disabled.def'' --- .../{ => suite/im}/r/im_cmd_line.result | 0 .../im}/r/im_daemon_life_cycle.result | 0 .../{ => suite/im}/r/im_instance_conf.result | 0 .../{ => suite/im}/r/im_life_cycle.result | 0 mysql-test/{ => suite/im}/r/im_options.result | 0 mysql-test/{ => suite/im}/r/im_utils.result | 0 mysql-test/suite/im/t/disabled.def | 20 ++++++++ .../{include => suite/im/t}/im_check_env.inc | 0 .../{ => suite/im}/t/im_cmd_line.imtest | 2 +- .../im}/t/im_daemon_life_cycle-im.opt | 0 .../im}/t/im_daemon_life_cycle.imtest | 48 ++++++++++--------- .../{ => suite/im}/t/im_instance_conf-im.opt | 0 .../{ => suite/im}/t/im_instance_conf.imtest | 2 +- .../{ => suite/im}/t/im_life_cycle-im.opt | 0 .../{ => suite/im}/t/im_life_cycle.imtest | 14 +++--- mysql-test/{ => suite/im}/t/im_options-im.opt | 0 mysql-test/{ => suite/im}/t/im_options.imtest | 2 +- mysql-test/{ => suite/im}/t/im_utils-im.opt | 0 mysql-test/{ => suite/im}/t/im_utils.imtest | 8 ++-- mysql-test/{ => suite/im}/t/kill_n_check.sh | 0 mysql-test/{ => suite/im}/t/log.sh | 0 mysql-test/{ => suite/im}/t/utils.sh | 0 .../{ => suite/im}/t/wait_for_process.sh | 0 .../{ => suite/im}/t/wait_for_socket.sh | 0 mysql-test/t/disabled.def | 9 ---- 25 files changed, 61 insertions(+), 44 deletions(-) rename mysql-test/{ => suite/im}/r/im_cmd_line.result (100%) rename mysql-test/{ => suite/im}/r/im_daemon_life_cycle.result (100%) rename mysql-test/{ => suite/im}/r/im_instance_conf.result (100%) rename mysql-test/{ => suite/im}/r/im_life_cycle.result (100%) rename mysql-test/{ => suite/im}/r/im_options.result (100%) rename mysql-test/{ => suite/im}/r/im_utils.result (100%) create mode 100644 mysql-test/suite/im/t/disabled.def rename mysql-test/{include => suite/im/t}/im_check_env.inc (100%) rename mysql-test/{ => suite/im}/t/im_cmd_line.imtest (98%) rename mysql-test/{ => suite/im}/t/im_daemon_life_cycle-im.opt (100%) rename mysql-test/{ => suite/im}/t/im_daemon_life_cycle.imtest (52%) rename mysql-test/{ => suite/im}/t/im_instance_conf-im.opt (100%) rename mysql-test/{ => suite/im}/t/im_instance_conf.imtest (99%) rename mysql-test/{ => suite/im}/t/im_life_cycle-im.opt (100%) rename mysql-test/{ => suite/im}/t/im_life_cycle.imtest (92%) rename mysql-test/{ => suite/im}/t/im_options-im.opt (100%) rename mysql-test/{ => suite/im}/t/im_options.imtest (99%) rename mysql-test/{ => suite/im}/t/im_utils-im.opt (100%) rename mysql-test/{ => suite/im}/t/im_utils.imtest (91%) rename mysql-test/{ => suite/im}/t/kill_n_check.sh (100%) rename mysql-test/{ => suite/im}/t/log.sh (100%) rename mysql-test/{ => suite/im}/t/utils.sh (100%) rename mysql-test/{ => suite/im}/t/wait_for_process.sh (100%) rename mysql-test/{ => suite/im}/t/wait_for_socket.sh (100%) diff --git a/mysql-test/r/im_cmd_line.result b/mysql-test/suite/im/r/im_cmd_line.result similarity index 100% rename from mysql-test/r/im_cmd_line.result rename to mysql-test/suite/im/r/im_cmd_line.result diff --git a/mysql-test/r/im_daemon_life_cycle.result b/mysql-test/suite/im/r/im_daemon_life_cycle.result similarity index 100% rename from mysql-test/r/im_daemon_life_cycle.result rename to mysql-test/suite/im/r/im_daemon_life_cycle.result diff --git a/mysql-test/r/im_instance_conf.result b/mysql-test/suite/im/r/im_instance_conf.result similarity index 100% rename from mysql-test/r/im_instance_conf.result rename to mysql-test/suite/im/r/im_instance_conf.result diff --git a/mysql-test/r/im_life_cycle.result b/mysql-test/suite/im/r/im_life_cycle.result similarity index 100% rename from mysql-test/r/im_life_cycle.result rename to mysql-test/suite/im/r/im_life_cycle.result diff --git a/mysql-test/r/im_options.result b/mysql-test/suite/im/r/im_options.result similarity index 100% rename from mysql-test/r/im_options.result rename to mysql-test/suite/im/r/im_options.result diff --git a/mysql-test/r/im_utils.result b/mysql-test/suite/im/r/im_utils.result similarity index 100% rename from mysql-test/r/im_utils.result rename to mysql-test/suite/im/r/im_utils.result diff --git a/mysql-test/suite/im/t/disabled.def b/mysql-test/suite/im/t/disabled.def new file mode 100644 index 00000000000..56828810bf1 --- /dev/null +++ b/mysql-test/suite/im/t/disabled.def @@ -0,0 +1,20 @@ +############################################################################## +# +# List the test cases that are to be disabled temporarily. +# +# Separate the test case name and the comment with ':'. +# +# : BUG# +# +# Do not use any TAB characters for whitespace. +# +############################################################################## +im_options : Bug#20294 2006-07-24 stewart Instance manager test im_options fails randomly +im_daemon_life_cycle : Bug#20294 2007-05-14 alik Instance manager tests fail randomly +im_cmd_line : Bug#20294 2007-05-14 alik Instance manager tests fail randomly +im_utils : Bug#20294 2007-05-30 alik Instance manager tests fail randomly +im_instance_conf : Bug#20294 2007-05-30 alik Instance manager tests fail randomly +im_life_cycle : BUG#27851 Instance manager dies on ASSERT in ~Thread_registry() or from not being able to close a mysqld instance. +im_instance_conf : BUG#28743 Instance manager generates warnings in test suite +im_utils : BUG#28743 Instance manager generates warnings in test suite + diff --git a/mysql-test/include/im_check_env.inc b/mysql-test/suite/im/t/im_check_env.inc similarity index 100% rename from mysql-test/include/im_check_env.inc rename to mysql-test/suite/im/t/im_check_env.inc diff --git a/mysql-test/t/im_cmd_line.imtest b/mysql-test/suite/im/t/im_cmd_line.imtest similarity index 98% rename from mysql-test/t/im_cmd_line.imtest rename to mysql-test/suite/im/t/im_cmd_line.imtest index 1de43efe92b..e8264b5bb8a 100644 --- a/mysql-test/t/im_cmd_line.imtest +++ b/mysql-test/suite/im/t/im_cmd_line.imtest @@ -4,7 +4,7 @@ # ########################################################################### ---source include/im_check_env.inc +--source suite/im/t/im_check_env.inc ########################################################################### diff --git a/mysql-test/t/im_daemon_life_cycle-im.opt b/mysql-test/suite/im/t/im_daemon_life_cycle-im.opt similarity index 100% rename from mysql-test/t/im_daemon_life_cycle-im.opt rename to mysql-test/suite/im/t/im_daemon_life_cycle-im.opt diff --git a/mysql-test/t/im_daemon_life_cycle.imtest b/mysql-test/suite/im/t/im_daemon_life_cycle.imtest similarity index 52% rename from mysql-test/t/im_daemon_life_cycle.imtest rename to mysql-test/suite/im/t/im_daemon_life_cycle.imtest index c2eac46c1e4..c42ab89cc49 100644 --- a/mysql-test/t/im_daemon_life_cycle.imtest +++ b/mysql-test/suite/im/t/im_daemon_life_cycle.imtest @@ -1,3 +1,5 @@ +let $UTIL=$MYSQL_TEST_DIR/suite/im/t; + ########################################################################### # # This file contains test for (1.2) test suite. @@ -6,11 +8,11 @@ # ########################################################################### ---exec $MYSQL_TEST_DIR/t/log.sh im_daemon_life_cycle im_daemon_life_cycle.imtest started. +--exec $UTIL/log.sh im_daemon_life_cycle im_daemon_life_cycle.imtest started. ########################################################################### ---source include/im_check_env.inc +--source suite/im/t/im_check_env.inc # Turn on reconnect, not on by default anymore. --enable_reconnect @@ -30,15 +32,15 @@ # ########################################################################### ---exec $MYSQL_TEST_DIR/t/log.sh im_daemon_life_cycle Main-test: starting... +--exec $UTIL/log.sh im_daemon_life_cycle Main-test: starting... ---exec $MYSQL_TEST_DIR/t/log.sh im_daemon_life_cycle Killing IM-main... ---exec $MYSQL_TEST_DIR/t/kill_n_check.sh $IM_PATH_PID restarted 55 im_daemon_life_cycle +--exec $UTIL/log.sh im_daemon_life_cycle Killing IM-main... +--exec $UTIL/kill_n_check.sh $IM_PATH_PID restarted 55 im_daemon_life_cycle ---exec $MYSQL_TEST_DIR/t/log.sh im_daemon_life_cycle Waiting for IM-main to start accepting connections... ---exec $MYSQL_TEST_DIR/t/wait_for_socket.sh $EXE_MYSQL $IM_PATH_SOCK $IM_USERNAME $IM_PASSWORD '' 55 im_daemon_life_cycle +--exec $UTIL/log.sh im_daemon_life_cycle Waiting for IM-main to start accepting connections... +--exec $UTIL/wait_for_socket.sh $EXE_MYSQL $IM_PATH_SOCK $IM_USERNAME $IM_PASSWORD '' 55 im_daemon_life_cycle ---exec $MYSQL_TEST_DIR/t/log.sh im_daemon_life_cycle Main-test: done. +--exec $UTIL/log.sh im_daemon_life_cycle Main-test: done. ########################################################################### # @@ -55,29 +57,29 @@ --echo -- Test for BUG#12751 --echo -------------------------------------------------------------------- ---exec $MYSQL_TEST_DIR/t/log.sh im_daemon_life_cycle BUG12751: starting... +--exec $UTIL/log.sh im_daemon_life_cycle BUG12751: starting... # 1. Start mysqld; ---exec $MYSQL_TEST_DIR/t/log.sh im_daemon_life_cycle mysqld2: starting... +--exec $UTIL/log.sh im_daemon_life_cycle mysqld2: starting... START INSTANCE mysqld2; ---exec $MYSQL_TEST_DIR/t/log.sh im_daemon_life_cycle mysqld2: waiting to start... ---exec $MYSQL_TEST_DIR/t/wait_for_process.sh $IM_MYSQLD2_PATH_PID 55 started im_daemon_life_cycle +--exec $UTIL/log.sh im_daemon_life_cycle mysqld2: waiting to start... +--exec $UTIL/wait_for_process.sh $IM_MYSQLD2_PATH_PID 55 started im_daemon_life_cycle ---exec $MYSQL_TEST_DIR/t/log.sh im_daemon_life_cycle mysqld2: started. +--exec $UTIL/log.sh im_daemon_life_cycle mysqld2: started. # 2. Restart IM-main; ---exec $MYSQL_TEST_DIR/t/log.sh im_daemon_life_cycle Killing IM-main... ---exec $MYSQL_TEST_DIR/t/kill_n_check.sh $IM_PATH_PID restarted 55 im_daemon_life_cycle +--exec $UTIL/log.sh im_daemon_life_cycle Killing IM-main... +--exec $UTIL/kill_n_check.sh $IM_PATH_PID restarted 55 im_daemon_life_cycle ---exec $MYSQL_TEST_DIR/t/log.sh im_daemon_life_cycle Waiting for IM-main to start accepting connections... ---exec $MYSQL_TEST_DIR/t/wait_for_socket.sh $EXE_MYSQL $IM_PATH_SOCK $IM_USERNAME $IM_PASSWORD '' 55 im_daemon_life_cycle +--exec $UTIL/log.sh im_daemon_life_cycle Waiting for IM-main to start accepting connections... +--exec $UTIL/wait_for_socket.sh $EXE_MYSQL $IM_PATH_SOCK $IM_USERNAME $IM_PASSWORD '' 55 im_daemon_life_cycle # 3. Issue some statement -- connection should be re-established. ---exec $MYSQL_TEST_DIR/t/log.sh im_daemon_life_cycle Checking that IM-main processing commands... +--exec $UTIL/log.sh im_daemon_life_cycle Checking that IM-main processing commands... --replace_column 2 STATE 3 VERSION_NUMBER 4 VERSION SHOW INSTANCE STATUS mysqld1; @@ -86,13 +88,13 @@ SHOW INSTANCE STATUS mysqld1; # So, if it we do not stop it, it will be stopped by mysql-test-run.pl with # warning. ---exec $MYSQL_TEST_DIR/t/log.sh im_daemon_life_cycle mysqld2: stopping... +--exec $UTIL/log.sh im_daemon_life_cycle mysqld2: stopping... STOP INSTANCE mysqld2; ---exec $MYSQL_TEST_DIR/t/log.sh im_daemon_life_cycle mysqld2: waiting to stop... ---exec $MYSQL_TEST_DIR/t/wait_for_process.sh $IM_MYSQLD2_PATH_PID 55 stopped im_daemon_life_cycle ---exec $MYSQL_TEST_DIR/t/log.sh im_daemon_life_cycle mysqld2: stopped. +--exec $UTIL/log.sh im_daemon_life_cycle mysqld2: waiting to stop... +--exec $UTIL/wait_for_process.sh $IM_MYSQLD2_PATH_PID 55 stopped im_daemon_life_cycle +--exec $UTIL/log.sh im_daemon_life_cycle mysqld2: stopped. ########################################################################### ---exec $MYSQL_TEST_DIR/t/log.sh im_daemon_life_cycle BUG12751: done. +--exec $UTIL/log.sh im_daemon_life_cycle BUG12751: done. diff --git a/mysql-test/t/im_instance_conf-im.opt b/mysql-test/suite/im/t/im_instance_conf-im.opt similarity index 100% rename from mysql-test/t/im_instance_conf-im.opt rename to mysql-test/suite/im/t/im_instance_conf-im.opt diff --git a/mysql-test/t/im_instance_conf.imtest b/mysql-test/suite/im/t/im_instance_conf.imtest similarity index 99% rename from mysql-test/t/im_instance_conf.imtest rename to mysql-test/suite/im/t/im_instance_conf.imtest index e7f1e511113..b667df41f98 100644 --- a/mysql-test/t/im_instance_conf.imtest +++ b/mysql-test/suite/im/t/im_instance_conf.imtest @@ -26,7 +26,7 @@ # ########################################################################### ---source include/im_check_env.inc +--source suite/im/t/im_check_env.inc ########################################################################### # diff --git a/mysql-test/t/im_life_cycle-im.opt b/mysql-test/suite/im/t/im_life_cycle-im.opt similarity index 100% rename from mysql-test/t/im_life_cycle-im.opt rename to mysql-test/suite/im/t/im_life_cycle-im.opt diff --git a/mysql-test/t/im_life_cycle.imtest b/mysql-test/suite/im/t/im_life_cycle.imtest similarity index 92% rename from mysql-test/t/im_life_cycle.imtest rename to mysql-test/suite/im/t/im_life_cycle.imtest index 3721b92e2b7..31f63d82505 100644 --- a/mysql-test/t/im_life_cycle.imtest +++ b/mysql-test/suite/im/t/im_life_cycle.imtest @@ -1,3 +1,5 @@ +let $UTIL=$MYSQL_TEST_DIR/suite/im/t; + ########################################################################### # # This file contains test for (1.1) test suite. @@ -6,7 +8,7 @@ # ########################################################################### ---source include/im_check_env.inc +--source suite/im/t/im_check_env.inc ########################################################################### # @@ -25,7 +27,7 @@ START INSTANCE mysqld2; # FIXME: START INSTANCE should be synchronous. ---exec $MYSQL_TEST_DIR/t/wait_for_process.sh $IM_MYSQLD2_PATH_PID 30 started im_life_cycle +--exec $UTIL/wait_for_process.sh $IM_MYSQLD2_PATH_PID 30 started im_life_cycle # FIXME: Result of SHOW INSTANCES here is not deterministic unless START # INSTANCE is synchronous. Even waiting for mysqld to start by looking at @@ -58,7 +60,7 @@ SHOW VARIABLES LIKE 'port'; STOP INSTANCE mysqld2; # FIXME: STOP INSTANCE should be synchronous. ---exec $MYSQL_TEST_DIR/t/wait_for_process.sh $IM_MYSQLD2_PATH_PID 30 stopped im_life_cycle +--exec $UTIL/wait_for_process.sh $IM_MYSQLD2_PATH_PID 30 stopped im_life_cycle # FIXME: Result of SHOW INSTANCES here is not deterministic unless START # INSTANCE is synchronous. Even waiting for mysqld to start by looking at @@ -121,7 +123,7 @@ STOP INSTANCE mysqld3; --echo -- 1.1.6. --echo -------------------------------------------------------------------- ---exec $MYSQL_TEST_DIR/t/kill_n_check.sh $IM_MYSQLD1_PATH_PID restarted 30 im_life_cycle +--exec $UTIL/kill_n_check.sh $IM_MYSQLD1_PATH_PID restarted 30 im_life_cycle # Give some time to IM to detect that mysqld was restarted. It should be # longer than monitoring interval. @@ -143,7 +145,7 @@ SHOW INSTANCES; START INSTANCE mysqld2; # FIXME: START INSTANCE should be synchronous. ---exec $MYSQL_TEST_DIR/t/wait_for_process.sh $IM_MYSQLD2_PATH_PID 30 started im_life_cycle +--exec $UTIL/wait_for_process.sh $IM_MYSQLD2_PATH_PID 30 started im_life_cycle # FIXME: Result of SHOW INSTANCES here is not deterministic unless START # INSTANCE is synchronous. Even waiting for mysqld to start by looking at @@ -151,7 +153,7 @@ START INSTANCE mysqld2; # mysqld has started. # SHOW INSTANCES; ---exec $MYSQL_TEST_DIR/t/kill_n_check.sh $IM_MYSQLD2_PATH_PID killed 10 im_life_cycle +--exec $UTIL/kill_n_check.sh $IM_MYSQLD2_PATH_PID killed 10 im_life_cycle # FIXME: Result of SHOW INSTANCES here is not deterministic unless START # INSTANCE is synchronous. Even waiting for mysqld to start by looking at diff --git a/mysql-test/t/im_options-im.opt b/mysql-test/suite/im/t/im_options-im.opt similarity index 100% rename from mysql-test/t/im_options-im.opt rename to mysql-test/suite/im/t/im_options-im.opt diff --git a/mysql-test/t/im_options.imtest b/mysql-test/suite/im/t/im_options.imtest similarity index 99% rename from mysql-test/t/im_options.imtest rename to mysql-test/suite/im/t/im_options.imtest index 8f9bed16473..d251b97d8e7 100644 --- a/mysql-test/t/im_options.imtest +++ b/mysql-test/suite/im/t/im_options.imtest @@ -32,7 +32,7 @@ # ########################################################################### ---source include/im_check_env.inc +--source suite/im/t/im_check_env.inc ########################################################################### # diff --git a/mysql-test/t/im_utils-im.opt b/mysql-test/suite/im/t/im_utils-im.opt similarity index 100% rename from mysql-test/t/im_utils-im.opt rename to mysql-test/suite/im/t/im_utils-im.opt diff --git a/mysql-test/t/im_utils.imtest b/mysql-test/suite/im/t/im_utils.imtest similarity index 91% rename from mysql-test/t/im_utils.imtest rename to mysql-test/suite/im/t/im_utils.imtest index 0866b87204a..b935634e96c 100644 --- a/mysql-test/t/im_utils.imtest +++ b/mysql-test/suite/im/t/im_utils.imtest @@ -6,7 +6,9 @@ # ########################################################################### ---source include/im_check_env.inc +--source suite/im/t/im_check_env.inc + +let $UTIL=$MYSQL_TEST_DIR/suite/im/t; ########################################################################### @@ -31,10 +33,10 @@ SHOW INSTANCE OPTIONS mysqld2; # START INSTANCE mysqld2; ---exec $MYSQL_TEST_DIR/t/wait_for_process.sh $IM_MYSQLD2_PATH_PID 30 started im_utils +--exec $UTIL/wait_for_process.sh $IM_MYSQLD2_PATH_PID 30 started im_utils STOP INSTANCE mysqld2; ---exec $MYSQL_TEST_DIR/t/wait_for_process.sh $IM_MYSQLD2_PATH_PID 30 stopped im_utils +--exec $UTIL/wait_for_process.sh $IM_MYSQLD2_PATH_PID 30 stopped im_utils # # Check 'SHOW LOG FILES' command: diff --git a/mysql-test/t/kill_n_check.sh b/mysql-test/suite/im/t/kill_n_check.sh similarity index 100% rename from mysql-test/t/kill_n_check.sh rename to mysql-test/suite/im/t/kill_n_check.sh diff --git a/mysql-test/t/log.sh b/mysql-test/suite/im/t/log.sh similarity index 100% rename from mysql-test/t/log.sh rename to mysql-test/suite/im/t/log.sh diff --git a/mysql-test/t/utils.sh b/mysql-test/suite/im/t/utils.sh similarity index 100% rename from mysql-test/t/utils.sh rename to mysql-test/suite/im/t/utils.sh diff --git a/mysql-test/t/wait_for_process.sh b/mysql-test/suite/im/t/wait_for_process.sh similarity index 100% rename from mysql-test/t/wait_for_process.sh rename to mysql-test/suite/im/t/wait_for_process.sh diff --git a/mysql-test/t/wait_for_socket.sh b/mysql-test/suite/im/t/wait_for_socket.sh similarity index 100% rename from mysql-test/t/wait_for_socket.sh rename to mysql-test/suite/im/t/wait_for_socket.sh diff --git a/mysql-test/t/disabled.def b/mysql-test/t/disabled.def index 0ba56a74f57..a39de913659 100644 --- a/mysql-test/t/disabled.def +++ b/mysql-test/t/disabled.def @@ -11,15 +11,6 @@ ############################################################################## user_limits : Bug#23921 random failure of user_limits.test -im_options : Bug#20294 2006-07-24 stewart Instance manager test im_options fails randomly -im_daemon_life_cycle : Bug#20294 2007-05-14 alik Instance manager tests fail randomly -im_cmd_line : Bug#20294 2007-05-14 alik Instance manager tests fail randomly -im_utils : Bug#20294 2007-05-30 alik Instance manager tests fail randomly -im_instance_conf : Bug#20294 2007-05-30 alik Instance manager tests fail randomly -im_life_cycle : BUG#27851 Instance manager dies on ASSERT in ~Thread_registry() or from not being able to close a mysqld instance. -im_instance_conf : BUG#28743 Instance manager generates warnings in test suite -im_utils : BUG#28743 Instance manager generates warnings in test suite - concurrent_innodb : BUG#21579 2006-08-11 mleich innodb_concurrent random failures with varying differences ctype_big5 : BUG#26711 2007-06-21 Lars Test has never worked on Double Whopper From 26aadd2175f2faf1b2c48691806855c034a3089e Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 29 Aug 2007 16:59:38 -0300 Subject: [PATCH 160/194] Bug#21975 Grant and revoke statements are non-transactional Bug#21422 GRANT/REVOKE possible inside stored function, probably in a trigger Bug#17244 GRANT gives strange error message when used in a stored function GRANT/REVOKE statements are non-transactional (no explicit transaction boundaries) in nature and hence are forbidden inside stored functions and triggers, but they weren't being effectively forbidden. Furthermore, the absence of implict commits makes changes made by GRANT/REVOKE statements to not be rolled back. The implemented fix is to issue a implicit commit with every GRANT/REVOKE statement, effectively prohibiting these statements in stored functions and triggers. The implicit commit also fixes the replication bug, and looks like being in concert with the behavior of DDL and administrative statements. Since this is a incompatible change, the following sentence should be added to the Manual in the very end of the 3rd paragraph, subclause 13.4.3 "Statements That Cause an Implicit Commit": "Beginning with MySQL 5.0.??, the GRANT and REVOKE statements cause an implicit commit." Patch contributed by Vladimir Shebordaev mysql-test/r/sp-error.result: Test case result for Bug#17244 mysql-test/t/sp-error.test: Test case for Bug#17244 sql/sp_head.cc: Set that a procedure with GRANT/REVOKE command has a (implicit or explicit) commit. sql/sql_parse.cc: End active transaction in SQLCOM_GRANT and SQLCOM_REVOKE, and thus effectively prohibit these statements in stored functions and triggers. An implicit commit also fixes a bug in replication, when GRANT or REVOKE would disappear from the binary log in case of a subsequent ROLLBACK, since they were considered transactional statements. mysql-test/suite/rpl/r/rpl_binlog_grant.result: Add test case result for Bug#21975 mysql-test/suite/rpl/t/rpl_binlog_grant.test: Add test case for Bug#21975 --- mysql-test/r/sp-error.result | 12 +++++ .../suite/rpl/r/rpl_binlog_grant.result | 50 +++++++++++++++++++ mysql-test/suite/rpl/t/rpl_binlog_grant.test | 41 +++++++++++++++ mysql-test/t/sp-error.test | 15 ++++++ sql/sp_head.cc | 3 ++ sql/sql_parse.cc | 5 ++ 6 files changed, 126 insertions(+) create mode 100644 mysql-test/suite/rpl/r/rpl_binlog_grant.result create mode 100644 mysql-test/suite/rpl/t/rpl_binlog_grant.test diff --git a/mysql-test/r/sp-error.result b/mysql-test/r/sp-error.result index 675a59f1fb7..2e0d437aeb6 100644 --- a/mysql-test/r/sp-error.result +++ b/mysql-test/r/sp-error.result @@ -969,6 +969,18 @@ CREATE TRIGGER tr1 BEFORE INSERT ON t1 FOR EACH ROW BEGIN create user 'mysqltest ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger. CREATE FUNCTION bug_13627_f() returns int BEGIN create user 'mysqltest_1'; return 1; END | ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger. +CREATE TRIGGER bug21975 BEFORE INSERT ON t1 FOR EACH ROW BEGIN grant select on t1 to 'mysqltest_1'; END | +ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger. +CREATE FUNCTION bug21975() returns int BEGIN grant select on t1 to 'mysqltest_1'; return 1; END | +ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger. +CREATE TRIGGER bug21975 BEFORE INSERT ON t1 FOR EACH ROW BEGIN revoke select on t1 from 'mysqltest_1'; END | +ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger. +CREATE FUNCTION bug21975() returns int BEGIN revoke select on t1 from 'mysqltest_1'; return 1; END | +ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger. +CREATE TRIGGER bug21975 BEFORE INSERT ON t1 FOR EACH ROW BEGIN revoke all privileges on *.* from 'mysqltest_1'; END | +ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger. +CREATE FUNCTION bug21975() returns int BEGIN revoke all privileges on *.* from 'mysqltest_1'; return 1; END | +ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger. CREATE TRIGGER tr1 BEFORE INSERT ON t1 FOR EACH ROW BEGIN drop user 'mysqltest_1'; END | ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger. CREATE FUNCTION bug_13627_f() returns int BEGIN drop user 'mysqltest_1'; return 1; END | diff --git a/mysql-test/suite/rpl/r/rpl_binlog_grant.result b/mysql-test/suite/rpl/r/rpl_binlog_grant.result new file mode 100644 index 00000000000..1692bcee21f --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_binlog_grant.result @@ -0,0 +1,50 @@ +drop database if exists d1; +create database d1; +use d1; +create table t (s1 int) engine=innodb; +set @@autocommit=0; +start transaction; +insert into t values (1); +grant select on t to x@y; +rollback; +show grants for x@y; +Grants for x@y +GRANT USAGE ON *.* TO 'x'@'y' +GRANT SELECT ON `d1`.`t` TO 'x'@'y' +show binlog events; +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 4 Format_desc 1 106 Server ver: VERSION, Binlog ver: 4 +master-bin.000001 106 Query 1 193 drop database if exists d1 +master-bin.000001 193 Query 1 272 create database d1 +master-bin.000001 272 Query 1 370 use `d1`; create table t (s1 int) engine=innodb +master-bin.000001 370 Query 1 436 use `d1`; BEGIN +master-bin.000001 436 Query 1 521 use `d1`; insert into t values (1) +master-bin.000001 521 Xid 1 548 COMMIT /* xid=12 */ +master-bin.000001 548 Query 1 633 use `d1`; grant select on t to x@y +start transaction; +insert into t values (2); +revoke select on t from x@y; +commit; +select * from t; +s1 +1 +2 +show grants for x@y; +Grants for x@y +GRANT USAGE ON *.* TO 'x'@'y' +show binlog events; +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 4 Format_desc 1 106 Server ver: VERSION, Binlog ver: 4 +master-bin.000001 106 Query 1 193 drop database if exists d1 +master-bin.000001 193 Query 1 272 create database d1 +master-bin.000001 272 Query 1 370 use `d1`; create table t (s1 int) engine=innodb +master-bin.000001 370 Query 1 436 use `d1`; BEGIN +master-bin.000001 436 Query 1 521 use `d1`; insert into t values (1) +master-bin.000001 521 Xid 1 548 COMMIT /* xid=12 */ +master-bin.000001 548 Query 1 633 use `d1`; grant select on t to x@y +master-bin.000001 633 Query 1 699 use `d1`; BEGIN +master-bin.000001 699 Query 1 784 use `d1`; insert into t values (2) +master-bin.000001 784 Xid 1 811 COMMIT /* xid=18 */ +master-bin.000001 811 Query 1 899 use `d1`; revoke select on t from x@y +drop user x@y; +drop database d1; diff --git a/mysql-test/suite/rpl/t/rpl_binlog_grant.test b/mysql-test/suite/rpl/t/rpl_binlog_grant.test new file mode 100644 index 00000000000..b6868f7ebf8 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_binlog_grant.test @@ -0,0 +1,41 @@ +-- source include/have_innodb.inc +-- source include/not_embedded.inc +-- source include/have_binlog_format_mixed_or_statement.inc + +let $VERSION=`select version()`; + +# Bug #21975: grant/revoke statements in transaction +# used to disappear from binlog upon rallback. +# Now GRANT/REVOKE do implicitly commit +# transaction + +--disable_warnings +drop database if exists d1; +--enable_warnings +create database d1; +use d1; +create table t (s1 int) engine=innodb; +set @@autocommit=0; +start transaction; +insert into t values (1); +grant select on t to x@y; +# +# There is no active transaction here +# +rollback; +show grants for x@y; +--replace_result $VERSION VERSION +show binlog events; +start transaction; +insert into t values (2); +revoke select on t from x@y; +# +# There is no active transaction here +# +commit; +select * from t; +show grants for x@y; +--replace_result $VERSION VERSION +show binlog events; +drop user x@y; +drop database d1; diff --git a/mysql-test/t/sp-error.test b/mysql-test/t/sp-error.test index ef9bed8b789..012f2b33225 100644 --- a/mysql-test/t/sp-error.test +++ b/mysql-test/t/sp-error.test @@ -1386,6 +1386,21 @@ CREATE TRIGGER tr1 BEFORE INSERT ON t1 FOR EACH ROW BEGIN create user 'mysqltest -- error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG CREATE FUNCTION bug_13627_f() returns int BEGIN create user 'mysqltest_1'; return 1; END | +-- error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG +CREATE TRIGGER bug21975 BEFORE INSERT ON t1 FOR EACH ROW BEGIN grant select on t1 to 'mysqltest_1'; END | +-- error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG +CREATE FUNCTION bug21975() returns int BEGIN grant select on t1 to 'mysqltest_1'; return 1; END | + +-- error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG +CREATE TRIGGER bug21975 BEFORE INSERT ON t1 FOR EACH ROW BEGIN revoke select on t1 from 'mysqltest_1'; END | +-- error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG +CREATE FUNCTION bug21975() returns int BEGIN revoke select on t1 from 'mysqltest_1'; return 1; END | + +-- error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG +CREATE TRIGGER bug21975 BEFORE INSERT ON t1 FOR EACH ROW BEGIN revoke all privileges on *.* from 'mysqltest_1'; END | +-- error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG +CREATE FUNCTION bug21975() returns int BEGIN revoke all privileges on *.* from 'mysqltest_1'; return 1; END | + -- error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG CREATE TRIGGER tr1 BEFORE INSERT ON t1 FOR EACH ROW BEGIN drop user 'mysqltest_1'; END | -- error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG diff --git a/sql/sp_head.cc b/sql/sp_head.cc index 7b2073b8de3..de8c4d89466 100644 --- a/sql/sp_head.cc +++ b/sql/sp_head.cc @@ -247,11 +247,14 @@ sp_get_flags_for_command(LEX *lex) case SQLCOM_CREATE_TRIGGER: case SQLCOM_CREATE_USER: case SQLCOM_ALTER_TABLE: + case SQLCOM_GRANT: + case SQLCOM_REVOKE: case SQLCOM_BEGIN: case SQLCOM_RENAME_TABLE: case SQLCOM_RENAME_USER: case SQLCOM_DROP_INDEX: case SQLCOM_DROP_DB: + case SQLCOM_REVOKE_ALL: case SQLCOM_DROP_USER: case SQLCOM_DROP_VIEW: case SQLCOM_DROP_TRIGGER: diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 2e4ce65f1c4..bbd6cb16d11 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -3381,6 +3381,8 @@ end_with_restore_list: } case SQLCOM_REVOKE_ALL: { + if (end_active_trans(thd)) + goto error; if (check_access(thd, UPDATE_ACL, "mysql", 0, 1, 1, 0) && check_global_access(thd,CREATE_USER_ACL)) break; @@ -3392,6 +3394,9 @@ end_with_restore_list: case SQLCOM_REVOKE: case SQLCOM_GRANT: { + if (end_active_trans(thd)) + goto error; + if (check_access(thd, lex->grant | lex->grant_tot_col | GRANT_ACL, first_table ? first_table->db : select_lex->db, first_table ? &first_table->grant.privilege : 0, From b0f899e9779764aee7b08021a179599e27a209e8 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 29 Aug 2007 14:50:32 -0600 Subject: [PATCH 161/194] Bug#28779 (mysql_query() allows execution of statements with unbalanced comments) Before this fix, the server would accept queries that contained comments, even when the comments were not properly closed with a '*' '/' marker. For example, select 1 /* + 2 would be accepted as select 1 /* + 2 */ and executed as select 1 With this fix, the server now rejects queries with unclosed comments as syntax errors. Both regular comments ('/' '*') and special comments ('/' '*' '!') must be closed with '*' '/' to be parsed correctly. mysql-test/r/comments.result: Unbalanced comments are a syntax error. mysql-test/t/comments.test: Unbalanced comments are a syntax error. sql/sql_lex.cc: Unbalanced comments are a syntax error. --- mysql-test/r/comments.result | 15 +++++++++++++++ mysql-test/t/comments.test | 33 ++++++++++++++++++++++++++++++++ sql/sql_lex.cc | 37 +++++++++++++++++++++++++++++------- 3 files changed, 78 insertions(+), 7 deletions(-) diff --git a/mysql-test/r/comments.result b/mysql-test/r/comments.result index a9106ce0538..1040c3fc8e9 100644 --- a/mysql-test/r/comments.result +++ b/mysql-test/r/comments.result @@ -26,3 +26,18 @@ select 1 # The rest of the row will be ignored 1 1 /* line with only comment */; +drop table if exists table_28779; +create table table_28779 (a int); +prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*' AND b = 'bar';"; +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 '/*' AND b = 'bar'' at line 1 +prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*' AND b = 'bar';*"; +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 '/*' AND b = 'bar';*' at line 1 +prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*! AND 2=2;"; +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 '' at line 1 +prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*! AND 2=2;*"; +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 ';*' at line 1 +prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*!98765' AND b = 'bar';"; +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 '/*!98765' AND b = 'bar'' at line 1 +prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*!98765' AND b = 'bar';*"; +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 '/*!98765' AND b = 'bar';*' at line 1 +drop table table_28779; diff --git a/mysql-test/t/comments.test b/mysql-test/t/comments.test index 52273ec9523..0c6853cf298 100644 --- a/mysql-test/t/comments.test +++ b/mysql-test/t/comments.test @@ -19,3 +19,36 @@ select 1 # The rest of the row will be ignored /* line with only comment */; # End of 4.1 tests + + +# +# Bug#28779 (mysql_query() allows execution of statements with unbalanced +# comments) +# + +--disable_warnings +drop table if exists table_28779; +--enable_warnings + +create table table_28779 (a int); + +--error 1064 +prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*' AND b = 'bar';"; + +--error 1064 +prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*' AND b = 'bar';*"; + +--error 1064 +prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*! AND 2=2;"; + +--error 1064 +prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*! AND 2=2;*"; + +--error 1064 +prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*!98765' AND b = 'bar';"; + +--error 1064 +prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*!98765' AND b = 'bar';*"; + +drop table table_28779; + diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index 7911da69862..1770ff358a2 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -526,6 +526,7 @@ static inline uint int_token(const char *str,uint length) int MYSQLlex(void *arg, void *yythd) { reg1 uchar c; + bool comment_closed; int tokval, result_state; uint length; enum my_lex_states state; @@ -961,15 +962,34 @@ int MYSQLlex(void *arg, void *yythd) break; } } - while (lip->ptr != lip->end_of_query && - ((c=yyGet()) != '*' || yyPeek() != '/')) + /* + Discard: + - regular '/' '*' comments, + - special comments '/' '*' '!' for a future version, + by scanning until we find a closing '*' '/' marker. + Note: There is no such thing as nesting comments, + the first '*' '/' sequence seen will mark the end. + */ + comment_closed= FALSE; + while (lip->ptr != lip->end_of_query) { - if (c == '\n') - lip->yylineno++; + c= yyGet(); + if (c == '*') + { + if (yyPeek() == '/') + { + yySkip(); + comment_closed= TRUE; + state = MY_LEX_START; + break; + } + } + else if (c == '\n') + lip->yylineno++; } - if (lip->ptr != lip->end_of_query) - yySkip(); // remove last '/' - state = MY_LEX_START; // Try again + /* Unbalanced comments with a missing '*' '/' are a syntax error */ + if (! comment_closed) + return (ABORT_SYM); break; case MY_LEX_END_LONG_COMMENT: if (lex->in_comment && yyPeek() == '/') @@ -1009,6 +1029,9 @@ int MYSQLlex(void *arg, void *yythd) if (lip->ptr >= lip->end_of_query) { lip->next_state=MY_LEX_END; // Mark for next loop + /* Unbalanced comments with a missing '*' '/' are a syntax error */ + if (lex->in_comment) + return (ABORT_SYM); return(END_OF_INPUT); } state=MY_LEX_CHAR; From 674f49f8f415c35b37660d85234e268bd3bd03ef Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 29 Aug 2007 14:36:08 -0700 Subject: [PATCH 162/194] Added ORDER BY to udf select so that results are ordered. mysql-test/include/rpl_udf.inc: ORDER BY to force order mysql-test/suite/rpl/r/rpl_udf.result: Fix for ORDER BY --- mysql-test/include/rpl_udf.inc | 20 ++++++------ mysql-test/suite/rpl/r/rpl_udf.result | 44 +++++++++++++-------------- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/mysql-test/include/rpl_udf.inc b/mysql-test/include/rpl_udf.inc index d9e19cda484..30f39d79d49 100644 --- a/mysql-test/include/rpl_udf.inc +++ b/mysql-test/include/rpl_udf.inc @@ -35,7 +35,7 @@ eval CREATE FUNCTION myfunc_int RETURNS INTEGER SONAME "$UDF_EXAMPLE_LIB"; --error ER_CANT_FIND_DL_ENTRY eval CREATE FUNCTION myfunc_nonexist RETURNS INTEGER SONAME "$UDF_EXAMPLE_LIB"; --replace_column 3 UDF_LIB -SELECT * FROM mysql.func; +SELECT * FROM mysql.func ORDER BY name; --disable_info save_master_pos; @@ -46,7 +46,7 @@ sync_with_master; --echo "Running on the slave" --enable_info --replace_column 3 UDF_LIB -SELECT * FROM mysql.func; +SELECT * FROM mysql.func ORDER BY name; --disable_info connection master; @@ -81,7 +81,7 @@ connection master; --enable_info DROP FUNCTION myfunc_double; DROP FUNCTION myfunc_int; -SELECT * FROM mysql.func; +SELECT * FROM mysql.func ORDER BY name; --disable_info sync_slave_with_master; @@ -89,7 +89,7 @@ sync_slave_with_master; # Check to see if the UDFs were dropped on the slave --echo "Running on the slave" --enable_info -SELECT * FROM mysql.func; +SELECT * FROM mysql.func ORDER BY name; --disable_info connection master; @@ -108,7 +108,7 @@ DROP TABLE t1; --enable_info CREATE FUNCTION myfuncsql_int(i INT) RETURNS INTEGER DETERMINISTIC RETURN i; CREATE FUNCTION myfuncsql_double(d DOUBLE) RETURNS INTEGER DETERMINISTIC RETURN d * 2.00; -SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%'; +SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%' ORDER BY name; --disable_info sync_slave_with_master; @@ -116,7 +116,7 @@ sync_slave_with_master; # Check to see that UDF CREATE statements were replicated --echo "Running on the slave" --enable_info -SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%'; +SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%' ORDER BY name; --disable_info connection master; @@ -147,7 +147,7 @@ connection master; --enable_info ALTER FUNCTION myfuncsql_int COMMENT "This was altered."; ALTER FUNCTION myfuncsql_double COMMENT "This was altered."; -SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%'; +SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%' ORDER BY name; --disable_info sync_slave_with_master; @@ -155,7 +155,7 @@ sync_slave_with_master; # Check to see if data was replicated --echo "Running on the slave" --enable_info -SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%'; +SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%' ORDER BY name; # Check to see that the functions are available for execution on the slave SELECT myfuncsql_int(25); @@ -169,7 +169,7 @@ connection master; --enable_info DROP FUNCTION myfuncsql_double; DROP FUNCTION myfuncsql_int; -SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%'; +SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%' ORDER BY name; --disable_info sync_slave_with_master; @@ -177,7 +177,7 @@ sync_slave_with_master; # Check to see if the UDFs were dropped on the slave --echo "Running on the slave" --enable_info -SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%'; +SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%' ORDER BY name; --disable_info connection master; diff --git a/mysql-test/suite/rpl/r/rpl_udf.result b/mysql-test/suite/rpl/r/rpl_udf.result index 1fa9cb3ffc2..49f8256ce96 100644 --- a/mysql-test/suite/rpl/r/rpl_udf.result +++ b/mysql-test/suite/rpl/r/rpl_udf.result @@ -14,13 +14,13 @@ CREATE FUNCTION myfunc_int RETURNS INTEGER SONAME "UDF_EXAMPLE_LIB"; affected rows: 0 CREATE FUNCTION myfunc_nonexist RETURNS INTEGER SONAME "UDF_EXAMPLE_LIB"; ERROR HY000: Can't find symbol 'myfunc_nonexist' in library -SELECT * FROM mysql.func; +SELECT * FROM mysql.func ORDER BY name; name ret dl type myfunc_double 1 UDF_LIB function myfunc_int 2 UDF_LIB function affected rows: 2 "Running on the slave" -SELECT * FROM mysql.func; +SELECT * FROM mysql.func ORDER BY name; name ret dl type myfunc_double 1 UDF_LIB function myfunc_int 2 UDF_LIB function @@ -64,11 +64,11 @@ DROP FUNCTION myfunc_double; affected rows: 0 DROP FUNCTION myfunc_int; affected rows: 0 -SELECT * FROM mysql.func; +SELECT * FROM mysql.func ORDER BY name; name ret dl type affected rows: 0 "Running on the slave" -SELECT * FROM mysql.func; +SELECT * FROM mysql.func ORDER BY name; name ret dl type affected rows: 0 "Running on the master" @@ -80,13 +80,13 @@ CREATE FUNCTION myfuncsql_int(i INT) RETURNS INTEGER DETERMINISTIC RETURN i; affected rows: 0 CREATE FUNCTION myfuncsql_double(d DOUBLE) RETURNS INTEGER DETERMINISTIC RETURN d * 2.00; affected rows: 0 -SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%'; +SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%' ORDER BY name; db name type param_list body comment test myfuncsql_double FUNCTION d DOUBLE RETURN d * 2.00 test myfuncsql_int FUNCTION i INT RETURN i affected rows: 2 "Running on the slave" -SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%'; +SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%' ORDER BY name; db name type param_list body comment test myfuncsql_double FUNCTION d DOUBLE RETURN d * 2.00 test myfuncsql_int FUNCTION i INT RETURN i @@ -122,13 +122,13 @@ ALTER FUNCTION myfuncsql_int COMMENT "This was altered."; affected rows: 0 ALTER FUNCTION myfuncsql_double COMMENT "This was altered."; affected rows: 0 -SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%'; +SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%' ORDER BY name; db name type param_list body comment test myfuncsql_double FUNCTION d DOUBLE RETURN d * 2.00 This was altered. test myfuncsql_int FUNCTION i INT RETURN i This was altered. affected rows: 2 "Running on the slave" -SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%'; +SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%' ORDER BY name; db name type param_list body comment test myfuncsql_double FUNCTION d DOUBLE RETURN d * 2.00 This was altered. test myfuncsql_int FUNCTION i INT RETURN i This was altered. @@ -146,11 +146,11 @@ DROP FUNCTION myfuncsql_double; affected rows: 0 DROP FUNCTION myfuncsql_int; affected rows: 0 -SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%'; +SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%' ORDER BY name; db name type param_list body comment affected rows: 0 "Running on the slave" -SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%'; +SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%' ORDER BY name; db name type param_list body comment affected rows: 0 "Running on the master" @@ -166,16 +166,16 @@ CREATE FUNCTION myfunc_int RETURNS INTEGER SONAME "UDF_EXAMPLE_LIB"; affected rows: 0 CREATE FUNCTION myfunc_nonexist RETURNS INTEGER SONAME "UDF_EXAMPLE_LIB"; ERROR HY000: Can't find symbol 'myfunc_nonexist' in library -SELECT * FROM mysql.func; +SELECT * FROM mysql.func ORDER BY name; name ret dl type -myfunc_int 2 UDF_LIB function myfunc_double 1 UDF_LIB function +myfunc_int 2 UDF_LIB function affected rows: 2 "Running on the slave" -SELECT * FROM mysql.func; +SELECT * FROM mysql.func ORDER BY name; name ret dl type -myfunc_int 2 UDF_LIB function myfunc_double 1 UDF_LIB function +myfunc_int 2 UDF_LIB function affected rows: 2 "Running on the master" CREATE TABLE t1(sum INT, price FLOAT(24)) ENGINE=MyISAM; @@ -224,11 +224,11 @@ DROP FUNCTION myfunc_double; affected rows: 0 DROP FUNCTION myfunc_int; affected rows: 0 -SELECT * FROM mysql.func; +SELECT * FROM mysql.func ORDER BY name; name ret dl type affected rows: 0 "Running on the slave" -SELECT * FROM mysql.func; +SELECT * FROM mysql.func ORDER BY name; name ret dl type affected rows: 0 "Running on the master" @@ -240,13 +240,13 @@ CREATE FUNCTION myfuncsql_int(i INT) RETURNS INTEGER DETERMINISTIC RETURN i; affected rows: 0 CREATE FUNCTION myfuncsql_double(d DOUBLE) RETURNS INTEGER DETERMINISTIC RETURN d * 2.00; affected rows: 0 -SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%'; +SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%' ORDER BY name; db name type param_list body comment test myfuncsql_double FUNCTION d DOUBLE RETURN d * 2.00 test myfuncsql_int FUNCTION i INT RETURN i affected rows: 2 "Running on the slave" -SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%'; +SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%' ORDER BY name; db name type param_list body comment test myfuncsql_double FUNCTION d DOUBLE RETURN d * 2.00 test myfuncsql_int FUNCTION i INT RETURN i @@ -282,13 +282,13 @@ ALTER FUNCTION myfuncsql_int COMMENT "This was altered."; affected rows: 0 ALTER FUNCTION myfuncsql_double COMMENT "This was altered."; affected rows: 0 -SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%'; +SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%' ORDER BY name; db name type param_list body comment test myfuncsql_double FUNCTION d DOUBLE RETURN d * 2.00 This was altered. test myfuncsql_int FUNCTION i INT RETURN i This was altered. affected rows: 2 "Running on the slave" -SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%'; +SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%' ORDER BY name; db name type param_list body comment test myfuncsql_double FUNCTION d DOUBLE RETURN d * 2.00 This was altered. test myfuncsql_int FUNCTION i INT RETURN i This was altered. @@ -306,11 +306,11 @@ DROP FUNCTION myfuncsql_double; affected rows: 0 DROP FUNCTION myfuncsql_int; affected rows: 0 -SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%'; +SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%' ORDER BY name; db name type param_list body comment affected rows: 0 "Running on the slave" -SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%'; +SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%' ORDER BY name; db name type param_list body comment affected rows: 0 "Running on the master" From bad0b628c8058741508d2f4de00b77c65c6c92cb Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 29 Aug 2007 19:00:49 -0300 Subject: [PATCH 163/194] Post-merge fixes for Bug#30632 mysql-test/r/handler_innodb.result: Post-merge: add Bug#30632 test case result mysql-test/r/handler_myisam.result: Post-merge fix of error number --- mysql-test/r/handler_innodb.result | 13 +++++++++++++ mysql-test/r/handler_myisam.result | 4 ++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/handler_innodb.result b/mysql-test/r/handler_innodb.result index 81d1e26f8d0..98b8922bc5f 100644 --- a/mysql-test/r/handler_innodb.result +++ b/mysql-test/r/handler_innodb.result @@ -522,3 +522,16 @@ handler t1 open; ERROR HY000: Table storage engine for 't1' doesn't have this option --> client 1 drop table t1; +drop table if exists t1; +create table t1 (a int); +handler t1 open as t1_alias; +handler t1_alias read a next; +ERROR 42000: Key 'a' doesn't exist in table 't1_alias' +handler t1_alias READ a next where inexistent > 0; +ERROR 42S22: Unknown column 'inexistent' in 'field list' +handler t1_alias read a next; +ERROR 42000: Key 'a' doesn't exist in table 't1_alias' +handler t1_alias READ a next where inexistent > 0; +ERROR 42S22: Unknown column 'inexistent' in 'field list' +handler t1_alias close; +drop table t1; diff --git a/mysql-test/r/handler_myisam.result b/mysql-test/r/handler_myisam.result index 5a9b2824232..464b775b795 100644 --- a/mysql-test/r/handler_myisam.result +++ b/mysql-test/r/handler_myisam.result @@ -526,11 +526,11 @@ drop table if exists t1; create table t1 (a int); handler t1 open as t1_alias; handler t1_alias read a next; -ERROR HY000: Key 'a' doesn't exist in table 't1_alias' +ERROR 42000: Key 'a' doesn't exist in table 't1_alias' handler t1_alias READ a next where inexistent > 0; ERROR 42S22: Unknown column 'inexistent' in 'field list' handler t1_alias read a next; -ERROR HY000: Key 'a' doesn't exist in table 't1_alias' +ERROR 42000: Key 'a' doesn't exist in table 't1_alias' handler t1_alias READ a next where inexistent > 0; ERROR 42S22: Unknown column 'inexistent' in 'field list' handler t1_alias close; From c8648fa38fa26cdd8b4fda0862345b4fa3147ffe Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 29 Aug 2007 16:58:00 -0600 Subject: [PATCH 164/194] Post-merge fixes, and disable buggy test case on embedded mysql-test/t/query_cache.test: Disable query_cache test on embedded, due to bug 30710. sql/log_event_old.cc: Post-merge fix, change RELAY_LOG_INFO to Relay_log_info. --- mysql-test/t/query_cache.test | 5 +++++ sql/log_event_old.cc | 24 ++++++++++++------------ 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/mysql-test/t/query_cache.test b/mysql-test/t/query_cache.test index e10428bdbb5..d06698cdb17 100644 --- a/mysql-test/t/query_cache.test +++ b/mysql-test/t/query_cache.test @@ -1,5 +1,10 @@ -- source include/have_query_cache.inc +# Disabled on embedded due to bug #30710, "query_cache.test fails on +# embedded w/ per-column privs test". Please re-enable when that bug +# is resolved. +-- source include/not_embedded.inc + # # Tests with query cache # diff --git a/sql/log_event_old.cc b/sql/log_event_old.cc index 420df67dc54..949179386ea 100644 --- a/sql/log_event_old.cc +++ b/sql/log_event_old.cc @@ -11,7 +11,7 @@ // Old implementation of do_apply_event() int -Old_rows_log_event::do_apply_event(Rows_log_event *ev, const RELAY_LOG_INFO *rli) +Old_rows_log_event::do_apply_event(Rows_log_event *ev, const Relay_log_info *rli) { DBUG_ENTER("Rows_log_event::do_apply_event(st_relay_log_info*)"); int error= 0; @@ -32,7 +32,7 @@ Old_rows_log_event::do_apply_event(Rows_log_event *ev, const RELAY_LOG_INFO *rli */ DBUG_ASSERT(ev->get_flags(Rows_log_event::STMT_END_F)); - const_cast(rli)->clear_tables_to_lock(); + const_cast(rli)->clear_tables_to_lock(); close_thread_tables(thd); thd->clear_error(); DBUG_RETURN(0); @@ -88,7 +88,7 @@ Old_rows_log_event::do_apply_event(Rows_log_event *ev, const RELAY_LOG_INFO *rli "Error in %s event: when locking tables", ev->get_type_str()); } - const_cast(rli)->clear_tables_to_lock(); + const_cast(rli)->clear_tables_to_lock(); DBUG_RETURN(error); } @@ -125,7 +125,7 @@ Old_rows_log_event::do_apply_event(Rows_log_event *ev, const RELAY_LOG_INFO *rli "unexpected success or fatal error")); thd->query_error= 1; } - const_cast(rli)->clear_tables_to_lock(); + const_cast(rli)->clear_tables_to_lock(); DBUG_RETURN(error); } } @@ -147,7 +147,7 @@ Old_rows_log_event::do_apply_event(Rows_log_event *ev, const RELAY_LOG_INFO *rli mysql_unlock_tables(thd, thd->lock); thd->lock= 0; thd->query_error= 1; - const_cast(rli)->clear_tables_to_lock(); + const_cast(rli)->clear_tables_to_lock(); DBUG_RETURN(Rows_log_event::ERR_BAD_TABLE_DEF); } } @@ -169,14 +169,14 @@ Old_rows_log_event::do_apply_event(Rows_log_event *ev, const RELAY_LOG_INFO *rli */ for (TABLE_LIST *ptr= rli->tables_to_lock ; ptr ; ptr= ptr->next_global) { - const_cast(rli)->m_table_map.set_table(ptr->table_id, ptr->table); + const_cast(rli)->m_table_map.set_table(ptr->table_id, ptr->table); } #ifdef HAVE_QUERY_CACHE query_cache.invalidate_locked_for_write(rli->tables_to_lock); #endif } - TABLE* table= const_cast(rli)->m_table_map.get_table(ev->m_table_id); + TABLE* table= const_cast(rli)->m_table_map.get_table(ev->m_table_id); if (table) { @@ -221,7 +221,7 @@ Old_rows_log_event::do_apply_event(Rows_log_event *ev, const RELAY_LOG_INFO *rli inside a statement and halting abruptly might cause problems when restarting. */ - const_cast(rli)->set_flag(RELAY_LOG_INFO::IN_STMT); + const_cast(rli)->set_flag(Relay_log_info::IN_STMT); error= do_before_row_operations(table); while (error == 0 && row_start < ev->m_rows_end) @@ -262,7 +262,7 @@ Old_rows_log_event::do_apply_event(Rows_log_event *ev, const RELAY_LOG_INFO *rli row_start= row_end; } DBUG_EXECUTE_IF("STOP_SLAVE_after_first_Rows_event", - const_cast(rli)->abort_slave= 1;); + const_cast(rli)->abort_slave= 1;); error= do_after_row_operations(table, error); if (!ev->cache_stmt) { @@ -276,7 +276,7 @@ Old_rows_log_event::do_apply_event(Rows_log_event *ev, const RELAY_LOG_INFO *rli The table def is needed in unpack_row(). */ if (rli->tables_to_lock && ev->get_flags(Rows_log_event::STMT_END_F)) - const_cast(rli)->clear_tables_to_lock(); + const_cast(rli)->clear_tables_to_lock(); if (error) { /* error has occured during the transaction */ @@ -299,7 +299,7 @@ Old_rows_log_event::do_apply_event(Rows_log_event *ev, const RELAY_LOG_INFO *rli rollback at the caller along with sbr. */ thd->reset_current_stmt_binlog_row_based(); - const_cast(rli)->cleanup_context(thd, error); + const_cast(rli)->cleanup_context(thd, error); thd->query_error= 1; DBUG_RETURN(error); } @@ -329,7 +329,7 @@ Old_rows_log_event::do_apply_event(Rows_log_event *ev, const RELAY_LOG_INFO *rli problem. When WL#2975 is implemented, just remove the member st_relay_log_info::last_event_start_time and all its occurences. */ - const_cast(rli)->last_event_start_time= my_time(0); + const_cast(rli)->last_event_start_time= my_time(0); } DBUG_RETURN(0); From 85ebacfaa3237609e9d819557c1deb0421593ee7 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 29 Aug 2007 17:27:38 -0600 Subject: [PATCH 165/194] Manual merge --- mysql-test/r/sp.result | 52 ++++++++++++++++++++++++++++++++++++++++ mysql-test/t/sp.test | 54 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 106 insertions(+) diff --git a/mysql-test/r/sp.result b/mysql-test/r/sp.result index 9e00424e879..2abff35b232 100644 --- a/mysql-test/r/sp.result +++ b/mysql-test/r/sp.result @@ -6569,4 +6569,56 @@ rl_acquirer old drop procedure p1; drop table t1; set session low_priority_updates=default; + +# Bug#13675. + +DROP PROCEDURE IF EXISTS p1; +DROP PROCEDURE IF EXISTS p2; +DROP TABLE IF EXISTS t1; + +CREATE PROCEDURE p1(v DATETIME) CREATE TABLE t1 SELECT v; +CREATE PROCEDURE p2(v INT) CREATE TABLE t1 SELECT v; + +CALL p1(NOW()); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `v` datetime DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 + +DROP TABLE t1; + +CALL p1('text'); +Warnings: +Warning 1264 Out of range value for column 'v' at row 1 +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `v` datetime DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 + +DROP TABLE t1; + +CALL p2(10); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `v` bigint(11) DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 + +DROP TABLE t1; + +CALL p2('text'); +Warnings: +Warning 1366 Incorrect integer value: 'text' for column 'v' at row 1 +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `v` bigint(11) DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 + +DROP TABLE t1; + +DROP PROCEDURE p1; +DROP PROCEDURE p2; End of 5.0 tests diff --git a/mysql-test/t/sp.test b/mysql-test/t/sp.test index 37e3880cb82..1c8f1ca51c2 100644 --- a/mysql-test/t/sp.test +++ b/mysql-test/t/sp.test @@ -7559,4 +7559,58 @@ drop procedure p1; drop table t1; set session low_priority_updates=default; +# +# Bug#13675: DATETIME/DATE type in store proc param seems to be converted as +# varbinary +# + +--echo +--echo # Bug#13675. +--echo + +--disable_warnings +DROP PROCEDURE IF EXISTS p1; +DROP PROCEDURE IF EXISTS p2; + +DROP TABLE IF EXISTS t1; +--enable_warnings + +--echo + +CREATE PROCEDURE p1(v DATETIME) CREATE TABLE t1 SELECT v; + +CREATE PROCEDURE p2(v INT) CREATE TABLE t1 SELECT v; + +--echo +CALL p1(NOW()); +SHOW CREATE TABLE t1; + +--echo +DROP TABLE t1; + +--echo +CALL p1('text'); +SHOW CREATE TABLE t1; + +--echo +DROP TABLE t1; + +--echo +CALL p2(10); +SHOW CREATE TABLE t1; + +--echo +DROP TABLE t1; + +--echo +CALL p2('text'); +SHOW CREATE TABLE t1; + +--echo +DROP TABLE t1; + +--echo +DROP PROCEDURE p1; +DROP PROCEDURE p2; + --echo End of 5.0 tests From d480d0ec5feff177d681cc98f265858dcac752ad Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 29 Aug 2007 18:56:00 -0600 Subject: [PATCH 166/194] Bug#30712 (open_performance_schema_table() cause an open table leak on failures) Fixed open_performance_schema_table() and close_performance_schema_table() implementation and callers, to always execute balanced calls to: thd->reset_n_backup_open_tables_state(backup); thd->restore_backup_open_tables_state(backup); sql/log.cc: Balanced calls to reset_n_backup_open_tables_state() / restore_backup_open_tables_state() sql/sql_base.cc: Balanced calls to reset_n_backup_open_tables_state() / restore_backup_open_tables_state() --- sql/log.cc | 10 ++++++++-- sql/sql_base.cc | 38 +++++++++++++++++++++----------------- 2 files changed, 29 insertions(+), 19 deletions(-) diff --git a/sql/log.cc b/sql/log.cc index 3686459fedf..a88f925c2e7 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -656,8 +656,14 @@ int Log_to_csv_event_handler:: table= open_performance_schema_table(thd, & table_list, & open_tables_backup); - result= (table ? 0 : 1); - close_performance_schema_table(thd, & open_tables_backup); + if (table) + { + result= 0; + close_performance_schema_table(thd, & open_tables_backup); + } + else + result= 1; + DBUG_RETURN(result); } diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 83bab51f870..7ea25447ba0 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -7746,6 +7746,9 @@ open_performance_schema_table(THD *thd, TABLE_LIST *one_table, */ table->timestamp_field_type= TIMESTAMP_NO_AUTO_SET; } + else + thd->restore_backup_open_tables_state(backup); + thd->utime_after_lock= save_utime_after_lock; DBUG_RETURN(table); } @@ -7761,24 +7764,25 @@ void close_performance_schema_table(THD *thd, Open_tables_state *backup) { bool found_old_table; - if (thd->lock) - { - /* - Note: - We do not create explicitly a separate transaction for the - performance table I/O, but borrow the current transaction. - lock + unlock will autocommit the change done in the - performance schema table: this is the expected result. - The current transaction should not be affected by this code. - TODO: Note that if a transactional engine is used for log tables, - this code will need to be revised, as a separate transaction - might be needed. - */ - mysql_unlock_tables(thd, thd->lock); - thd->lock= 0; - } + /* + If open_performance_schema_table() fails, + this function should not be called. + */ + DBUG_ASSERT(thd->lock != NULL); - safe_mutex_assert_not_owner(&LOCK_open); + /* + Note: + We do not create explicitly a separate transaction for the + performance table I/O, but borrow the current transaction. + lock + unlock will autocommit the change done in the + performance schema table: this is the expected result. + The current transaction should not be affected by this code. + TODO: Note that if a transactional engine is used for log tables, + this code will need to be revised, as a separate transaction + might be needed. + */ + mysql_unlock_tables(thd, thd->lock); + thd->lock= 0; pthread_mutex_lock(&LOCK_open); From bb986a24e7d3436ea186278e9d82c896f22ddaaf Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 30 Aug 2007 12:53:24 +0400 Subject: [PATCH 167/194] Bug #30164: Using client side macro inside server side comments generates broken queries Problem: In cases when a client-side macro appears inside a server-side comment, the add_line() function in mysql.cc discarded all characters until the next delimiter to remove macro arguments from the query string. This resulted in broken queries being sent to the server when the next delimiter character appeared past the comment's boundaries, because the comment closing sequence ('*/') was discarded. Fix: If a client-side macro appears inside a server-side comment, discard all characters in the comment after the macro (that is, until the end of the comment rather than the next delimiter). This is a minimal fix to allow only simple cases used by the mysqlbinlog utility. Limitations that are worth documenting: - Nested server-side and/or client-side comments are not supported by mysql.cc - Using client-side macros in multi-line server-side comments is not supported - All characters after a client-side macro in a server-side comment will be omitted from the query string (and thus, will not be sent to server). client/mysql.cc: If a client-side macro appears inside a server-side comment, discard all characters in the comment after the macro. mysql-test/r/mysql.result: Added a test case for bug #30164. mysql-test/t/mysql.test: Added a test case for bug #30164. --- client/mysql.cc | 54 +++++++++++++++++++++++++++------------ mysql-test/r/mysql.result | 2 ++ mysql-test/t/mysql.test | 5 ++++ 3 files changed, 44 insertions(+), 17 deletions(-) diff --git a/client/mysql.cc b/client/mysql.cc index 277b56328a6..8e1b6c2a9b4 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -1245,6 +1245,7 @@ static bool add_line(String &buffer,char *line,char *in_string, char buff[80], *pos, *out; COMMANDS *com; bool need_space= 0; + bool ss_comment= 0; DBUG_ENTER("add_line"); if (!line[0] && buffer.is_empty()) @@ -1293,22 +1294,36 @@ static bool add_line(String &buffer,char *line,char *in_string, } if ((com=find_command(NullS,(char) inchar))) { - const String tmp(line,(uint) (out-line), charset_info); - buffer.append(tmp); - if ((*com->func)(&buffer,pos-1) > 0) - DBUG_RETURN(1); // Quit - if (com->takes_params) - { - for (pos++ ; - *pos && (*pos != *delimiter || - !is_prefix(pos + 1, delimiter + 1)) ; pos++) - ; // Remove parameters - if (!*pos) - pos--; - else - pos+= delimiter_length - 1; // Point at last delim char - } - out=line; + const String tmp(line,(uint) (out-line), charset_info); + buffer.append(tmp); + if ((*com->func)(&buffer,pos-1) > 0) + DBUG_RETURN(1); // Quit + if (com->takes_params) + { + if (ss_comment) + { + /* + If a client-side macro appears inside a server-side comment, + discard all characters in the comment after the macro (that is, + until the end of the comment rather than the next delimiter) + */ + for (pos++; *pos && (*pos != '*' || *(pos + 1) != '/'); pos++) + ; + pos--; + } + else + { + for (pos++ ; + *pos && (*pos != *delimiter || + !is_prefix(pos + 1, delimiter + 1)) ; pos++) + ; // Remove parameters + if (!*pos) + pos--; + else + pos+= delimiter_length - 1; // Point at last delim char + } + } + out=line; } else { @@ -1368,7 +1383,7 @@ static bool add_line(String &buffer,char *line,char *in_string, out=line; } } - else if (*ml_comment && inchar == '*' && *(pos + 1) == '/') + else if (*ml_comment && !ss_comment && inchar == '*' && *(pos + 1) == '/') { pos++; *ml_comment= 0; @@ -1376,6 +1391,11 @@ static bool add_line(String &buffer,char *line,char *in_string, } else { // Add found char to buffer + if (!*in_string && inchar == '/' && *(pos + 1) == '*' && + *(pos + 2) == '!') + ss_comment= 1; + else if (!*in_string && ss_comment && inchar == '*' && *(pos + 1) == '/') + ss_comment= 0; if (inchar == *in_string) *in_string= 0; else if (!*ml_comment && !*in_string && diff --git a/mysql-test/r/mysql.result b/mysql-test/r/mysql.result index 843f2c7285a..74b5c42e59b 100644 --- a/mysql-test/r/mysql.result +++ b/mysql-test/r/mysql.result @@ -176,4 +176,6 @@ ERROR at line 1: DELIMITER cannot contain a backslash character ERROR at line 1: DELIMITER cannot contain a backslash character 1 1 +1 +1 End of 5.0 tests diff --git a/mysql-test/t/mysql.test b/mysql-test/t/mysql.test index 37bbca77d9f..fad1d1fe746 100644 --- a/mysql-test/t/mysql.test +++ b/mysql-test/t/mysql.test @@ -273,4 +273,9 @@ EOF --exec $MYSQL --pager="540bytelengthstringxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" -e "select 1" > /dev/null 2>&1 --exec $MYSQL --character-sets-dir="540bytelengthstringxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" -e "select 1" 2>&1 +# +# bug #30164: Using client side macro inside server side comments generates broken queries +# +--exec $MYSQL test -e '/*! \C latin1 */ select 1;' + --echo End of 5.0 tests From aef135da6633e4ac88591b1b3603bc8c84008cff Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 30 Aug 2007 17:21:43 +0400 Subject: [PATCH 168/194] Use double quotes instead of single ones which make the test fail on Windows. This is for bug #30164. mysql-test/t/mysql.test: Use double quotes instead of single ones which make the test fail on Windows. --- mysql-test/t/mysql.test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysql-test/t/mysql.test b/mysql-test/t/mysql.test index fad1d1fe746..9f8841ec1f4 100644 --- a/mysql-test/t/mysql.test +++ b/mysql-test/t/mysql.test @@ -276,6 +276,6 @@ EOF # # bug #30164: Using client side macro inside server side comments generates broken queries # ---exec $MYSQL test -e '/*! \C latin1 */ select 1;' +--exec $MYSQL test -e "/*! \C latin1 */ select 1;" --echo End of 5.0 tests From 3edb630197ae42353905325e9d1c8e78d329c23a Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 30 Aug 2007 20:06:19 +0400 Subject: [PATCH 169/194] Cleanup-patch for BUG#25843: changing default database between PREPARE and EXECUTE of statement breaks binlog. sql/sp.cc: - Polishing sp_use_new_db(): - renamed no_access_check to force_switch to be more adequate; - fixed comment; sql/sql_class.h: Polishing: fixed comment. sql/sql_db.cc: 1. Use mysql_change_db_impl() to reset current database instead of THD::set_db() in mysql_rm_db(). THD::set_db() does not take care of THD::db_access and database attributes (@@collation_database). 2. Polishing: add, fix comments. --- sql/sp.cc | 55 ++++++++++++++++++-------------- sql/sql_class.h | 39 ++++++++++++++++++++--- sql/sql_db.cc | 85 +++++++++++++++++++++++++++++++++++++------------ 3 files changed, 129 insertions(+), 50 deletions(-) diff --git a/sql/sp.cc b/sql/sp.cc index 7b69842669f..8655e520041 100644 --- a/sql/sp.cc +++ b/sql/sp.cc @@ -574,7 +574,7 @@ db_load_routine(THD *thd, int type, sp_name *name, sp_head **sphp, we'll update it later in switch_query_ctx(). */ - if ((ret= sp_use_new_db(thd, name->m_db, &old_db, 1, &dbchanged))) + if ((ret= sp_use_new_db(thd, name->m_db, &old_db, TRUE, &dbchanged))) goto end; thd->spcont= NULL; @@ -2027,34 +2027,41 @@ create_string(THD *thd, String *buf, -/* +/** Change the current database if needed. - SYNOPSIS - sp_use_new_db() - thd thread handle - new_db new database name (a string and its length) - old_db [IN] str points to a buffer where to store the old - database, length contains the size of the buffer - [OUT] if old db was not NULL, its name is copied - to the buffer pointed at by str and length is updated - accordingly. Otherwise str[0] is set to '\0' and length - is set to 0. The out parameter should be used only if - the database name has been changed (see dbchangedp). - dbchangedp [OUT] is set to TRUE if the current database is changed, - FALSE otherwise. A database is not changed if the old - name is the same as the new one, both names are empty, - or an error has occurred. + @param[in] thd thread handle + @param[in] new_db new database name + @param[in, out] old_db IN: str points to a buffer where to store + the old database, length contains the + size of the buffer + OUT: if old db was not NULL, its name is + copied to the buffer pointed at by str + and length is updated accordingly. + Otherwise str[0] is set to '\0' and + length is set to 0. The out parameter + should be used only if the database name + has been changed (see dbchangedp). + @param[in] force_switch Flag to mysql_change_db(). For more information, + see mysql_change_db() comment. + @param[out] dbchangedp is set to TRUE if the current database is + changed, FALSE otherwise. The current + database is not changed if the old name + is equal to the new one, both names are + empty, or an error has occurred. - RETURN VALUE - 0 success - 1 access denied or out of memory (the error message is - set in THD) + @return Operation status. + @retval 0 on success + @retval 1 access denied or out of memory + (the error message is set in THD) */ int -sp_use_new_db(THD *thd, LEX_STRING new_db, LEX_STRING *old_db, - bool no_access_check, bool *dbchangedp) +sp_use_new_db(THD *thd, + LEX_STRING new_db, + LEX_STRING *old_db, + bool force_switch, + bool *dbchangedp) { int ret; DBUG_ENTER("sp_use_new_db"); @@ -2085,7 +2092,7 @@ sp_use_new_db(THD *thd, LEX_STRING new_db, LEX_STRING *old_db, DBUG_RETURN(0); } - ret= mysql_change_db(thd, &new_db, no_access_check); + ret= mysql_change_db(thd, &new_db, force_switch); *dbchangedp= ret == 0; DBUG_RETURN(ret); diff --git a/sql/sql_class.h b/sql/sql_class.h index 55987ae8ad9..abed643f822 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -1802,11 +1802,27 @@ public: } } - /* - Initialize the current database from a NULL-terminated string with length - If we run out of memory, we free the current database and return TRUE. - This way the user will notice the error as there will be no current - database selected (in addition to the error message set by malloc). + /** + Set the current database; use deep copy of C-string. + + @param new_db a pointer to the new database name. + @param new_db_len length of the new database name. + + Initialize the current database from a NULL-terminated string with + length. If we run out of memory, we free the current database and + return TRUE. This way the user will notice the error as there will be + no current database selected (in addition to the error message set by + malloc). + + @note This operation just sets {thd->db, thd->db_length}. Switching the + current database usually involves other actions, like switching other + database attributes including security context. In the future, this + operation will be made private and more convenient interface will be + provided. + + @return Operation status + @retval FALSE Success + @retval TRUE Out-of-memory error */ bool set_db(const char *new_db, size_t new_db_len) { @@ -1821,6 +1837,19 @@ public: db_length= db ? new_db_len : 0; return new_db && !db; } + + /** + Set the current database; use shallow copy of C-string. + + @param new_db a pointer to the new database name. + @param new_db_len length of the new database name. + + @note This operation just sets {thd->db, thd->db_length}. Switching the + current database usually involves other actions, like switching other + database attributes including security context. In the future, this + operation will be made private and more convenient interface will be + provided. + */ void reset_db(char *new_db, size_t new_db_len) { db= new_db; diff --git a/sql/sql_db.cc b/sql/sql_db.cc index 23e18f85a3c..207c48b45f0 100644 --- a/sql/sql_db.cc +++ b/sql/sql_db.cc @@ -39,6 +39,10 @@ static long mysql_rm_known_files(THD *thd, MY_DIR *dirp, static long mysql_rm_arc_files(THD *thd, MY_DIR *dirp, const char *org_path); static my_bool rm_dir_w_symlink(const char *org_path, my_bool send_error); +static void mysql_change_db_impl(THD *thd, + LEX_STRING *new_db_name, + ulong new_db_access, + CHARSET_INFO *new_db_charset); /* Database lock hash */ @@ -988,7 +992,7 @@ exit: it to 0. */ if (thd->db && !strcmp(thd->db, db)) - thd->set_db(NULL, 0); + mysql_change_db_impl(thd, NULL, 0, thd->variables.collation_server); VOID(pthread_mutex_unlock(&LOCK_mysql_create_db)); start_waiting_global_read_lock(thd); exit2: @@ -1347,21 +1351,48 @@ static void mysql_change_db_impl(THD *thd, /** - @brief Change the current database. + @brief Change the current database and its attributes. @param thd thread handle @param new_db_name database name - @param force_switch if this flag is set (TRUE), mysql_change_db() will - switch to NULL db if the specified database is not - available anymore. Corresponding warning will be - thrown in this case. This flag is used to change - database in stored-routine-execution code. + @param force_switch if force_switch is FALSE, then the operation will fail if - @details Check that the database name corresponds to a valid and existent - database, check access rights (unless called with no_access_check), and - set the current database. This function is called to change the current - database upon user request (COM_CHANGE_DB command) or temporarily, to - execute a stored routine. + - new_db_name is NULL or empty; + + - OR new database name is invalid + (check_db_name() failed); + + - OR user has no privilege on the new database; + + - OR new database does not exist; + + if force_switch is TRUE, then + + - if new_db_name is NULL or empty, the current + database will be NULL, @@collation_database will + be set to @@collation_server, the operation will + succeed. + + - if new database name is invalid + (check_db_name() failed), the current database + will be NULL, @@collation_database will be set to + @@collation_server, but the operation will fail; + + - user privileges will not be checked + (THD::db_access however is updated); + + TODO: is this really the intention? + (see sp-security.test). + + - if new database does not exist,the current database + will be NULL, @@collation_database will be set to + @@collation_server, a warning will be thrown, the + operation will succeed. + + @details The function checks that the database name corresponds to a + valid and existent database, checks access rights and changes the current + database with database attributes (@@collation_database session variable, + THD::db_access). This function is not the only way to switch the database that is currently employed. When the replication slave thread switches the @@ -1398,8 +1429,13 @@ bool mysql_change_db(THD *thd, const LEX_STRING *new_db_name, bool force_switch) if (force_switch) { /* - This can only happen when we restore the old db in THD after - execution of a routine is complete. Change db to NULL. + This can happen only if we're switching the current database back + after loading stored program. The thing is that loading of stored + program can happen when there is no current database. + + TODO: actually, new_db_name and new_db_name->str seem to be always + non-NULL. In case of stored program, new_db_name->str == "" and + new_db_name->length == 0. */ mysql_change_db_impl(thd, NULL, 0, thd->variables.collation_server); @@ -1417,7 +1453,7 @@ bool mysql_change_db(THD *thd, const LEX_STRING *new_db_name, bool force_switch) if (my_strcasecmp(system_charset_info, new_db_name->str, INFORMATION_SCHEMA_NAME.str) == 0) { - /* Switch database to INFORMATION_SCHEMA. */ + /* Switch the current database to INFORMATION_SCHEMA. */ mysql_change_db_impl(thd, &INFORMATION_SCHEMA_NAME, SELECT_ACL, system_charset_info); @@ -1444,8 +1480,8 @@ bool mysql_change_db(THD *thd, const LEX_STRING *new_db_name, bool force_switch) even if we are called from sp_head::execute(). It's next to impossible however to get this error when we are called - from sp_head::execute(). But let's switch database to NULL in this case - to be sure. + from sp_head::execute(). But let's switch the current database to NULL + in this case to be sure. */ if (check_db_name(&new_db_file_name)) @@ -1454,10 +1490,8 @@ bool mysql_change_db(THD *thd, const LEX_STRING *new_db_name, bool force_switch) my_free(new_db_file_name.str, MYF(0)); if (force_switch) - { - /* Change db to NULL. */ mysql_change_db_impl(thd, NULL, 0, thd->variables.collation_server); - } + DBUG_RETURN(TRUE); } @@ -1492,6 +1526,8 @@ bool mysql_change_db(THD *thd, const LEX_STRING *new_db_name, bool force_switch) { if (force_switch) { + /* Throw a warning and free new_db_file_name. */ + push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_NOTE, ER_BAD_DB_ERROR, ER(ER_BAD_DB_ERROR), new_db_file_name.str); @@ -1502,12 +1538,19 @@ bool mysql_change_db(THD *thd, const LEX_STRING *new_db_name, bool force_switch) mysql_change_db_impl(thd, NULL, 0, thd->variables.collation_server); + /* The operation succeed. */ + DBUG_RETURN(FALSE); } else { + /* Report an error and free new_db_file_name. */ + my_error(ER_BAD_DB_ERROR, MYF(0), new_db_file_name.str); my_free(new_db_file_name.str, MYF(0)); + + /* The operation failed. */ + DBUG_RETURN(TRUE); } } @@ -1820,7 +1863,7 @@ bool mysql_rename_db(THD *thd, LEX_STRING *old_db, LEX_STRING *new_db) /* Step9: Let's do "use newdb" if we renamed the current database */ if (change_to_newdb) - error|= mysql_change_db(thd, new_db, 0); + error|= mysql_change_db(thd, new_db, FALSE); exit: pthread_mutex_lock(&LOCK_lock_db); From 9cedd882e7027afeca5ea190e41df96a752194c5 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 30 Aug 2007 21:19:05 +0400 Subject: [PATCH 170/194] Add -Wno-unused to --warning-mode=pedantic, otherwise sql/ compilation generated so many warnings that the mode was unusable. --- BUILD/SETUP.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BUILD/SETUP.sh b/BUILD/SETUP.sh index dc439e68c45..e940f7a3371 100755 --- a/BUILD/SETUP.sh +++ b/BUILD/SETUP.sh @@ -105,7 +105,7 @@ if [ "x$warning_mode" != "xpedantic" ]; then # Added unless --with-debug=full debug_extra_cflags="-O1 -Wuninitialized" else - warnings="-W -Wall -ansi -pedantic -Wno-long-long -D_POSIX_SOURCE" + warnings="-W -Wall -ansi -pedantic -Wno-long-long -Wno-unused -D_POSIX_SOURCE" c_warnings="$warnings" cxx_warnings="$warnings -std=c++98" # NOTE: warning mode should not influence optimize/debug mode. From 41a2f1c8de766224771d31884b3ca3b067f0a50e Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 30 Aug 2007 12:57:05 -0600 Subject: [PATCH 171/194] Bug#28779 (mysql_query() allows execution of statements with unbalanced comments) This change set is for 5.1 (manually merged) Before this fix, the server would accept queries that contained comments, even when the comments were not properly closed with a '*' '/' marker. For example, select 1 /* + 2 would be accepted as select 1 /* + 2 */ and executed as select 1 With this fix, the server now rejects queries with unclosed comments as syntax errors. Both regular comments ('/' '*') and special comments ('/' '*' '!') must be closed with '*' '/' to be parsed correctly. mysql-test/r/comments.result: Unbalanced comments are a syntax error. mysql-test/t/comments.test: Unbalanced comments are a syntax error. sql/sql_lex.cc: Unbalanced comments are a syntax error. --- mysql-test/r/comments.result | 15 +++++++++++++ mysql-test/t/comments.test | 31 ++++++++++++++++++++++++++ sql/sql_lex.cc | 43 +++++++++++++++++++++++++++++------- 3 files changed, 81 insertions(+), 8 deletions(-) diff --git a/mysql-test/r/comments.result b/mysql-test/r/comments.result index 98921c561d1..d8ac68e2468 100644 --- a/mysql-test/r/comments.result +++ b/mysql-test/r/comments.result @@ -36,3 +36,18 @@ select 1/*!999992*/; select 1 + /*!00000 2 */ + 3 /*!99999 noise*/ + 4; 1 + 2 + 3 + 4 10 +drop table if exists table_28779; +create table table_28779 (a int); +prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*' AND b = 'bar';"; +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 '/*' AND b = 'bar'' at line 1 +prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*' AND b = 'bar';*"; +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 '/*' AND b = 'bar';*' at line 1 +prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*! AND 2=2;"; +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 '' at line 1 +prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*! AND 2=2;*"; +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 ';*' at line 1 +prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*!98765' AND b = 'bar';"; +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 '/*!98765' AND b = 'bar'' at line 1 +prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*!98765' AND b = 'bar';*"; +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 '/*!98765' AND b = 'bar';*' at line 1 +drop table table_28779; diff --git a/mysql-test/t/comments.test b/mysql-test/t/comments.test index 8ae6ba5779e..3a18a8bd483 100644 --- a/mysql-test/t/comments.test +++ b/mysql-test/t/comments.test @@ -34,3 +34,34 @@ select 1/*!999992*/; select 1 + /*!00000 2 */ + 3 /*!99999 noise*/ + 4; +# +# Bug#28779 (mysql_query() allows execution of statements with unbalanced +# comments) +# + +--disable_warnings +drop table if exists table_28779; +--enable_warnings + +create table table_28779 (a int); + +--error 1064 +prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*' AND b = 'bar';"; + +--error 1064 +prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*' AND b = 'bar';*"; + +--error 1064 +prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*! AND 2=2;"; + +--error 1064 +prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*! AND 2=2;*"; + +--error 1064 +prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*!98765' AND b = 'bar';"; + +--error 1064 +prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*!98765' AND b = 'bar';*"; + +drop table table_28779; + diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index 7fe2ed04d51..02837b5f0df 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -719,6 +719,7 @@ static inline uint int_token(const char *str,uint length) int MYSQLlex(void *arg, void *yythd) { reg1 uchar c; + bool comment_closed; int tokval, result_state; uint length; enum my_lex_states state; @@ -1211,7 +1212,10 @@ int MYSQLlex(void *arg, void *yythd) /* The special comment format is very strict: '/' '*' '!', followed by exactly - 2 digits (major), then 3 digits (minor). + 1 digit (major), 2 digits (minor), then 2 digits (dot). + 32302 -> 3.23.02 + 50032 -> 5.0.32 + 50114 -> 5.1.14 */ char version_str[6]; version_str[0]= lip->yyPeekn(0); @@ -1230,7 +1234,7 @@ int MYSQLlex(void *arg, void *yythd) ulong version; version=strtol(version_str, NULL, 10); - /* Accept 'M' 'M' 'm' 'm' 'm' */ + /* Accept 'M' 'm' 'm' 'd' 'd' */ lip->yySkipn(5); if (version <= MYSQL_VERSION_ID) @@ -1254,16 +1258,36 @@ int MYSQLlex(void *arg, void *yythd) lip->yySkip(); // Accept / lip->yySkip(); // Accept * } - - while (! lip->eof() && - ((c=lip->yyGet()) != '*' || lip->yyPeek() != '/')) + /* + Discard: + - regular '/' '*' comments, + - special comments '/' '*' '!' for a future version, + by scanning until we find a closing '*' '/' marker. + Note: There is no such thing as nesting comments, + the first '*' '/' sequence seen will mark the end. + */ + comment_closed= FALSE; + while (! lip->eof()) { - if (c == '\n') + c= lip->yyGet(); + if (c == '*') + { + if (lip->yyPeek() == '/') + { + lip->yySkip(); + comment_closed= TRUE; + state = MY_LEX_START; + break; + } + } + else if (c == '\n') lip->yylineno++; } - if (! lip->eof()) - lip->yySkip(); // remove last '/' + /* Unbalanced comments with a missing '*' '/' are a syntax error */ + if (! comment_closed) + return (ABORT_SYM); state = MY_LEX_START; // Try again + lip->in_comment= NO_COMMENT; lip->set_echo(TRUE); break; case MY_LEX_END_LONG_COMMENT: @@ -1315,6 +1339,9 @@ int MYSQLlex(void *arg, void *yythd) lip->set_echo(FALSE); lip->yySkip(); lip->set_echo(TRUE); + /* Unbalanced comments with a missing '*' '/' are a syntax error */ + if (lip->in_comment != NO_COMMENT) + return (ABORT_SYM); lip->next_state=MY_LEX_END; // Mark for next loop return(END_OF_INPUT); } From bccbd5c493a5350a7dd36e0349f2ad6d05863e89 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 30 Aug 2007 16:11:53 -0300 Subject: [PATCH 172/194] Bug#28587 SELECT is blocked by INSERT waiting on read lock, even with low_priority_updates The problem is that a SELECT on one thread is blocked by INSERT ... ON DUPLICATE KEY UPDATE on another thread even when low_priority_updates is activated. The solution is to possibly downgrade the lock type to the setting of low_priority_updates if the INSERT cannot be concurrent. sql/sql_insert.cc: Possibly downgrade lock type to the the setting of low_priority_updates if if the INSERT cannot be concurrent. --- sql/sql_insert.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index bd21d929291..f07af393070 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -417,7 +417,7 @@ void upgrade_lock_type(THD *thd, thr_lock_type *lock_type, if (duplic == DUP_UPDATE || duplic == DUP_REPLACE && *lock_type == TL_WRITE_CONCURRENT_INSERT) { - *lock_type= TL_WRITE; + *lock_type= TL_WRITE_DEFAULT; return; } From 97844e982b8e75752bf145392982a9c8562cd125 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 30 Aug 2007 16:19:23 -0300 Subject: [PATCH 173/194] Post-merge test case with wait_condition for Bug#28587 mysql-test/r/insert_update.result: Post-merge: add test case result for Bug#28587. mysql-test/t/insert_update.test: Post-merge: add test case for Bug#28587. --- mysql-test/r/insert_update.result | 19 +++++++++++++++++ mysql-test/t/insert_update.test | 35 +++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/mysql-test/r/insert_update.result b/mysql-test/r/insert_update.result index 704cf444681..3aec9594d36 100644 --- a/mysql-test/r/insert_update.result +++ b/mysql-test/r/insert_update.result @@ -407,3 +407,22 @@ select if( @stamp1 = @stamp2, "correct", "wrong"); if( @stamp1 = @stamp2, "correct", "wrong") correct drop table t1; +connection: default +set low_priority_updates=1; +drop table if exists t1; +create table t1 (a int, b int, unique key t1$a (a)); +lock table t1 read; +connection: update +set low_priority_updates=1; +show variables like 'low_priority_updates'; +Variable_name Value +low_priority_updates ON +insert into t1 values (1, 2) ON DUPLICATE KEY UPDATE b = 2;; +connection: select +select * from t1; +a b +connection: default +select * from t1; +a b +drop table t1; +set low_priority_updates=default; diff --git a/mysql-test/t/insert_update.test b/mysql-test/t/insert_update.test index 67f21731afe..aad241e031f 100644 --- a/mysql-test/t/insert_update.test +++ b/mysql-test/t/insert_update.test @@ -306,3 +306,38 @@ insert into t1(f1) values(1) on duplicate key update f1=1; select @stamp2:=f2 from t1; select if( @stamp1 = @stamp2, "correct", "wrong"); drop table t1; + +# +# Bug#28587 SELECT is blocked by INSERT waiting on read lock, even with low_priority_updates +# +--echo connection: default +set low_priority_updates=1; +--disable_warnings +drop table if exists t1; +--enable_warnings +create table t1 (a int, b int, unique key t1$a (a)); +lock table t1 read; +connect (update,localhost,root,,); +connection update; +--echo connection: update +set low_priority_updates=1; +show variables like 'low_priority_updates'; +let $ID= `select connection_id()`; +--send insert into t1 values (1, 2) ON DUPLICATE KEY UPDATE b = 2; +connection default; +# we must wait till the insert opens and locks the table +let $wait_condition= + select count(*) = 1 from information_schema.processlist + where state = "Locked" and id = $ID; +--source include/wait_condition.inc +connect (select,localhost,root,,); +--echo connection: select +select * from t1; +connection default; +--echo connection: default +select * from t1; +connection default; +disconnect update; +disconnect select; +drop table t1; +set low_priority_updates=default; From 333a28bc76917f07847e80acb98bf76f7b582a15 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 30 Aug 2007 23:57:39 -0600 Subject: [PATCH 174/194] Bug #27014: Imperfect error/warning message for STR_TO_DATE for invalid datetime value Fix name of function in warning message. sql/item_timefunc.cc: Fix error message in extract_date_time(); ("str_to_time" -> "str_to_date") --- sql/item_timefunc.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/item_timefunc.cc b/sql/item_timefunc.cc index 0af98b5d987..2fedb4b72b6 100644 --- a/sql/item_timefunc.cc +++ b/sql/item_timefunc.cc @@ -597,7 +597,7 @@ err: strmake(buff, val_begin, min(length, sizeof(buff)-1)); push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_ERROR, ER_WRONG_VALUE_FOR_TYPE, ER(ER_WRONG_VALUE_FOR_TYPE), - date_time_type, buff, "str_to_time"); + date_time_type, buff, "str_to_date"); } DBUG_RETURN(1); } From ee040ef2b762d1a780a53bc347657484335b1a4c Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 31 Aug 2007 10:19:52 +0400 Subject: [PATCH 175/194] Never access thd->ha_data directly, use getters/setters from the plugin API instead. This is a pre-requisite of the fix for Bug 12713, which changes the data type of thd->ha_data from void * to struct Ha_data. include/mysql/plugin.h: Provide accessors to thd->ha_data for simple and robust code. sql/ha_ndbcluster_binlog.h: Use getters/setters of thd->ha_data, instead of direct access. sql/handler.cc: Use a getter of thd->ha_data instead of direct access. sql/log.cc: Use getters/setters of thd->ha_data, instead of direct access. sql/rpl_utility.h: Fix a compilation warning (declaration order must match initialization order in constructor). storage/federated/ha_federated.cc: Use interface accessors to thd->ha_data, instead of direct access. --- include/mysql/plugin.h | 23 ++++++++++++++++ sql/ha_ndbcluster_binlog.h | 6 ++-- sql/handler.cc | 4 +-- sql/log.cc | 46 +++++++++++++++---------------- sql/rpl_utility.h | 2 +- storage/federated/ha_federated.cc | 12 ++++---- 6 files changed, 59 insertions(+), 34 deletions(-) diff --git a/include/mysql/plugin.h b/include/mysql/plugin.h index 61ed7be738f..50ec051d111 100644 --- a/include/mysql/plugin.h +++ b/include/mysql/plugin.h @@ -785,5 +785,28 @@ void mysql_query_cache_invalidate4(MYSQL_THD thd, } #endif +#ifdef __cplusplus +/** + Provide a handler data getter to simplify coding +*/ +inline +void * +thd_get_ha_data(const MYSQL_THD thd, const struct handlerton *hton) +{ + return *thd_ha_data(thd, hton); +} + +/** + Provide a handler data setter to simplify coding +*/ +inline +void +thd_set_ha_data(const MYSQL_THD thd, const struct handlerton *hton, + const void *ha_data) +{ + *thd_ha_data(thd, hton)= (void*) ha_data; +} +#endif + #endif diff --git a/sql/ha_ndbcluster_binlog.h b/sql/ha_ndbcluster_binlog.h index b5b8d0d9745..53852028f08 100644 --- a/sql/ha_ndbcluster_binlog.h +++ b/sql/ha_ndbcluster_binlog.h @@ -216,10 +216,12 @@ inline void free_share(NDB_SHARE **share, bool have_lock= FALSE) inline Thd_ndb * -get_thd_ndb(THD *thd) { return (Thd_ndb *) thd->ha_data[ndbcluster_hton->slot]; } +get_thd_ndb(THD *thd) +{ return (Thd_ndb *) thd_get_ha_data(thd, ndbcluster_hton); } inline void -set_thd_ndb(THD *thd, Thd_ndb *thd_ndb) { thd->ha_data[ndbcluster_hton->slot]= thd_ndb; } +set_thd_ndb(THD *thd, Thd_ndb *thd_ndb) +{ thd_set_ha_data(thd, ndbcluster_hton, thd_ndb); } Ndb* check_ndb_in_thd(THD* thd); diff --git a/sql/handler.cc b/sql/handler.cc index 3e9524e9821..0479b3b1443 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -563,7 +563,7 @@ static my_bool closecon_handlerton(THD *thd, plugin_ref plugin, be rolled back already */ if (hton->state == SHOW_OPTION_YES && hton->close_connection && - thd->ha_data[hton->slot]) + thd_get_ha_data(thd, hton)) hton->close_connection(hton, thd); return FALSE; } @@ -1511,7 +1511,7 @@ void handler::ha_statistic_increment(ulong SSV::*offset) const void **handler::ha_data(THD *thd) const { - return (void **) thd->ha_data + ht->slot; + return thd_ha_data(thd, ht); } THD *handler::ha_thd(void) const diff --git a/sql/log.cc b/sql/log.cc index 3686459fedf..6296c7ffaf3 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -1215,10 +1215,10 @@ binlog_trans_log_savepos(THD *thd, my_off_t *pos) { DBUG_ENTER("binlog_trans_log_savepos"); DBUG_ASSERT(pos != NULL); - if (thd->ha_data[binlog_hton->slot] == NULL) + if (thd_get_ha_data(thd, binlog_hton) == NULL) thd->binlog_setup_trx_data(); binlog_trx_data *const trx_data= - (binlog_trx_data*) thd->ha_data[binlog_hton->slot]; + (binlog_trx_data*) thd_get_ha_data(thd, binlog_hton); DBUG_ASSERT(mysql_bin_log.is_open()); *pos= trx_data->position(); DBUG_PRINT("return", ("*pos: %lu", (ulong) *pos)); @@ -1247,12 +1247,12 @@ binlog_trans_log_truncate(THD *thd, my_off_t pos) DBUG_ENTER("binlog_trans_log_truncate"); DBUG_PRINT("enter", ("pos: %lu", (ulong) pos)); - DBUG_ASSERT(thd->ha_data[binlog_hton->slot] != NULL); + DBUG_ASSERT(thd_get_ha_data(thd, binlog_hton) != NULL); /* Only true if binlog_trans_log_savepos() wasn't called before */ DBUG_ASSERT(pos != ~(my_off_t) 0); binlog_trx_data *const trx_data= - (binlog_trx_data*) thd->ha_data[binlog_hton->slot]; + (binlog_trx_data*) thd_get_ha_data(thd, binlog_hton); trx_data->truncate(pos); DBUG_VOID_RETURN; } @@ -1283,9 +1283,9 @@ int binlog_init(void *p) static int binlog_close_connection(handlerton *hton, THD *thd) { binlog_trx_data *const trx_data= - (binlog_trx_data*) thd->ha_data[binlog_hton->slot]; + (binlog_trx_data*) thd_get_ha_data(thd, binlog_hton); DBUG_ASSERT(trx_data->empty()); - thd->ha_data[binlog_hton->slot]= 0; + thd_set_ha_data(thd, binlog_hton, NULL); trx_data->~binlog_trx_data(); my_free((uchar*)trx_data, MYF(0)); return 0; @@ -1408,7 +1408,7 @@ static int binlog_commit(handlerton *hton, THD *thd, bool all) { DBUG_ENTER("binlog_commit"); binlog_trx_data *const trx_data= - (binlog_trx_data*) thd->ha_data[binlog_hton->slot]; + (binlog_trx_data*) thd_get_ha_data(thd, binlog_hton); if (trx_data->empty()) { @@ -1435,7 +1435,7 @@ static int binlog_rollback(handlerton *hton, THD *thd, bool all) DBUG_ENTER("binlog_rollback"); int error=0; binlog_trx_data *const trx_data= - (binlog_trx_data*) thd->ha_data[binlog_hton->slot]; + (binlog_trx_data*) thd_get_ha_data(thd, binlog_hton); if (trx_data->empty()) { trx_data->reset(); @@ -3252,23 +3252,22 @@ int THD::binlog_setup_trx_data() { DBUG_ENTER("THD::binlog_setup_trx_data"); binlog_trx_data *trx_data= - (binlog_trx_data*) ha_data[binlog_hton->slot]; + (binlog_trx_data*) thd_get_ha_data(this, binlog_hton); if (trx_data) DBUG_RETURN(0); // Already set up - ha_data[binlog_hton->slot]= trx_data= - (binlog_trx_data*) my_malloc(sizeof(binlog_trx_data), MYF(MY_ZEROFILL)); + trx_data= (binlog_trx_data*) my_malloc(sizeof(binlog_trx_data), MYF(MY_ZEROFILL)); if (!trx_data || open_cached_file(&trx_data->trans_log, mysql_tmpdir, LOG_PREFIX, binlog_cache_size, MYF(MY_WME))) { my_free((uchar*)trx_data, MYF(MY_ALLOW_ZERO_PTR)); - ha_data[binlog_hton->slot]= 0; DBUG_RETURN(1); // Didn't manage to set it up } + thd_set_ha_data(this, binlog_hton, trx_data); - trx_data= new (ha_data[binlog_hton->slot]) binlog_trx_data; + trx_data= new (thd_get_ha_data(this, binlog_hton)) binlog_trx_data; DBUG_RETURN(0); } @@ -3304,7 +3303,7 @@ int THD::binlog_setup_trx_data() void THD::binlog_start_trans_and_stmt() { - binlog_trx_data *trx_data= (binlog_trx_data*) ha_data[binlog_hton->slot]; + binlog_trx_data *trx_data= (binlog_trx_data*) thd_get_ha_data(this, binlog_hton); DBUG_ENTER("binlog_start_trans_and_stmt"); DBUG_PRINT("enter", ("trx_data: 0x%lx trx_data->before_stmt_pos: %lu", (long) trx_data, @@ -3324,7 +3323,7 @@ THD::binlog_start_trans_and_stmt() void THD::binlog_set_stmt_begin() { binlog_trx_data *trx_data= - (binlog_trx_data*) ha_data[binlog_hton->slot]; + (binlog_trx_data*) thd_get_ha_data(this, binlog_hton); /* The call to binlog_trans_log_savepos() might create the trx_data @@ -3334,14 +3333,15 @@ void THD::binlog_set_stmt_begin() { */ my_off_t pos= 0; binlog_trans_log_savepos(this, &pos); - trx_data= (binlog_trx_data*) ha_data[binlog_hton->slot]; + trx_data= (binlog_trx_data*) thd_get_ha_data(this, binlog_hton); trx_data->before_stmt_pos= pos; } int THD::binlog_flush_transaction_cache() { DBUG_ENTER("binlog_flush_transaction_cache"); - binlog_trx_data *trx_data= (binlog_trx_data*) ha_data[binlog_hton->slot]; + binlog_trx_data *trx_data= (binlog_trx_data*) + thd_get_ha_data(this, binlog_hton); DBUG_PRINT("enter", ("trx_data=0x%lu", (ulong) trx_data)); if (trx_data) DBUG_PRINT("enter", ("trx_data->before_stmt_pos=%lu", @@ -3404,7 +3404,7 @@ Rows_log_event* THD::binlog_get_pending_rows_event() const { binlog_trx_data *const trx_data= - (binlog_trx_data*) ha_data[binlog_hton->slot]; + (binlog_trx_data*) thd_get_ha_data(this, binlog_hton); /* This is less than ideal, but here's the story: If there is no trx_data, prepare_pending_rows_event() has never been called @@ -3417,11 +3417,11 @@ THD::binlog_get_pending_rows_event() const void THD::binlog_set_pending_rows_event(Rows_log_event* ev) { - if (ha_data[binlog_hton->slot] == NULL) + if (thd_get_ha_data(this, binlog_hton) == NULL) binlog_setup_trx_data(); binlog_trx_data *const trx_data= - (binlog_trx_data*) ha_data[binlog_hton->slot]; + (binlog_trx_data*) thd_get_ha_data(this, binlog_hton); DBUG_ASSERT(trx_data); trx_data->set_pending(ev); @@ -3444,7 +3444,7 @@ MYSQL_BIN_LOG::flush_and_set_pending_rows_event(THD *thd, int error= 0; binlog_trx_data *const trx_data= - (binlog_trx_data*) thd->ha_data[binlog_hton->slot]; + (binlog_trx_data*) thd_get_ha_data(thd, binlog_hton); DBUG_ASSERT(trx_data); @@ -3595,7 +3595,7 @@ bool MYSQL_BIN_LOG::write(Log_event *event_info) goto err; binlog_trx_data *const trx_data= - (binlog_trx_data*) thd->ha_data[binlog_hton->slot]; + (binlog_trx_data*) thd_get_ha_data(thd, binlog_hton); IO_CACHE *trans_log= &trx_data->trans_log; my_off_t trans_log_pos= my_b_tell(trans_log); if (event_info->get_cache_stmt() || trans_log_pos != 0) @@ -5032,7 +5032,7 @@ int TC_LOG_BINLOG::log_xid(THD *thd, my_xid xid) DBUG_ENTER("TC_LOG_BINLOG::log"); Xid_log_event xle(thd, xid); binlog_trx_data *trx_data= - (binlog_trx_data*) thd->ha_data[binlog_hton->slot]; + (binlog_trx_data*) thd_get_ha_data(thd, binlog_hton); /* We always commit the entire transaction when writing an XID. Also note that the return value is inverted. diff --git a/sql/rpl_utility.h b/sql/rpl_utility.h index eac3d14dfc6..62b2ca23918 100644 --- a/sql/rpl_utility.h +++ b/sql/rpl_utility.h @@ -241,8 +241,8 @@ public: private: ulong m_size; // Number of elements in the types array field_type *m_type; // Array of type descriptors - uint16 *m_field_metadata; uint m_field_metadata_size; + uint16 *m_field_metadata; uchar *m_null_bits; uchar *m_memory; }; diff --git a/storage/federated/ha_federated.cc b/storage/federated/ha_federated.cc index ded0ce88484..edcd1127dbd 100644 --- a/storage/federated/ha_federated.cc +++ b/storage/federated/ha_federated.cc @@ -3169,7 +3169,7 @@ int ha_federated::external_lock(THD *thd, int lock_type) #ifdef XXX_SUPERCEDED_BY_WL2952 if (lock_type != F_UNLCK) { - ha_federated *trx= (ha_federated *)thd->ha_data[ht->slot]; + ha_federated *trx= (ha_federated *)thd_get_ha_data(thd, ht); DBUG_PRINT("info",("federated not lock F_UNLCK")); if (!(thd->options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))) @@ -3200,7 +3200,7 @@ int ha_federated::external_lock(THD *thd, int lock_type) DBUG_PRINT("info", ("error setting autocommit FALSE: %d", error)); DBUG_RETURN(error); } - thd->ha_data[ht->slot]= this; + thd_set_ha_data(thd, ht, this); trans_register_ha(thd, TRUE, ht); /* Send a lock table to the remote end. @@ -3230,7 +3230,7 @@ int ha_federated::external_lock(THD *thd, int lock_type) static int federated_commit(handlerton *hton, THD *thd, bool all) { int return_val= 0; - ha_federated *trx= (ha_federated *)thd->ha_data[hton->slot]; + ha_federated *trx= (ha_federated *) thd_get_ha_data(thd, hton); DBUG_ENTER("federated_commit"); if (all) @@ -3245,7 +3245,7 @@ static int federated_commit(handlerton *hton, THD *thd, bool all) if (error && !return_val) return_val= error; } - thd->ha_data[hton->slot]= NULL; + thd_set_ha_data(thd, hton, NULL); } DBUG_PRINT("info", ("error val: %d", return_val)); @@ -3256,7 +3256,7 @@ static int federated_commit(handlerton *hton, THD *thd, bool all) static int federated_rollback(handlerton *hton, THD *thd, bool all) { int return_val= 0; - ha_federated *trx= (ha_federated *)thd->ha_data[hton->slot]; + ha_federated *trx= (ha_federated *)thd_get_ha_data(thd, hton); DBUG_ENTER("federated_rollback"); if (all) @@ -3271,7 +3271,7 @@ static int federated_rollback(handlerton *hton, THD *thd, bool all) if (error && !return_val) return_val= error; } - thd->ha_data[hton->slot]= NULL; + thd_set_ha_data(thd, hton, NULL); } DBUG_PRINT("info", ("error val: %d", return_val)); From 871172dd874514f20a5f643df6f1c877ec051b13 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 31 Aug 2007 01:28:42 -0600 Subject: [PATCH 176/194] Fix test results for bug #27014 --- mysql-test/r/date_formats.result | 64 ++++++++++++++++---------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/mysql-test/r/date_formats.result b/mysql-test/r/date_formats.result index 11717679b42..c1c8b7b060e 100644 --- a/mysql-test/r/date_formats.result +++ b/mysql-test/r/date_formats.result @@ -80,7 +80,7 @@ select STR_TO_DATE('2004.12.12 22.30.61','%Y.%m.%d %T'); STR_TO_DATE('2004.12.12 22.30.61','%Y.%m.%d %T') NULL Warnings: -Error 1411 Incorrect time value: '22.30.61' for function str_to_time +Error 1411 Incorrect time value: '22.30.61' for function str_to_date create table t1 (date char(30), format char(30) not null); insert into t1 values ('2003-01-02 10:11:12', '%Y-%m-%d %H:%i:%S'), @@ -352,21 +352,21 @@ Tuesday 52 2001 %W %u %x NULL 7 53 1998 %w %u %Y NULL NULL %m.%d.%Y NULL Warnings: -Error 1411 Incorrect datetime value: '2003-01-02 10:11:12 PM' for function str_to_time -Error 1411 Incorrect datetime value: '2003-01-02 10:11:12.123456' for function str_to_time -Error 1411 Incorrect datetime value: '2003-01-02 10:11:12AM' for function str_to_time -Error 1411 Incorrect datetime value: '2003-01-02 10:11:12AN' for function str_to_time -Error 1411 Incorrect datetime value: '2003-01-02 10:11:12 PM' for function str_to_time -Error 1411 Incorrect datetime value: '10:20:10AM' for function str_to_time -Error 1411 Incorrect datetime value: '15 Septembei 2001' for function str_to_time -Error 1411 Incorrect datetime value: '15 Ju 2001' for function str_to_time -Error 1411 Incorrect datetime value: 'Sund 15 MA' for function str_to_time -Error 1411 Incorrect datetime value: 'Thursdai 12 1998' for function str_to_time -Error 1411 Incorrect datetime value: 'Sunday 01 2001' for function str_to_time -Error 1411 Incorrect datetime value: 'Tuesday 52 2001' for function str_to_time -Error 1411 Incorrect datetime value: 'Tuesday 52 2001' for function str_to_time -Error 1411 Incorrect datetime value: 'Tuesday 52 2001' for function str_to_time -Error 1411 Incorrect datetime value: '7 53 1998' for function str_to_time +Error 1411 Incorrect datetime value: '2003-01-02 10:11:12 PM' for function str_to_date +Error 1411 Incorrect datetime value: '2003-01-02 10:11:12.123456' for function str_to_date +Error 1411 Incorrect datetime value: '2003-01-02 10:11:12AM' for function str_to_date +Error 1411 Incorrect datetime value: '2003-01-02 10:11:12AN' for function str_to_date +Error 1411 Incorrect datetime value: '2003-01-02 10:11:12 PM' for function str_to_date +Error 1411 Incorrect datetime value: '10:20:10AM' for function str_to_date +Error 1411 Incorrect datetime value: '15 Septembei 2001' for function str_to_date +Error 1411 Incorrect datetime value: '15 Ju 2001' for function str_to_date +Error 1411 Incorrect datetime value: 'Sund 15 MA' for function str_to_date +Error 1411 Incorrect datetime value: 'Thursdai 12 1998' for function str_to_date +Error 1411 Incorrect datetime value: 'Sunday 01 2001' for function str_to_date +Error 1411 Incorrect datetime value: 'Tuesday 52 2001' for function str_to_date +Error 1411 Incorrect datetime value: 'Tuesday 52 2001' for function str_to_date +Error 1411 Incorrect datetime value: 'Tuesday 52 2001' for function str_to_date +Error 1411 Incorrect datetime value: '7 53 1998' for function str_to_date select date,format,concat(str_to_date(date, format),'') as con from t1; date format con 2003-01-02 10:11:12 PM %Y-%m-%d %H:%i:%S %p NULL @@ -386,21 +386,21 @@ Tuesday 52 2001 %W %u %x NULL 7 53 1998 %w %u %Y NULL NULL %m.%d.%Y NULL Warnings: -Error 1411 Incorrect datetime value: '2003-01-02 10:11:12 PM' for function str_to_time -Error 1411 Incorrect datetime value: '2003-01-02 10:11:12.123456' for function str_to_time -Error 1411 Incorrect datetime value: '2003-01-02 10:11:12AM' for function str_to_time -Error 1411 Incorrect datetime value: '2003-01-02 10:11:12AN' for function str_to_time -Error 1411 Incorrect datetime value: '2003-01-02 10:11:12 PM' for function str_to_time -Error 1411 Incorrect datetime value: '10:20:10AM' for function str_to_time -Error 1411 Incorrect datetime value: '15 Septembei 2001' for function str_to_time -Error 1411 Incorrect datetime value: '15 Ju 2001' for function str_to_time -Error 1411 Incorrect datetime value: 'Sund 15 MA' for function str_to_time -Error 1411 Incorrect datetime value: 'Thursdai 12 1998' for function str_to_time -Error 1411 Incorrect datetime value: 'Sunday 01 2001' for function str_to_time -Error 1411 Incorrect datetime value: 'Tuesday 52 2001' for function str_to_time -Error 1411 Incorrect datetime value: 'Tuesday 52 2001' for function str_to_time -Error 1411 Incorrect datetime value: 'Tuesday 52 2001' for function str_to_time -Error 1411 Incorrect datetime value: '7 53 1998' for function str_to_time +Error 1411 Incorrect datetime value: '2003-01-02 10:11:12 PM' for function str_to_date +Error 1411 Incorrect datetime value: '2003-01-02 10:11:12.123456' for function str_to_date +Error 1411 Incorrect datetime value: '2003-01-02 10:11:12AM' for function str_to_date +Error 1411 Incorrect datetime value: '2003-01-02 10:11:12AN' for function str_to_date +Error 1411 Incorrect datetime value: '2003-01-02 10:11:12 PM' for function str_to_date +Error 1411 Incorrect datetime value: '10:20:10AM' for function str_to_date +Error 1411 Incorrect datetime value: '15 Septembei 2001' for function str_to_date +Error 1411 Incorrect datetime value: '15 Ju 2001' for function str_to_date +Error 1411 Incorrect datetime value: 'Sund 15 MA' for function str_to_date +Error 1411 Incorrect datetime value: 'Thursdai 12 1998' for function str_to_date +Error 1411 Incorrect datetime value: 'Sunday 01 2001' for function str_to_date +Error 1411 Incorrect datetime value: 'Tuesday 52 2001' for function str_to_date +Error 1411 Incorrect datetime value: 'Tuesday 52 2001' for function str_to_date +Error 1411 Incorrect datetime value: 'Tuesday 52 2001' for function str_to_date +Error 1411 Incorrect datetime value: '7 53 1998' for function str_to_date truncate table t1; insert into t1 values ('10:20:10AM', '%h:%i:%s'), @@ -440,7 +440,7 @@ select str_to_date('15-01-2001 12:59:59', GET_FORMAT(DATE,'USA')); str_to_date('15-01-2001 12:59:59', GET_FORMAT(DATE,'USA')) NULL Warnings: -Error 1411 Incorrect datetime value: '15-01-2001 12:59:59' for function str_to_time +Error 1411 Incorrect datetime value: '15-01-2001 12:59:59' for function str_to_date explain extended select makedate(1997,1), addtime("31.12.97 11.59.59.999999 PM", "1 1.1.1.000002"),subtime("31.12.97 11.59.59.999999 PM", "1 1.1.1.000002"),timediff("01.01.97 11:59:59.000001 PM","31.12.95 11:59:59.000002 PM"),cast(str_to_date("15-01-2001 12:59:59", "%d-%m-%Y %H:%i:%S") as TIME), maketime(23,11,12),microsecond("1997-12-31 23:59:59.000001"); id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used From c11de56813209b1bf13720b79d796f65629b8154 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 31 Aug 2007 05:21:12 -0600 Subject: [PATCH 177/194] Correct test result file for bug #27014 --- mysql-test/r/strict.result | 67 +++++++++----------------------------- 1 file changed, 15 insertions(+), 52 deletions(-) diff --git a/mysql-test/r/strict.result b/mysql-test/r/strict.result index c1dccd53035..fc7170bfc2b 100644 --- a/mysql-test/r/strict.result +++ b/mysql-test/r/strict.result @@ -215,11 +215,11 @@ ERROR 22007: Incorrect date value: '2004-10-00 15:30:00' for column 'col1' at ro INSERT INTO t1 (col1) VALUES(STR_TO_DATE('31.9.2004 15.30','%d.%m.%Y %H.%i')); ERROR 22007: Incorrect date value: '2004-09-31 15:30:00' for column 'col1' at row 1 INSERT INTO t1 (col1) VALUES(STR_TO_DATE('32.10.2004 15.30','%d.%m.%Y %H.%i')); -ERROR HY000: Incorrect datetime value: '32.10.2004 15.30' for function str_to_time +ERROR HY000: Incorrect datetime value: '32.10.2004 15.30' for function str_to_date INSERT INTO t1 (col1) VALUES(STR_TO_DATE('29.02.2003 15.30','%d.%m.%Y %H.%i')); ERROR 22007: Incorrect date value: '2003-02-29 15:30:00' for column 'col1' at row 1 INSERT INTO t1 (col1) VALUES(STR_TO_DATE('15.13.2004 15.30','%d.%m.%Y %H.%i')); -ERROR HY000: Incorrect datetime value: '15.13.2004 15.30' for function str_to_time +ERROR HY000: Incorrect datetime value: '15.13.2004 15.30' for function str_to_date INSERT INTO t1 (col1) VALUES(STR_TO_DATE('00.00.0000','%d.%m.%Y')); ERROR 22007: Incorrect date value: '0000-00-00' for column 'col1' at row 1 INSERT INTO t1 (col2) VALUES(STR_TO_DATE('31.10.0000 15.30','%d.%m.%Y %H.%i')); @@ -230,11 +230,11 @@ ERROR 22007: Incorrect datetime value: '2004-10-00 15:30:00' for column 'col2' a INSERT INTO t1 (col2) VALUES(STR_TO_DATE('31.9.2004 15.30','%d.%m.%Y %H.%i')); ERROR 22007: Incorrect datetime value: '2004-09-31 15:30:00' for column 'col2' at row 1 INSERT INTO t1 (col2) VALUES(STR_TO_DATE('32.10.2004 15.30','%d.%m.%Y %H.%i')); -ERROR HY000: Incorrect datetime value: '32.10.2004 15.30' for function str_to_time +ERROR HY000: Incorrect datetime value: '32.10.2004 15.30' for function str_to_date INSERT INTO t1 (col2) VALUES(STR_TO_DATE('29.02.2003 15.30','%d.%m.%Y %H.%i')); ERROR 22007: Incorrect datetime value: '2003-02-29 15:30:00' for column 'col2' at row 1 INSERT INTO t1 (col2) VALUES(STR_TO_DATE('15.13.2004 15.30','%d.%m.%Y %H.%i')); -ERROR HY000: Incorrect datetime value: '15.13.2004 15.30' for function str_to_time +ERROR HY000: Incorrect datetime value: '15.13.2004 15.30' for function str_to_date INSERT INTO t1 (col2) VALUES(STR_TO_DATE('00.00.0000','%d.%m.%Y')); ERROR 22007: Incorrect datetime value: '0000-00-00' for column 'col2' at row 1 INSERT INTO t1 (col3) VALUES(STR_TO_DATE('31.10.0000 15.30','%d.%m.%Y %H.%i')); @@ -246,11 +246,11 @@ ERROR 22007: Incorrect datetime value: '2004-10-00 15:30:00' for column 'col3' a INSERT INTO t1 (col3) VALUES(STR_TO_DATE('31.9.2004 15.30','%d.%m.%Y %H.%i')); ERROR 22007: Incorrect datetime value: '2004-09-31 15:30:00' for column 'col3' at row 1 INSERT INTO t1 (col3) VALUES(STR_TO_DATE('32.10.2004 15.30','%d.%m.%Y %H.%i')); -ERROR HY000: Incorrect datetime value: '32.10.2004 15.30' for function str_to_time +ERROR HY000: Incorrect datetime value: '32.10.2004 15.30' for function str_to_date INSERT INTO t1 (col3) VALUES(STR_TO_DATE('29.02.2003 15.30','%d.%m.%Y %H.%i')); ERROR 22007: Incorrect datetime value: '2003-02-29 15:30:00' for column 'col3' at row 1 INSERT INTO t1 (col3) VALUES(STR_TO_DATE('15.13.2004 15.30','%d.%m.%Y %H.%i')); -ERROR HY000: Incorrect datetime value: '15.13.2004 15.30' for function str_to_time +ERROR HY000: Incorrect datetime value: '15.13.2004 15.30' for function str_to_date INSERT INTO t1 (col3) VALUES(STR_TO_DATE('00.00.0000','%d.%m.%Y')); ERROR 22007: Incorrect datetime value: '0000-00-00' for column 'col3' at row 1 drop table t1; @@ -1070,24 +1070,24 @@ create table t1 (col1 datetime); insert into t1 values(STR_TO_DATE('31.10.2004 15.30 abc','%d.%m.%Y %H.%i')); ERROR 22007: Truncated incorrect datetime value: '31.10.2004 15.30 abc' insert into t1 values(STR_TO_DATE('32.10.2004 15.30','%d.%m.%Y %H.%i')); -ERROR HY000: Incorrect datetime value: '32.10.2004 15.30' for function str_to_time +ERROR HY000: Incorrect datetime value: '32.10.2004 15.30' for function str_to_date insert into t1 values(STR_TO_DATE('2004.12.12 22:22:33 AM','%Y.%m.%d %r')); -ERROR HY000: Incorrect time value: '22:22:33 AM' for function str_to_time +ERROR HY000: Incorrect time value: '22:22:33 AM' for function str_to_date insert into t1 values(STR_TO_DATE('2004.12.12 abc','%Y.%m.%d %T')); -ERROR HY000: Incorrect time value: 'abc' for function str_to_time +ERROR HY000: Incorrect time value: 'abc' for function str_to_date set sql_mode=''; insert into t1 values(STR_TO_DATE('31.10.2004 15.30 abc','%d.%m.%Y %H.%i')); Warnings: Warning 1292 Truncated incorrect datetime value: '31.10.2004 15.30 abc' insert into t1 values(STR_TO_DATE('32.10.2004 15.30','%d.%m.%Y %H.%i')); Warnings: -Error 1411 Incorrect datetime value: '32.10.2004 15.30' for function str_to_time +Error 1411 Incorrect datetime value: '32.10.2004 15.30' for function str_to_date insert into t1 values(STR_TO_DATE('2004.12.12 22:22:33 AM','%Y.%m.%d %r')); Warnings: -Error 1411 Incorrect time value: '22:22:33 AM' for function str_to_time +Error 1411 Incorrect time value: '22:22:33 AM' for function str_to_date insert into t1 values(STR_TO_DATE('2004.12.12 abc','%Y.%m.%d %T')); Warnings: -Error 1411 Incorrect time value: 'abc' for function str_to_time +Error 1411 Incorrect time value: 'abc' for function str_to_date insert into t1 values(STR_TO_DATE('31.10.2004 15.30','%d.%m.%Y %H.%i')); insert into t1 values(STR_TO_DATE('2004.12.12 11:22:33 AM','%Y.%m.%d %r')); insert into t1 values(STR_TO_DATE('2004.12.12 10:22:59','%Y.%m.%d %T')); @@ -1105,9 +1105,9 @@ select count(*) from t1 where STR_TO_DATE('2004.12.12 10:22:61','%Y.%m.%d %T') I count(*) 7 Warnings: -Error 1411 Incorrect datetime value: '2004.12.12 10:22:61' for function str_to_time -Error 1411 Incorrect datetime value: '2004.12.12 10:22:61' for function str_to_time -Error 1411 Incorrect datetime value: '2004.12.12 10:22:61' for function str_to_time +Error 1411 Incorrect datetime value: '2004.12.12 10:22:61' for function str_to_date +Error 1411 Incorrect datetime value: '2004.12.12 10:22:61' for function str_to_date +Error 1411 Incorrect datetime value: '2004.12.12 10:22:61' for function str_to_date drop table t1; create table t1 (col1 char(3), col2 integer); insert into t1 (col1) values (cast(1000 as char(3))); @@ -1302,43 +1302,6 @@ t2 CREATE TABLE `t2` ( ) ENGINE=MyISAM DEFAULT CHARSET=latin1 drop table t2,t1; set @@sql_mode= @org_mode; -set @@sql_mode='traditional'; -create table t1 (i int) -comment '123456789*123456789*123456789*123456789*123456789* - 123456789*123456789*123456789*123456789*123456789*'; -ERROR HY000: Too long comment for table 't1' -create table t1 ( -i int comment -'123456789*123456789*123456789*123456789* - 123456789*123456789*123456789*123456789* - 123456789*123456789*123456789*123456789* - 123456789*123456789*123456789*123456789* - 123456789*123456789*123456789*123456789* - 123456789*123456789*123456789*123456789* - 123456789*123456789*123456789*123456789*'); -ERROR HY000: Too long comment for field 'i' -set @@sql_mode= @org_mode; -create table t1 -(i int comment -'123456789*123456789*123456789*123456789* - 123456789*123456789*123456789*123456789* - 123456789*123456789*123456789*123456789* - 123456789*123456789*123456789*123456789* - 123456789*123456789*123456789*123456789* - 123456789*123456789*123456789*123456789* - 123456789*123456789*123456789*123456789*'); -Warnings: -Warning 1105 Unknown error -select column_name, column_comment from information_schema.columns where -table_schema = 'test' and table_name = 't1'; -column_name column_comment -i 123456789*123456789*123456789*123456789* - 123456789*123456789*123456789*123456789* - 123456789*123456789*123456789*123456789* - 123456789*123456789*123456789*123456789* - 123456789*123456789*123456789*123456789* - 123456789*123456789*123456789*123456789* -drop table t1; set names utf8; create table t1 (i int) comment '123456789*123456789*123456789*123456789*123456789*123456789*'; From 3d15ac95d605b44f4b06c4c7798b53adcbac6ed1 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 31 Aug 2007 08:49:49 -0600 Subject: [PATCH 178/194] Test cleanup for events.test mysql-test/r/events.result: Fixed all the select on information_schema.processlist to be more reliable. mysql-test/t/events.test: Fixed all the select on information_schema.processlist to be more reliable. --- mysql-test/r/events.result | 26 ++++++++++++++++-------- mysql-test/t/events.test | 41 ++++++++++++++++++++++++++++---------- 2 files changed, 49 insertions(+), 18 deletions(-) diff --git a/mysql-test/r/events.result b/mysql-test/r/events.result index be67e2acc7b..d1ee6d1c5a1 100644 --- a/mysql-test/r/events.result +++ b/mysql-test/r/events.result @@ -454,8 +454,11 @@ create event закачка on schedule every 10 hour do select get_lock("test_l select definer, name, db from mysql.event; definer name db root@localhost закачка events_test -"Should be only 1 process" -select /*1*/ user, host, db, command, state, info from information_schema.processlist where (command!='Daemon' || user='event_scheduler') and (info is null or info not like '%processlist%') order by info; +"Should be only 0 process" +select /*1*/ user, host, db, command, state, info +from information_schema.processlist +where (user='event_scheduler') +order by info; user host db command state info select release_lock("test_lock1"); release_lock("test_lock1") @@ -472,14 +475,15 @@ get_lock("test_lock2", 20) 1 "Create an event which tries to acquire a mutex. The event locks on the mutex" create event закачка on schedule every 10 hour do select get_lock("test_lock2", 20); -"Let some time pass to the event starts" "Should have only 2 processes: the scheduler and the locked event" -select /*2*/ user, host, db, command, state, info from information_schema.processlist where (command!='Daemon' || user='event_scheduler') and (info is null or info not like '%processlist%') order by info; +select /*2*/ user, host, db, command, state, info +from information_schema.processlist +where (info like "select get_lock%" OR user='event_scheduler') +order by info; user host db command state info event_scheduler localhost NULL Daemon Waiting for next activation NULL root localhost events_test Connect User lock select get_lock("test_lock2", 20) "Release the mutex, the event worker should finish." -"Release the mutex, the event worker should finish." select release_lock("test_lock2"); release_lock("test_lock2") 1 @@ -489,14 +493,20 @@ select get_lock("test_lock2_1", 20); get_lock("test_lock2_1", 20) 1 create event закачка21 on schedule every 10 hour do select get_lock("test_lock2_1", 20); -"Should have only 3 processes: the scheduler, our conn and the locked event" -select /*3*/ user, host, db, command, state, info from information_schema.processlist where (command!='Daemon' || user='event_scheduler') and (info is null or info not like '%processlist%') order by info; +"Should have only 2 processes: the scheduler and the locked event" +select /*3*/ user, host, db, command, state, info +from information_schema.processlist +where (info like "select get_lock%" OR user='event_scheduler') +order by info; user host db command state info event_scheduler localhost NULL Daemon Waiting for next activation NULL root localhost events_test Connect User lock select get_lock("test_lock2_1", 20) set global event_scheduler=off; "Should have only our process now:" -select /*4*/ user, host, db, command, state, info from information_schema.processlist where (command!='Daemon' || user='event_scheduler') and (info is null or info not like '%processlist%') order by info; +select /*4*/ user, host, db, command, state, info +from information_schema.processlist +where (info like "select get_lock%" OR user='event_scheduler') +order by info; user host db command state info root localhost events_test Connect User lock select get_lock("test_lock2_1", 20) select release_lock("test_lock2_1"); diff --git a/mysql-test/t/events.test b/mysql-test/t/events.test index cbb36cbd2be..365318e1db9 100644 --- a/mysql-test/t/events.test +++ b/mysql-test/t/events.test @@ -432,8 +432,11 @@ create event закачка on schedule every 10 hour do select get_lock("test_l --echo "Should return 1 row" select definer, name, db from mysql.event; ---echo "Should be only 1 process" -select /*1*/ user, host, db, command, state, info from information_schema.processlist where (command!='Daemon' || user='event_scheduler') and (info is null or info not like '%processlist%') order by info; +--echo "Should be only 0 process" +select /*1*/ user, host, db, command, state, info + from information_schema.processlist + where (user='event_scheduler') + order by info; select release_lock("test_lock1"); drop event закачка; --echo "Should have 0 events" @@ -447,10 +450,16 @@ set global event_scheduler=on; select get_lock("test_lock2", 20); --echo "Create an event which tries to acquire a mutex. The event locks on the mutex" create event закачка on schedule every 10 hour do select get_lock("test_lock2", 20); ---echo "Let some time pass to the event starts" ---sleep 1 + --echo "Should have only 2 processes: the scheduler and the locked event" -select /*2*/ user, host, db, command, state, info from information_schema.processlist where (command!='Daemon' || user='event_scheduler') and (info is null or info not like '%processlist%') order by info;--echo "Release the mutex, the event worker should finish." +let $wait_condition= select count(*) = 2 from information_schema.processlist + where (info like "select get_lock%" OR user='event_scheduler'); +--source include/wait_condition.inc + +select /*2*/ user, host, db, command, state, info + from information_schema.processlist + where (info like "select get_lock%" OR user='event_scheduler') + order by info; --echo "Release the mutex, the event worker should finish." select release_lock("test_lock2"); drop event закачка; @@ -466,16 +475,28 @@ drop event закачка; set global event_scheduler=1; select get_lock("test_lock2_1", 20); create event закачка21 on schedule every 10 hour do select get_lock("test_lock2_1", 20); -let $wait_condition= select count(*) = 3 from information_schema.processlist; + +--echo "Should have only 2 processes: the scheduler and the locked event" +let $wait_condition= select count(*) = 2 from information_schema.processlist + where (info like "select get_lock%" OR user='event_scheduler'); --source include/wait_condition.inc ---echo "Should have only 3 processes: the scheduler, our conn and the locked event" -select /*3*/ user, host, db, command, state, info from information_schema.processlist where (command!='Daemon' || user='event_scheduler') and (info is null or info not like '%processlist%') order by info; + +select /*3*/ user, host, db, command, state, info + from information_schema.processlist + where (info like "select get_lock%" OR user='event_scheduler') + order by info; + set global event_scheduler=off; + let $wait_condition= select count(*) =1 from information_schema.processlist - where (command!='Daemon' || user='event_scheduler') and (info is null or info not like '%processlist%') order by info; + where (info like "select get_lock%" OR user='event_scheduler'); --source include/wait_condition.inc + --echo "Should have only our process now:" -select /*4*/ user, host, db, command, state, info from information_schema.processlist where (command!='Daemon' || user='event_scheduler') and (info is null or info not like '%processlist%') order by info; +select /*4*/ user, host, db, command, state, info + from information_schema.processlist + where (info like "select get_lock%" OR user='event_scheduler') + order by info; select release_lock("test_lock2_1"); drop event закачка21; let $wait_condition= From 7e0ad09edff587dadc3e9855fc81e1b7de8f2199 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 31 Aug 2007 20:42:14 +0400 Subject: [PATCH 179/194] Fix for BUG#25843: changing default database between PREPARE and EXECUTE of statement breaks binlog. There were two problems discovered by this bug: 1. Default (current) database is not fixed at the creation time. That leads to wrong output of DATABASE() function. 2. Database attributes (@@collation_database) are not fixed at the creation time. That leads to wrong resultset. Binlog breakage and Query Cache wrong output happened because of the first problem. The fix is to remember the current database at the PREPARE-time and set it each time at EXECUTE. mysql-test/include/query_cache_sql_prepare.inc: The first part of the test case for BUG#25843. mysql-test/r/query_cache_ps_no_prot.result: Update result file. mysql-test/r/query_cache_ps_ps_prot.result: Update result file. mysql-test/suite/rpl/r/rpl_ps.result: Update result file. mysql-test/suite/rpl/t/rpl_ps.test: The second part of the test case for BUG#25843. sql/mysql_priv.h: Added mysql_opt_change_db() prototype. sql/sp.cc: 1. Polishing; 2. sp_use_new_db() has been removed; 3. Use mysql_opt_change_db() instead of sp_use_new_db(). sql/sp.h: sp_use_new_db() has been removed. This function has nothing to do with a) sp and b) *new* database. It was merely "switch the current database if needed". sql/sp_head.cc: 1. Polishing. 2. Use mysql_opt_change_db() instead of sp_use_new_db(). sql/sql_class.cc: Move THD::{db, db_length} into Statement. sql/sql_class.h: Move THD::{db, db_length} into Statement. sql/sql_db.cc: Introduce mysql_opt_change_db() as a replacement (and inspired by) sp_use_new_db(). sql/sql_prepare.cc: 1. Remember the current database in Prepared_statement::prepare(). 2. Switch/restore the current database in Prepared_statement::execute(). --- .../include/query_cache_sql_prepare.inc | 218 ++++++++++++++++++ mysql-test/r/query_cache_ps_no_prot.result | 158 +++++++++++++ mysql-test/r/query_cache_ps_ps_prot.result | 158 +++++++++++++ mysql-test/suite/rpl/r/rpl_ps.result | 39 ++++ mysql-test/suite/rpl/t/rpl_ps.test | 68 ++++++ sql/mysql_priv.h | 7 + sql/sp.cc | 150 ++++-------- sql/sp.h | 11 - sql/sp_head.cc | 22 +- sql/sql_class.cc | 7 +- sql/sql_class.h | 60 +++-- sql/sql_db.cc | 98 +++++++- sql/sql_prepare.cc | 48 ++++ 13 files changed, 891 insertions(+), 153 deletions(-) diff --git a/mysql-test/include/query_cache_sql_prepare.inc b/mysql-test/include/query_cache_sql_prepare.inc index cf6d4c26959..1842d5412bb 100644 --- a/mysql-test/include/query_cache_sql_prepare.inc +++ b/mysql-test/include/query_cache_sql_prepare.inc @@ -275,5 +275,223 @@ drop table t1; --echo ---- disconnect connection con1 ---- disconnect con1; +# +# Bug #25843 Changing default database between PREPARE and EXECUTE of statement +# breaks binlog. +# +# There were actually two problems discovered by this bug: +# +# 1. Default (current) database is not fixed at the creation time. +# That leads to wrong output of DATABASE() function. +# +# 2. Database attributes (@@collation_database) are not fixed at the creation +# time. That leads to wrong resultset. +# +# Binlog breakage and Query Cache wrong output happened because of the first +# problem. +# + +--echo ######################################################################## +--echo # +--echo # BUG#25843: Changing default database between PREPARE and EXECUTE of +--echo # statement breaks binlog. +--echo # +--echo ######################################################################## + +############################################################################### + +--echo +--echo # +--echo # Check that default database and its attributes are fixed at the +--echo # creation time. +--echo # + +# Prepare data structures. + +--echo +--disable_warnings +DROP DATABASE IF EXISTS mysqltest1; +DROP DATABASE IF EXISTS mysqltest2; +--enable_warnings + +--echo +CREATE DATABASE mysqltest1 COLLATE utf8_unicode_ci; +CREATE DATABASE mysqltest2 COLLATE utf8_general_ci; + +--echo +CREATE TABLE mysqltest1.t1(msg VARCHAR(255)); +CREATE TABLE mysqltest2.t1(msg VARCHAR(255)); + +# - Create a prepared statement with mysqltest1 as default database; + +--echo + +use mysqltest1; + +PREPARE stmt_a_1 FROM 'INSERT INTO t1 VALUES(DATABASE())'; +PREPARE stmt_a_2 FROM 'INSERT INTO t1 VALUES(@@collation_database)'; + +# - Execute on mysqltest1. + +--echo + +EXECUTE stmt_a_1; +EXECUTE stmt_a_2; + +# - Execute on mysqltest2. + +--echo + +use mysqltest2; + +EXECUTE stmt_a_1; +EXECUTE stmt_a_2; + +# - Check the results; + +--echo +SELECT * FROM mysqltest1.t1; + +--echo +SELECT * FROM mysqltest2.t1; + +# - Drop prepared statements. + +--echo +DROP PREPARE stmt_a_1; +DROP PREPARE stmt_a_2; + +############################################################################### + +--echo +--echo # +--echo # The Query Cache test case. +--echo # + +--echo +DELETE FROM mysqltest1.t1; +DELETE FROM mysqltest2.t1; + +--echo +INSERT INTO mysqltest1.t1 VALUES('mysqltest1.t1'); +INSERT INTO mysqltest2.t1 VALUES('mysqltest2.t1'); + +--echo +use mysqltest1; +PREPARE stmt_b_1 FROM 'SELECT * FROM t1'; + +--echo +use mysqltest2; +PREPARE stmt_b_2 FROM 'SELECT * FROM t1'; + +--echo +EXECUTE stmt_b_1; + +--echo +EXECUTE stmt_b_2; + +--echo +use mysqltest1; + +--echo +EXECUTE stmt_b_1; + +--echo +EXECUTE stmt_b_2; + +--echo +DROP PREPARE stmt_b_1; +DROP PREPARE stmt_b_2; + +# Cleanup. + +--echo +use test; + +--echo +DROP DATABASE mysqltest1; +DROP DATABASE mysqltest2; + +############################################################################### + +--echo +--echo # +--echo # Check that prepared statements work properly when there is no current +--echo # database. +--echo # + +--echo +CREATE DATABASE mysqltest1 COLLATE utf8_unicode_ci; +CREATE DATABASE mysqltest2 COLLATE utf8_general_ci; + +--echo +use mysqltest1; + +--echo +PREPARE stmt_c_1 FROM 'SELECT DATABASE(), @@collation_database'; + +--echo +use mysqltest2; + +--echo +PREPARE stmt_c_2 FROM 'SELECT DATABASE(), @@collation_database'; + +--echo +DROP DATABASE mysqltest2; + +--echo +SELECT DATABASE(), @@collation_database; + +# -- Here we have: current db: NULL; stmt db: mysqltest1; +--echo +EXECUTE stmt_c_1; + +--echo +SELECT DATABASE(), @@collation_database; + +# -- Here we have: current db: NULL; stmt db: mysqltest2 (non-existent); +--echo +EXECUTE stmt_c_2; + +--echo +SELECT DATABASE(), @@collation_database; + +# -- Create prepared statement, which has no current database. + +--echo +PREPARE stmt_c_3 FROM 'SELECT DATABASE(), @@collation_database'; + +# -- Here we have: current db: NULL; stmt db: NULL; +--echo +EXECUTE stmt_c_3; + +--echo +use mysqltest1; + +# -- Here we have: current db: mysqltest1; stmt db: mysqltest2 (non-existent); +--echo +EXECUTE stmt_c_2; + +--echo +SELECT DATABASE(), @@collation_database; + +# -- Here we have: current db: mysqltest1; stmt db: NULL; +--echo +EXECUTE stmt_c_3; + +--echo +SELECT DATABASE(), @@collation_database; + +--echo +DROP DATABASE mysqltest1; + +--echo +use test; + +--echo +--echo ######################################################################## + +############################################################################### + set @@global.query_cache_size=@initial_query_cache_size; flush status; # reset Qcache status variables for next tests diff --git a/mysql-test/r/query_cache_ps_no_prot.result b/mysql-test/r/query_cache_ps_no_prot.result index 29d16d8a619..0efb2540c64 100644 --- a/mysql-test/r/query_cache_ps_no_prot.result +++ b/mysql-test/r/query_cache_ps_no_prot.result @@ -371,5 +371,163 @@ Variable_name Value Qcache_hits 21 drop table t1; ---- disconnect connection con1 ---- +######################################################################## +# +# BUG#25843: Changing default database between PREPARE and EXECUTE of +# statement breaks binlog. +# +######################################################################## + +# +# Check that default database and its attributes are fixed at the +# creation time. +# + +DROP DATABASE IF EXISTS mysqltest1; +DROP DATABASE IF EXISTS mysqltest2; + +CREATE DATABASE mysqltest1 COLLATE utf8_unicode_ci; +CREATE DATABASE mysqltest2 COLLATE utf8_general_ci; + +CREATE TABLE mysqltest1.t1(msg VARCHAR(255)); +CREATE TABLE mysqltest2.t1(msg VARCHAR(255)); + +use mysqltest1; +PREPARE stmt_a_1 FROM 'INSERT INTO t1 VALUES(DATABASE())'; +PREPARE stmt_a_2 FROM 'INSERT INTO t1 VALUES(@@collation_database)'; + +EXECUTE stmt_a_1; +EXECUTE stmt_a_2; + +use mysqltest2; +EXECUTE stmt_a_1; +EXECUTE stmt_a_2; + +SELECT * FROM mysqltest1.t1; +msg +mysqltest1 +utf8_unicode_ci +mysqltest1 +utf8_unicode_ci + +SELECT * FROM mysqltest2.t1; +msg + +DROP PREPARE stmt_a_1; +DROP PREPARE stmt_a_2; + +# +# The Query Cache test case. +# + +DELETE FROM mysqltest1.t1; +DELETE FROM mysqltest2.t1; + +INSERT INTO mysqltest1.t1 VALUES('mysqltest1.t1'); +INSERT INTO mysqltest2.t1 VALUES('mysqltest2.t1'); + +use mysqltest1; +PREPARE stmt_b_1 FROM 'SELECT * FROM t1'; + +use mysqltest2; +PREPARE stmt_b_2 FROM 'SELECT * FROM t1'; + +EXECUTE stmt_b_1; +msg +mysqltest1.t1 + +EXECUTE stmt_b_2; +msg +mysqltest2.t1 + +use mysqltest1; + +EXECUTE stmt_b_1; +msg +mysqltest1.t1 + +EXECUTE stmt_b_2; +msg +mysqltest2.t1 + +DROP PREPARE stmt_b_1; +DROP PREPARE stmt_b_2; + +use test; + +DROP DATABASE mysqltest1; +DROP DATABASE mysqltest2; + +# +# Check that prepared statements work properly when there is no current +# database. +# + +CREATE DATABASE mysqltest1 COLLATE utf8_unicode_ci; +CREATE DATABASE mysqltest2 COLLATE utf8_general_ci; + +use mysqltest1; + +PREPARE stmt_c_1 FROM 'SELECT DATABASE(), @@collation_database'; + +use mysqltest2; + +PREPARE stmt_c_2 FROM 'SELECT DATABASE(), @@collation_database'; + +DROP DATABASE mysqltest2; + +SELECT DATABASE(), @@collation_database; +DATABASE() @@collation_database +NULL latin1_swedish_ci + +EXECUTE stmt_c_1; +DATABASE() @@collation_database +mysqltest1 utf8_unicode_ci + +SELECT DATABASE(), @@collation_database; +DATABASE() @@collation_database +NULL latin1_swedish_ci + +EXECUTE stmt_c_2; +DATABASE() @@collation_database +NULL latin1_swedish_ci +Warnings: +Note 1049 Unknown database 'mysqltest2' + +SELECT DATABASE(), @@collation_database; +DATABASE() @@collation_database +NULL latin1_swedish_ci + +PREPARE stmt_c_3 FROM 'SELECT DATABASE(), @@collation_database'; + +EXECUTE stmt_c_3; +DATABASE() @@collation_database +NULL latin1_swedish_ci + +use mysqltest1; + +EXECUTE stmt_c_2; +DATABASE() @@collation_database +NULL latin1_swedish_ci +Warnings: +Note 1049 Unknown database 'mysqltest2' + +SELECT DATABASE(), @@collation_database; +DATABASE() @@collation_database +mysqltest1 utf8_unicode_ci + +EXECUTE stmt_c_3; +DATABASE() @@collation_database +NULL latin1_swedish_ci + +SELECT DATABASE(), @@collation_database; +DATABASE() @@collation_database +mysqltest1 utf8_unicode_ci + +DROP DATABASE mysqltest1; + +use test; + +######################################################################## set @@global.query_cache_size=@initial_query_cache_size; flush status; diff --git a/mysql-test/r/query_cache_ps_ps_prot.result b/mysql-test/r/query_cache_ps_ps_prot.result index ba675d57f50..dc0c4a0193a 100644 --- a/mysql-test/r/query_cache_ps_ps_prot.result +++ b/mysql-test/r/query_cache_ps_ps_prot.result @@ -371,5 +371,163 @@ Variable_name Value Qcache_hits 19 drop table t1; ---- disconnect connection con1 ---- +######################################################################## +# +# BUG#25843: Changing default database between PREPARE and EXECUTE of +# statement breaks binlog. +# +######################################################################## + +# +# Check that default database and its attributes are fixed at the +# creation time. +# + +DROP DATABASE IF EXISTS mysqltest1; +DROP DATABASE IF EXISTS mysqltest2; + +CREATE DATABASE mysqltest1 COLLATE utf8_unicode_ci; +CREATE DATABASE mysqltest2 COLLATE utf8_general_ci; + +CREATE TABLE mysqltest1.t1(msg VARCHAR(255)); +CREATE TABLE mysqltest2.t1(msg VARCHAR(255)); + +use mysqltest1; +PREPARE stmt_a_1 FROM 'INSERT INTO t1 VALUES(DATABASE())'; +PREPARE stmt_a_2 FROM 'INSERT INTO t1 VALUES(@@collation_database)'; + +EXECUTE stmt_a_1; +EXECUTE stmt_a_2; + +use mysqltest2; +EXECUTE stmt_a_1; +EXECUTE stmt_a_2; + +SELECT * FROM mysqltest1.t1; +msg +mysqltest1 +utf8_unicode_ci +mysqltest1 +utf8_unicode_ci + +SELECT * FROM mysqltest2.t1; +msg + +DROP PREPARE stmt_a_1; +DROP PREPARE stmt_a_2; + +# +# The Query Cache test case. +# + +DELETE FROM mysqltest1.t1; +DELETE FROM mysqltest2.t1; + +INSERT INTO mysqltest1.t1 VALUES('mysqltest1.t1'); +INSERT INTO mysqltest2.t1 VALUES('mysqltest2.t1'); + +use mysqltest1; +PREPARE stmt_b_1 FROM 'SELECT * FROM t1'; + +use mysqltest2; +PREPARE stmt_b_2 FROM 'SELECT * FROM t1'; + +EXECUTE stmt_b_1; +msg +mysqltest1.t1 + +EXECUTE stmt_b_2; +msg +mysqltest2.t1 + +use mysqltest1; + +EXECUTE stmt_b_1; +msg +mysqltest1.t1 + +EXECUTE stmt_b_2; +msg +mysqltest2.t1 + +DROP PREPARE stmt_b_1; +DROP PREPARE stmt_b_2; + +use test; + +DROP DATABASE mysqltest1; +DROP DATABASE mysqltest2; + +# +# Check that prepared statements work properly when there is no current +# database. +# + +CREATE DATABASE mysqltest1 COLLATE utf8_unicode_ci; +CREATE DATABASE mysqltest2 COLLATE utf8_general_ci; + +use mysqltest1; + +PREPARE stmt_c_1 FROM 'SELECT DATABASE(), @@collation_database'; + +use mysqltest2; + +PREPARE stmt_c_2 FROM 'SELECT DATABASE(), @@collation_database'; + +DROP DATABASE mysqltest2; + +SELECT DATABASE(), @@collation_database; +DATABASE() @@collation_database +NULL latin1_swedish_ci + +EXECUTE stmt_c_1; +DATABASE() @@collation_database +mysqltest1 utf8_unicode_ci + +SELECT DATABASE(), @@collation_database; +DATABASE() @@collation_database +NULL latin1_swedish_ci + +EXECUTE stmt_c_2; +DATABASE() @@collation_database +NULL latin1_swedish_ci +Warnings: +Note 1049 Unknown database 'mysqltest2' + +SELECT DATABASE(), @@collation_database; +DATABASE() @@collation_database +NULL latin1_swedish_ci + +PREPARE stmt_c_3 FROM 'SELECT DATABASE(), @@collation_database'; + +EXECUTE stmt_c_3; +DATABASE() @@collation_database +NULL latin1_swedish_ci + +use mysqltest1; + +EXECUTE stmt_c_2; +DATABASE() @@collation_database +NULL latin1_swedish_ci +Warnings: +Note 1049 Unknown database 'mysqltest2' + +SELECT DATABASE(), @@collation_database; +DATABASE() @@collation_database +mysqltest1 utf8_unicode_ci + +EXECUTE stmt_c_3; +DATABASE() @@collation_database +NULL latin1_swedish_ci + +SELECT DATABASE(), @@collation_database; +DATABASE() @@collation_database +mysqltest1 utf8_unicode_ci + +DROP DATABASE mysqltest1; + +use test; + +######################################################################## set @@global.query_cache_size=@initial_query_cache_size; flush status; diff --git a/mysql-test/suite/rpl/r/rpl_ps.result b/mysql-test/suite/rpl/r/rpl_ps.result index 73c36af4862..dd3ed165226 100644 --- a/mysql-test/suite/rpl/r/rpl_ps.result +++ b/mysql-test/suite/rpl/r/rpl_ps.result @@ -26,5 +26,44 @@ from-master-2-'', from-var-from-master-3 drop table t1; stop slave; + +######################################################################## +# +# BUG#25843: Changing default database between PREPARE and EXECUTE of +# statement breaks binlog. +# +######################################################################## + +# +# Check that binlog is filled properly. +# + +CREATE DATABASE mysqltest1; +CREATE TABLE t1(c INT); + +RESET MASTER; +RESET SLAVE; + +PREPARE stmt_d_1 FROM 'INSERT INTO t1 VALUES(1)'; + +EXECUTE stmt_d_1; + +use mysqltest1; + +EXECUTE stmt_d_1; + +FLUSH LOGS; + +SHOW BINLOG EVENTS FROM 106; +Log_name Pos Event_type Server_id End_log_pos Info +slave-bin.000001 106 Query 2 193 use `test`; INSERT INTO t1 VALUES(1) +slave-bin.000001 193 Query 2 280 use `test`; INSERT INTO t1 VALUES(1) +slave-bin.000001 280 Rotate 2 323 slave-bin.000002;pos=4 + +DROP DATABASE mysqltest1; + +use test; + +######################################################################## reset master; reset slave; diff --git a/mysql-test/suite/rpl/t/rpl_ps.test b/mysql-test/suite/rpl/t/rpl_ps.test index b8792722192..0c8a499c9fe 100644 --- a/mysql-test/suite/rpl/t/rpl_ps.test +++ b/mysql-test/suite/rpl/t/rpl_ps.test @@ -46,6 +46,74 @@ stop slave; # End of 4.1 tests +# +# Bug #25843 Changing default database between PREPARE and EXECUTE of statement +# breaks binlog. +# +# There were actually two problems discovered by this bug: +# +# 1. Default (current) database is not fixed at the creation time. +# That leads to wrong output of DATABASE() function. +# +# 2. Database attributes (@@collation_database) are not fixed at the creation +# time. That leads to wrong resultset. +# +# Binlog breakage and Query Cache wrong output happened because of the first +# problem. +# + +--echo +--echo ######################################################################## +--echo # +--echo # BUG#25843: Changing default database between PREPARE and EXECUTE of +--echo # statement breaks binlog. +--echo # +--echo ######################################################################## + +############################################################################### + +--echo +--echo # +--echo # Check that binlog is filled properly. +--echo # + +--echo +CREATE DATABASE mysqltest1; +CREATE TABLE t1(c INT); + +--echo +RESET MASTER; +RESET SLAVE; + +--echo +PREPARE stmt_d_1 FROM 'INSERT INTO t1 VALUES(1)'; + +--echo +EXECUTE stmt_d_1; + +--echo +use mysqltest1; + +--echo +EXECUTE stmt_d_1; + +--echo +FLUSH LOGS; + +--echo +SHOW BINLOG EVENTS FROM 106; + +--echo +DROP DATABASE mysqltest1; + +--echo +use test; + +--echo +--echo ######################################################################## + +############################################################################### + reset master; reset slave; disconnect master; diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index a607e77eecf..7a451b7d287 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -937,9 +937,16 @@ bool mysql_rename_tables(THD *thd, TABLE_LIST *table_list, bool silent); bool do_rename(THD *thd, TABLE_LIST *ren_table, char *new_db, char *new_table_name, char *new_table_alias, bool skip_error); + bool mysql_change_db(THD *thd, const LEX_STRING *new_db_name, bool force_switch); +bool mysql_opt_change_db(THD *thd, + const LEX_STRING *new_db_name, + LEX_STRING *saved_db_name, + bool force_switch, + bool *cur_db_changed); + void mysql_parse(THD *thd, const char *inBuf, uint length, const char ** semicolon); diff --git a/sql/sp.cc b/sql/sp.cc index 8655e520041..e910bd6443d 100644 --- a/sql/sp.cc +++ b/sql/sp.cc @@ -519,9 +519,10 @@ db_load_routine(THD *thd, int type, sp_name *name, sp_head **sphp, { LEX *old_lex= thd->lex, newlex; String defstr; - char old_db_buf[NAME_LEN+1]; - LEX_STRING old_db= { old_db_buf, sizeof(old_db_buf) }; - bool dbchanged; + char saved_cur_db_name_buf[NAME_LEN+1]; + LEX_STRING saved_cur_db_name= + { saved_cur_db_name_buf, sizeof(saved_cur_db_name_buf) }; + bool cur_db_changed; ulong old_sql_mode= thd->variables.sql_mode; ha_rows old_select_limit= thd->variables.select_limit; sp_rcontext *old_spcont= thd->spcont; @@ -566,16 +567,16 @@ db_load_routine(THD *thd, int type, sp_name *name, sp_head **sphp, } /* - Change current database if needed. + Change the current database (if needed). - collation_database will be updated here. However, it can be wrong, - because it will contain the current value of the database collation. - We need collation_database to be fixed at the creation time -- so - we'll update it later in switch_query_ctx(). + TODO: why do we force switch here? */ - if ((ret= sp_use_new_db(thd, name->m_db, &old_db, TRUE, &dbchanged))) + if (mysql_opt_change_db(thd, &name->m_db, &saved_cur_db_name, TRUE, + &cur_db_changed)) + { goto end; + } thd->spcont= NULL; @@ -584,34 +585,42 @@ db_load_routine(THD *thd, int type, sp_name *name, sp_head **sphp, lex_start(thd); - if (parse_sql(thd, &lip, creation_ctx) || newlex.sphead == NULL) - { - sp_head *sp= newlex.sphead; + ret= parse_sql(thd, &lip, creation_ctx) || newlex.sphead == NULL; - if (dbchanged && (ret= mysql_change_db(thd, &old_db, TRUE))) - goto end; - delete sp; - ret= SP_PARSE_ERROR; - } - else + /* + Force switching back to the saved current database (if changed), + because it may be NULL. In this case, mysql_change_db() would + generate an error. + */ + + if (cur_db_changed && mysql_change_db(thd, &saved_cur_db_name, TRUE)) { - if (dbchanged && (ret= mysql_change_db(thd, &old_db, TRUE))) - goto end; - *sphp= newlex.sphead; - (*sphp)->set_definer(&definer_user_name, &definer_host_name); - (*sphp)->set_info(created, modified, &chistics, sql_mode); - (*sphp)->set_creation_ctx(creation_ctx); - (*sphp)->optimize(); - /* - Not strictly necessary to invoke this method here, since we know - that we've parsed CREATE PROCEDURE/FUNCTION and not an - UPDATE/DELETE/INSERT/REPLACE/LOAD/CREATE TABLE, but we try to - maintain the invariant that this method is called for each - distinct statement, in case its logic is extended with other - types of analyses in future. - */ - newlex.set_trg_event_type_for_tables(); + delete newlex.sphead; + ret= -1; + goto end; } + + if (ret) + { + delete newlex.sphead; + ret= SP_PARSE_ERROR; + goto end; + } + + *sphp= newlex.sphead; + (*sphp)->set_definer(&definer_user_name, &definer_host_name); + (*sphp)->set_info(created, modified, &chistics, sql_mode); + (*sphp)->set_creation_ctx(creation_ctx); + (*sphp)->optimize(); + /* + Not strictly necessary to invoke this method here, since we know + that we've parsed CREATE PROCEDURE/FUNCTION and not an + UPDATE/DELETE/INSERT/REPLACE/LOAD/CREATE TABLE, but we try to + maintain the invariant that this method is called for each + distinct statement, in case its logic is extended with other + types of analyses in future. + */ + newlex.set_trg_event_type_for_tables(); } end: @@ -2024,76 +2033,3 @@ create_string(THD *thd, String *buf, buf->append(body, bodylen); return TRUE; } - - - -/** - Change the current database if needed. - - @param[in] thd thread handle - @param[in] new_db new database name - @param[in, out] old_db IN: str points to a buffer where to store - the old database, length contains the - size of the buffer - OUT: if old db was not NULL, its name is - copied to the buffer pointed at by str - and length is updated accordingly. - Otherwise str[0] is set to '\0' and - length is set to 0. The out parameter - should be used only if the database name - has been changed (see dbchangedp). - @param[in] force_switch Flag to mysql_change_db(). For more information, - see mysql_change_db() comment. - @param[out] dbchangedp is set to TRUE if the current database is - changed, FALSE otherwise. The current - database is not changed if the old name - is equal to the new one, both names are - empty, or an error has occurred. - - @return Operation status. - @retval 0 on success - @retval 1 access denied or out of memory - (the error message is set in THD) -*/ - -int -sp_use_new_db(THD *thd, - LEX_STRING new_db, - LEX_STRING *old_db, - bool force_switch, - bool *dbchangedp) -{ - int ret; - DBUG_ENTER("sp_use_new_db"); - DBUG_PRINT("enter", ("newdb: %s", new_db.str)); - - /* - A stored routine always belongs to some database. The - old database (old_db) might be NULL, but to restore the - old database we will use mysql_change_db. - */ - DBUG_ASSERT(new_db.str && new_db.length); - - if (thd->db) - { - old_db->length= (strmake(old_db->str, thd->db, old_db->length) - - old_db->str); - } - else - { - old_db->str[0]= '\0'; - old_db->length= 0; - } - - /* Don't change the database if the new name is the same as the old one. */ - if (my_strcasecmp(system_charset_info, old_db->str, new_db.str) == 0) - { - *dbchangedp= FALSE; - DBUG_RETURN(0); - } - - ret= mysql_change_db(thd, &new_db, force_switch); - - *dbchangedp= ret == 0; - DBUG_RETURN(ret); -} diff --git a/sql/sp.h b/sql/sp.h index 52b0344a2e2..3797eb289a4 100644 --- a/sql/sp.h +++ b/sql/sp.h @@ -85,15 +85,4 @@ extern "C" uchar* sp_sroutine_key(const uchar *ptr, size_t *plen, */ TABLE *open_proc_table_for_read(THD *thd, Open_tables_state *backup); - -/* - Do a "use new_db". The current db is stored at old_db. If new_db is the - same as the current one, nothing is changed. dbchangedp is set to true if - the db was actually changed. -*/ - -int -sp_use_new_db(THD *thd, LEX_STRING new_db, LEX_STRING *old_db, - bool no_access_check, bool *dbchangedp); - #endif /* _SP_H_ */ diff --git a/sql/sp_head.cc b/sql/sp_head.cc index de8c4d89466..1c2dcef476b 100644 --- a/sql/sp_head.cc +++ b/sql/sp_head.cc @@ -1015,9 +1015,10 @@ bool sp_head::execute(THD *thd) { DBUG_ENTER("sp_head::execute"); - char old_db_buf[NAME_LEN+1]; - LEX_STRING old_db= { old_db_buf, sizeof(old_db_buf) }; - bool dbchanged; + char saved_cur_db_name_buf[NAME_LEN+1]; + LEX_STRING saved_cur_db_name= + { saved_cur_db_name_buf, sizeof(saved_cur_db_name_buf) }; + bool cur_db_changed= FALSE; sp_rcontext *ctx; bool err_status= FALSE; uint ip= 0; @@ -1072,8 +1073,11 @@ sp_head::execute(THD *thd) */ if (m_db.length && - (err_status= sp_use_new_db(thd, m_db, &old_db, 0, &dbchanged))) + (err_status= mysql_opt_change_db(thd, &m_db, &saved_cur_db_name, FALSE, + &cur_db_changed))) + { goto done; + } if ((ctx= thd->spcont)) ctx->clear_handler(); @@ -1252,14 +1256,14 @@ sp_head::execute(THD *thd) If the DB has changed, the pointer has changed too, but the original thd->db will then have been freed */ - if (dbchanged) + if (cur_db_changed && !thd->killed) { /* - No access check when changing back to where we came from. - (It would generate an error from mysql_change_db() when old_db=="") + Force switching back to the saved current database, because it may be + NULL. In this case, mysql_change_db() would generate an error. */ - if (! thd->killed) - err_status|= mysql_change_db(thd, &old_db, TRUE); + + err_status|= mysql_change_db(thd, &saved_cur_db_name, TRUE); } m_flags&= ~IS_INVOKED; DBUG_PRINT("info", diff --git a/sql/sql_class.cc b/sql/sql_class.cc index d5159929ecd..9cbb125fa35 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -387,7 +387,6 @@ THD::THD() init_sql_alloc(&main_mem_root, ALLOC_ROOT_MIN_BLOCK_SIZE, 0); stmt_arena= this; thread_stack= 0; - db= 0; catalog= (char*)"std"; // the only catalog we have for now main_security_ctx.init(); security_ctx= &main_security_ctx; @@ -395,7 +394,7 @@ THD::THD() query_start_used= 0; count_cuted_fields= CHECK_FIELD_IGNORE; killed= NOT_KILLED; - db_length= col_access=0; + col_access=0; query_error= thread_specific_used= FALSE; hash_clear(&handler_tables_hash); tmp_table=0; @@ -2040,7 +2039,9 @@ Statement::Statement(LEX *lex_arg, MEM_ROOT *mem_root_arg, lex(lex_arg), query(0), query_length(0), - cursor(0) + cursor(0), + db(NULL), + db_length(0) { name.str= NULL; } diff --git a/sql/sql_class.h b/sql/sql_class.h index abed643f822..80f73945465 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -593,6 +593,22 @@ public: uint32 query_length; // current query length Server_side_cursor *cursor; + /** + Name of the current (default) database. + + If there is the current (default) database, "db" contains its name. If + there is no current (default) database, "db" is NULL and "db_length" is + 0. In other words, "db", "db_length" must either be NULL, or contain a + valid database name. + + @note this attribute is set and alloced by the slave SQL thread (for + the THD of that thread); that thread is (and must remain, for now) the + only responsible for freeing this member. + */ + + char *db; + uint db_length; + public: /* This constructor is called for backup statements */ @@ -1024,18 +1040,21 @@ public: */ char *thread_stack; + /** + Currently selected catalog. + */ + char *catalog; + /* - db - currently selected database - catalog - currently selected catalog - WARNING: some members of THD (currently 'db', 'catalog' and 'query') are - set and alloced by the slave SQL thread (for the THD of that thread); that - thread is (and must remain, for now) the only responsible for freeing these - 3 members. If you add members here, and you add code to set them in - replication, don't forget to free_them_and_set_them_to_0 in replication - properly. For details see the 'err:' label of the handle_slave_sql() - in sql/slave.cc. - */ - char *db, *catalog; + WARNING: some members of THD (currently 'Statement::db', + 'catalog' and 'query') are set and alloced by the slave SQL thread + (for the THD of that thread); that thread is (and must remain, for now) + the only responsible for freeing these 3 members. If you add members + here, and you add code to set them in replication, don't forget to + free_them_and_set_them_to_0 in replication properly. For details see + the 'err:' label of the handle_slave_sql() in sql/slave.cc. + */ + Security_context main_security_ctx; Security_context *security_ctx; @@ -1390,7 +1409,6 @@ public: uint tmp_table, global_read_lock; uint server_status,open_options; enum enum_thread_type system_thread; - uint db_length; uint select_number; //number of select (used for EXPLAIN) /* variables.transaction_isolation is reset to this after each commit */ enum_tx_isolation session_tx_isolation; @@ -1814,11 +1832,10 @@ public: no current database selected (in addition to the error message set by malloc). - @note This operation just sets {thd->db, thd->db_length}. Switching the - current database usually involves other actions, like switching other - database attributes including security context. In the future, this - operation will be made private and more convenient interface will be - provided. + @note This operation just sets {db, db_length}. Switching the current + database usually involves other actions, like switching other database + attributes including security context. In the future, this operation + will be made private and more convenient interface will be provided. @return Operation status @retval FALSE Success @@ -1844,11 +1861,10 @@ public: @param new_db a pointer to the new database name. @param new_db_len length of the new database name. - @note This operation just sets {thd->db, thd->db_length}. Switching the - current database usually involves other actions, like switching other - database attributes including security context. In the future, this - operation will be made private and more convenient interface will be - provided. + @note This operation just sets {db, db_length}. Switching the current + database usually involves other actions, like switching other database + attributes including security context. In the future, this operation + will be made private and more convenient interface will be provided. */ void reset_db(char *new_db, size_t new_db_len) { diff --git a/sql/sql_db.cc b/sql/sql_db.cc index 207c48b45f0..228c56afb13 100644 --- a/sql/sql_db.cc +++ b/sql/sql_db.cc @@ -1350,8 +1350,67 @@ static void mysql_change_db_impl(THD *thd, } + /** - @brief Change the current database and its attributes. + Backup the current database name before switch. + + @param[in] thd thread handle + @param[in, out] saved_db_name IN: "str" points to a buffer where to store + the old database name, "length" contains the + buffer size + OUT: if the current (default) database is + not NULL, its name is copied to the + buffer pointed at by "str" + and "length" is updated accordingly. + Otherwise "str" is set to NULL and + "length" is set to 0. +*/ + +static void backup_current_db_name(THD *thd, + LEX_STRING *saved_db_name) +{ + if (!thd->db) + { + /* No current (default) database selected. */ + + saved_db_name->str= NULL; + saved_db_name->length= 0; + } + else + { + strmake(saved_db_name->str, thd->db, saved_db_name->length); + saved_db_name->length= thd->db_length; + } +} + + +/** + Return TRUE if db1_name is equal to db2_name, FALSE otherwise. + + The function allows to compare database names according to the MySQL + rules. The database names db1 and db2 are equal if: + - db1 is NULL and db2 is NULL; + or + - db1 is not-NULL, db2 is not-NULL, db1 is equal (ignoring case) to + db2 in system character set (UTF8). +*/ + +static inline bool +cmp_db_names(const char *db1_name, + const char *db2_name) +{ + return + /* db1 is NULL and db2 is NULL */ + !db1_name && !db2_name || + + /* db1 is not-NULL, db2 is not-NULL, db1 == db2. */ + db1_name && db2_name && + my_strcasecmp(system_charset_info, db1_name, db2_name) == 0; +} + + +/** + @brief Change the current database and its attributes unconditionally. @param thd thread handle @param new_db_name database name @@ -1568,6 +1627,43 @@ bool mysql_change_db(THD *thd, const LEX_STRING *new_db_name, bool force_switch) } +/** + Change the current database and its attributes if needed. + + @param thd thread handle + @param new_db_name database name + @param[in, out] saved_db_name IN: "str" points to a buffer where to store + the old database name, "length" contains the + buffer size + OUT: if the current (default) database is + not NULL, its name is copied to the + buffer pointed at by "str" + and "length" is updated accordingly. + Otherwise "str" is set to NULL and + "length" is set to 0. + @param force_switch @see mysql_change_db() + @param[out] cur_db_changed out-flag to indicate whether the current + database has been changed (valid only if + the function suceeded) +*/ + +bool mysql_opt_change_db(THD *thd, + const LEX_STRING *new_db_name, + LEX_STRING *saved_db_name, + bool force_switch, + bool *cur_db_changed) +{ + *cur_db_changed= !cmp_db_names(thd->db, new_db_name->str); + + if (!*cur_db_changed) + return FALSE; + + backup_current_db_name(thd, saved_db_name); + + return mysql_change_db(thd, new_db_name, force_switch); +} + + static int lock_databases(THD *thd, const char *db1, uint length1, const char *db2, uint length2) diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index 6b60f89b8e3..9337a2aa329 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -2868,6 +2868,19 @@ bool Prepared_statement::prepare(const char *packet, uint packet_len) init_param_array(this); lex->set_trg_event_type_for_tables(); + /* Remember the current database. */ + + if (thd->db && thd->db_length) + { + db= this->strmake(thd->db, thd->db_length); + db_length= thd->db_length; + } + else + { + db= NULL; + db_length= 0; + } + /* While doing context analysis of the query (in check_prepared_statement) we allocate a lot of additional memory: for open tables, JOINs, derived @@ -2974,6 +2987,13 @@ bool Prepared_statement::execute(String *expanded_query, bool open_cursor) Query_arena *old_stmt_arena; bool error= TRUE; + char saved_cur_db_name_buf[NAME_LEN+1]; + LEX_STRING saved_cur_db_name= + { saved_cur_db_name_buf, sizeof(saved_cur_db_name_buf) }; + bool cur_db_changed; + + LEX_STRING stmt_db_name= { db, db_length }; + status_var_increment(thd->status_var.com_stmt_execute); /* Check if we got an error when sending long data */ @@ -3022,6 +3042,21 @@ bool Prepared_statement::execute(String *expanded_query, bool open_cursor) */ thd->set_n_backup_statement(this, &stmt_backup); + + /* + Change the current database (if needed). + + Force switching, because the database of the prepared statement may be + NULL (prepared statements can be created while no current database + selected). + */ + + if (mysql_opt_change_db(thd, &stmt_db_name, &saved_cur_db_name, TRUE, + &cur_db_changed)) + goto error; + + /* Allocate query. */ + if (expanded_query->length() && alloc_query(thd, (char*) expanded_query->ptr(), expanded_query->length()+1)) @@ -3050,6 +3085,8 @@ bool Prepared_statement::execute(String *expanded_query, bool open_cursor) thd->protocol= protocol; /* activate stmt protocol */ + /* Go! */ + if (open_cursor) error= mysql_open_cursor(thd, (uint) ALWAYS_MATERIALIZED_CURSOR, &result, &cursor); @@ -3068,6 +3105,17 @@ bool Prepared_statement::execute(String *expanded_query, bool open_cursor) } } + /* + Restore the current database (if changed). + + Force switching back to the saved current database (if changed), + because it may be NULL. In this case, mysql_change_db() would generate + an error. + */ + + if (cur_db_changed) + mysql_change_db(thd, &saved_cur_db_name, TRUE); + thd->protocol= &thd->protocol_text; /* use normal protocol */ /* Assert that if an error, no cursor is open */ From 436cca531c46735cfdfbf61ca0d24d2c3a96ebf5 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 31 Aug 2007 10:53:51 -0600 Subject: [PATCH 180/194] Correct fix for test result. --- mysql-test/r/strict.result | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/mysql-test/r/strict.result b/mysql-test/r/strict.result index fc7170bfc2b..cc1a2535896 100644 --- a/mysql-test/r/strict.result +++ b/mysql-test/r/strict.result @@ -1302,6 +1302,43 @@ t2 CREATE TABLE `t2` ( ) ENGINE=MyISAM DEFAULT CHARSET=latin1 drop table t2,t1; set @@sql_mode= @org_mode; +set @@sql_mode='traditional'; +create table t1 (i int) +comment '123456789*123456789*123456789*123456789*123456789* + 123456789*123456789*123456789*123456789*123456789*'; +ERROR HY000: Too long comment for table 't1' +create table t1 ( +i int comment +'123456789*123456789*123456789*123456789* + 123456789*123456789*123456789*123456789* + 123456789*123456789*123456789*123456789* + 123456789*123456789*123456789*123456789* + 123456789*123456789*123456789*123456789* + 123456789*123456789*123456789*123456789* + 123456789*123456789*123456789*123456789*'); +ERROR HY000: Too long comment for field 'i' +set @@sql_mode= @org_mode; +create table t1 +(i int comment +'123456789*123456789*123456789*123456789* + 123456789*123456789*123456789*123456789* + 123456789*123456789*123456789*123456789* + 123456789*123456789*123456789*123456789* + 123456789*123456789*123456789*123456789* + 123456789*123456789*123456789*123456789* + 123456789*123456789*123456789*123456789*'); +Warnings: +Warning 1105 Unknown error +select column_name, column_comment from information_schema.columns where +table_schema = 'test' and table_name = 't1'; +column_name column_comment +i 123456789*123456789*123456789*123456789* + 123456789*123456789*123456789*123456789* + 123456789*123456789*123456789*123456789* + 123456789*123456789*123456789*123456789* + 123456789*123456789*123456789*123456789* + 123456789*123456789*123456789*123456789* +drop table t1; set names utf8; create table t1 (i int) comment '123456789*123456789*123456789*123456789*123456789*123456789*'; From 92262b8cc12fa5bd91110b5c89e0281805894605 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 1 Sep 2007 00:12:00 +0400 Subject: [PATCH 181/194] Eliminate compile warnings. --- sql/sp.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sql/sp.cc b/sql/sp.cc index abd0f618d54..6032688f7f1 100644 --- a/sql/sp.cc +++ b/sql/sp.cc @@ -576,6 +576,7 @@ db_load_routine(THD *thd, int type, sp_name *name, sp_head **sphp, if (mysql_opt_change_db(thd, &name->m_db, &saved_cur_db_name, TRUE, &cur_db_changed)) { + ret= SP_INTERNAL_ERROR; goto end; } @@ -597,7 +598,7 @@ db_load_routine(THD *thd, int type, sp_name *name, sp_head **sphp, if (cur_db_changed && mysql_change_db(thd, &saved_cur_db_name, TRUE)) { delete newlex.sphead; - ret= -1; + ret= SP_INTERNAL_ERROR; goto end; } From d2f32b1053e30245ef7f7d38b04a927abea74945 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 31 Aug 2007 15:51:57 -0600 Subject: [PATCH 182/194] Fixed timing issues in events.test mysql-test/t/events.test: Wait for the select get_lock() to actually get the lock wait for release_lock() to actually release the lock --- mysql-test/t/events.test | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/mysql-test/t/events.test b/mysql-test/t/events.test index 365318e1db9..20134765609 100644 --- a/mysql-test/t/events.test +++ b/mysql-test/t/events.test @@ -453,7 +453,8 @@ create event закачка on schedule every 10 hour do select get_lock("test_l --echo "Should have only 2 processes: the scheduler and the locked event" let $wait_condition= select count(*) = 2 from information_schema.processlist - where (info like "select get_lock%" OR user='event_scheduler'); + where ( (state like 'User lock%' AND info like 'select get_lock%') + OR (command='Daemon' AND user='event_scheduler')); --source include/wait_condition.inc select /*2*/ user, host, db, command, state, info @@ -464,6 +465,13 @@ select /*2*/ user, host, db, command, state, info select release_lock("test_lock2"); drop event закачка; +# Wait for release_lock("test_lock2") to complete, +# to avoid polluting the next test information_schema.processlist +let $wait_condition= select count(*) = 0 from information_schema.processlist + where (state like 'User lock%' AND info like 'select get_lock%'); +--source include/wait_condition.inc + + ## ## 1. get a lock ## 2. create an event @@ -478,7 +486,8 @@ create event закачка21 on schedule every 10 hour do select get_lock("test --echo "Should have only 2 processes: the scheduler and the locked event" let $wait_condition= select count(*) = 2 from information_schema.processlist - where (info like "select get_lock%" OR user='event_scheduler'); + where ( (state like 'User lock%' AND info like 'select get_lock%') + OR (command='Daemon' AND user='event_scheduler')); --source include/wait_condition.inc select /*3*/ user, host, db, command, state, info From 55566a66bd7b7eebf22c3368cc8b57d34a0a06c9 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 1 Sep 2007 11:41:38 +0200 Subject: [PATCH 183/194] Use eval around "rmtree" and use our own version of rmtree if it fails --- mysql-test/lib/mtr_misc.pl | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/mysql-test/lib/mtr_misc.pl b/mysql-test/lib/mtr_misc.pl index 931c93f52a1..0fa332e30fd 100644 --- a/mysql-test/lib/mtr_misc.pl +++ b/mysql-test/lib/mtr_misc.pl @@ -206,22 +206,15 @@ sub mtr_copy_dir($$) { sub mtr_rmtree($) { my ($dir)= @_; - my $need_file_find= 0; mtr_verbose("mtr_rmtree: $dir"); - { - # Try to use File::Path::rmtree. Recent versions - # handles removal of directories and files that don't - # have full permissions, while older versions - # may have a problem with that and we use our own version + # Try to use File::Path::rmtree. Recent versions + # handles removal of directories and files that don't + # have full permissions, while older versions + # may have a problem with that and we use our own version - local $SIG{__WARN__}= sub { - $need_file_find= 1; - mtr_warning($_[0]); - }; - rmtree($dir); - } - if ( $need_file_find ) { + eval { rmtree($dir); }; + if ( $@ ) { mtr_warning("rmtree($dir) failed, trying with File::Find..."); my $errors= 0; From 733bd4fe81dc36cc1dc7be4b9562fd3b5727614c Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 3 Sep 2007 10:47:24 +0200 Subject: [PATCH 184/194] Bug #21074 Large query_cache freezes mysql server sporadically under heavy load Invaldating a subset of a sufficiently large query cache can take a long time. During this time the server is efficiently frozen and no other operation can be executed. This patch addresses this problem by setting a time limit on how long time a dictionary access request can take before giving up on the attempt. This patch does not work for query cache invalidations issued by DROP, ALTER or RENAME TABLE operations. sql/sql_cache.cc: Changed mutex locking to a timed spinn lock. If access to query cache dictionary takes "a long time" (currently more than 0.1 seconds) the system fall backs on ordinary statement execution. --- sql/sql_cache.cc | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc index 33d658ce6a1..cb00b98ccf8 100644 --- a/sql/sql_cache.cc +++ b/sql/sql_cache.cc @@ -1023,6 +1023,13 @@ Query_cache::send_result_to_client(THD *thd, char *sql, uint query_length) Query_cache_block_table *block_table, *block_table_end; ulong tot_length; Query_cache_query_flags flags; + const uint spin_treshold= 50000; + const double lock_time_treshold= 0.1; /* Time in seconds */ + uint spin_count= 0; + int lock_status= 0; + ulong new_time= 0; + ulong stop_time= 0; + DBUG_ENTER("Query_cache::send_result_to_client"); /* @@ -1069,7 +1076,29 @@ Query_cache::send_result_to_client(THD *thd, char *sql, uint query_length) } } - STRUCT_LOCK(&structure_guard_mutex); + stop_time= my_clock()+(ulong)lock_time_treshold*CLOCKS_PER_SEC; + while ((lock_status= pthread_mutex_trylock(&structure_guard_mutex)) == EBUSY + && spin_count < spin_treshold + && new_time < stop_time) + { + spin_count++; + if (spin_count%5) + new_time= my_clock(); + pthread_yield(); + } + + if (lock_status != 0) + { + /* + Query cache is too busy doing something else. + Fall back on ordinary statement execution. We also mark this + query as unsafe to cache because otherwise this thread will + still be halted when the result set is stored to the cache. + */ + thd->lex->safe_to_cache_query= FALSE; + goto err; + } + if (query_cache_size == 0 || flush_in_progress) { DBUG_PRINT("qcache", ("query cache disabled")); From 424bda78154c49dc82df138aa8587c5a2ea89bde Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 3 Sep 2007 15:12:28 +0400 Subject: [PATCH 185/194] Make mysql compilable on gcc-4.2.1. c++config.h now has the following code: // For example, is known to #define min and max as macros... #undef min #undef max So, our defines in my_global.h are undefined when header is included. Move definitions of min()/max() to the end of my_global.h. --- include/my_global.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/include/my_global.h b/include/my_global.h index 8b6cdef8daa..12129523939 100644 --- a/include/my_global.h +++ b/include/my_global.h @@ -562,12 +562,6 @@ int __void__; #define PURIFY_OR_LINT_INIT(var) #endif -/* Define some useful general macros */ -#if !defined(max) -#define max(a, b) ((a) > (b) ? (a) : (b)) -#define min(a, b) ((a) < (b) ? (a) : (b)) -#endif - #if !defined(HAVE_UINT) #undef HAVE_UINT #define HAVE_UINT @@ -1508,4 +1502,10 @@ inline void operator delete[](void*, void*) { /* Do nothing */ } /* Length of decimal number represented by INT64. */ #define MY_INT64_NUM_DECIMAL_DIGITS 21 +/* Define some useful general macros (should be done after all headers). */ +#if !defined(max) +#define max(a, b) ((a) > (b) ? (a) : (b)) +#define min(a, b) ((a) < (b) ? (a) : (b)) +#endif + #endif /* my_global_h */ From 81dff1351a2bb44e94140cb92400c4f63d35393b Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 3 Sep 2007 15:13:34 +0400 Subject: [PATCH 186/194] Rewrite test case for BUG 25843 to avoid SHOW BINLOG EVENTS statement. mysql-test/suite/rpl/r/rpl_ps.result: Update result file. --- mysql-test/suite/rpl/r/rpl_ps.result | 39 ++++++++++++++-------- mysql-test/suite/rpl/t/rpl_ps.test | 49 +++++++++++++++++++++------- 2 files changed, 63 insertions(+), 25 deletions(-) diff --git a/mysql-test/suite/rpl/r/rpl_ps.result b/mysql-test/suite/rpl/r/rpl_ps.result index dd3ed165226..faba43ae934 100644 --- a/mysql-test/suite/rpl/r/rpl_ps.result +++ b/mysql-test/suite/rpl/r/rpl_ps.result @@ -34,17 +34,18 @@ stop slave; # ######################################################################## -# -# Check that binlog is filled properly. -# +# Connection: slave + + +START SLAVE; + +# Connection: master + CREATE DATABASE mysqltest1; -CREATE TABLE t1(c INT); +CREATE TABLE t1(db_name CHAR(32), db_col_name CHAR(32)); -RESET MASTER; -RESET SLAVE; - -PREPARE stmt_d_1 FROM 'INSERT INTO t1 VALUES(1)'; +PREPARE stmt_d_1 FROM 'INSERT INTO t1 VALUES(DATABASE(), @@collation_database)'; EXECUTE stmt_d_1; @@ -52,18 +53,28 @@ use mysqltest1; EXECUTE stmt_d_1; -FLUSH LOGS; -SHOW BINLOG EVENTS FROM 106; -Log_name Pos Event_type Server_id End_log_pos Info -slave-bin.000001 106 Query 2 193 use `test`; INSERT INTO t1 VALUES(1) -slave-bin.000001 193 Query 2 280 use `test`; INSERT INTO t1 VALUES(1) -slave-bin.000001 280 Rotate 2 323 slave-bin.000002;pos=4 +# Connection: slave + + +SELECT * FROM t1; +db_name db_col_name +test latin1_swedish_ci +test latin1_swedish_ci + +# Connection: master + DROP DATABASE mysqltest1; use test; + +# Connection: slave + + +STOP SLAVE; + ######################################################################## reset master; reset slave; diff --git a/mysql-test/suite/rpl/t/rpl_ps.test b/mysql-test/suite/rpl/t/rpl_ps.test index 0c8a499c9fe..27f1ac3348d 100644 --- a/mysql-test/suite/rpl/t/rpl_ps.test +++ b/mysql-test/suite/rpl/t/rpl_ps.test @@ -73,20 +73,24 @@ stop slave; ############################################################################### --echo ---echo # ---echo # Check that binlog is filled properly. ---echo # +--echo # Connection: slave +--echo +--connection slave + +--echo +START SLAVE; + +--echo +--echo # Connection: master +--echo +--connection master --echo CREATE DATABASE mysqltest1; -CREATE TABLE t1(c INT); +CREATE TABLE t1(db_name CHAR(32), db_col_name CHAR(32)); --echo -RESET MASTER; -RESET SLAVE; - ---echo -PREPARE stmt_d_1 FROM 'INSERT INTO t1 VALUES(1)'; +PREPARE stmt_d_1 FROM 'INSERT INTO t1 VALUES(DATABASE(), @@collation_database)'; --echo EXECUTE stmt_d_1; @@ -98,10 +102,21 @@ use mysqltest1; EXECUTE stmt_d_1; --echo -FLUSH LOGS; +--save_master_pos --echo -SHOW BINLOG EVENTS FROM 106; +--echo # Connection: slave +--echo +--connection slave +--sync_with_master + +--echo +SELECT * FROM t1; + +--echo +--echo # Connection: master +--echo +--connection master --echo DROP DATABASE mysqltest1; @@ -109,6 +124,18 @@ DROP DATABASE mysqltest1; --echo use test; +--echo +--save_master_pos + +--echo +--echo # Connection: slave +--echo +--connection slave +--sync_with_master + +--echo +STOP SLAVE; + --echo --echo ######################################################################## From d2a0a4d53a217c906d7c7c5bf867477fc4f5936e Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 3 Sep 2007 13:42:32 +0200 Subject: [PATCH 187/194] - Fix cross compatibility issues by exchanging pthread_yield with my_sleep(0) --- sql/sql_cache.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc index cb00b98ccf8..97e37c870e2 100644 --- a/sql/sql_cache.cc +++ b/sql/sql_cache.cc @@ -1084,7 +1084,7 @@ Query_cache::send_result_to_client(THD *thd, char *sql, uint query_length) spin_count++; if (spin_count%5) new_time= my_clock(); - pthread_yield(); + my_sleep(0); } if (lock_status != 0) From 5c836d24f64eb99aba3cb94da3ee90bcca209500 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 4 Sep 2007 16:40:27 -0600 Subject: [PATCH 188/194] Fixed whitespace --- sql/sql_trigger.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/sql_trigger.cc b/sql/sql_trigger.cc index 6e4b5defb97..1737bb0d9f8 100644 --- a/sql/sql_trigger.cc +++ b/sql/sql_trigger.cc @@ -971,7 +971,7 @@ bool Table_triggers_list::check_n_load(THD *thd, const char *db, Lex_input_stream lip(thd, trg_create_str->str, trg_create_str->length); thd->m_lip= &lip; lex_start(thd); - thd->spcont= NULL; + thd->spcont= NULL; int err= MYSQLparse((void *)thd); if (err || thd->is_fatal_error) From 700d8b1f09073cdefc46513ba4eb8a81bcaa4808 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 4 Sep 2007 20:03:12 -0700 Subject: [PATCH 189/194] Discovered a bug while working with backup. Since it is possible to execute a statement in a pre/post statment clause that can return a result, we need to test for that and free it. client/mysqlslap.c: Cleanup resuls if rows are returned. --- client/mysqlslap.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/client/mysqlslap.c b/client/mysqlslap.c index af29df6e4ba..02a0cbd04c5 100644 --- a/client/mysqlslap.c +++ b/client/mysqlslap.c @@ -1673,6 +1673,7 @@ static int run_statements(MYSQL *mysql, statement *stmt) { statement *ptr; + MYSQL_RES *result; DBUG_ENTER("run_statements"); for (ptr= stmt; ptr && ptr->length; ptr= ptr->next) @@ -1683,6 +1684,11 @@ run_statements(MYSQL *mysql, statement *stmt) my_progname, (uint)ptr->length, ptr->string, mysql_error(mysql)); exit(1); } + if (mysql_field_count(mysql)) + { + result= mysql_store_result(mysql); + mysql_free_result(result); + } } DBUG_RETURN(0); From bfbe3350dde27a30e999a375228873a07880d5b4 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 5 Sep 2007 15:03:02 -0300 Subject: [PATCH 190/194] The test case for Bug#29936 doesn't work with the embedded version, the first query is not running while we are doing wait queries on a second connection. mysql-test/r/sp.result: Remove test case result for Bug#29936, moving to sp_notembedded.result mysql-test/r/sp_notembedded.result: Test case result for Bug#29936, moved from sp.result mysql-test/t/sp.test: Remove test case for Bug#29936, moving to sp_notembedded.test mysql-test/t/sp_notembedded.test: Test case result for Bug#29936, moved from sp.test --- mysql-test/r/sp.result | 23 ----------- mysql-test/r/sp_notembedded.result | 23 +++++++++++ mysql-test/t/sp.test | 65 ------------------------------ mysql-test/t/sp_notembedded.test | 65 ++++++++++++++++++++++++++++++ 4 files changed, 88 insertions(+), 88 deletions(-) diff --git a/mysql-test/r/sp.result b/mysql-test/r/sp.result index 2abff35b232..fd09701c125 100644 --- a/mysql-test/r/sp.result +++ b/mysql-test/r/sp.result @@ -6546,29 +6546,6 @@ DROP VIEW v1; DROP FUNCTION f1; DROP FUNCTION f2; DROP TABLE t1; -drop table if exists t1; -drop procedure if exists p1; -create table t1 (value varchar(15)); -create procedure p1() update t1 set value='updated' where value='old'; -call p1(); -insert into t1 (value) values ("old"); -select get_lock('b26162',120); -get_lock('b26162',120) -1 -select 'rl_acquirer', value from t1 where get_lock('b26162',120);; -set session low_priority_updates=on; -call p1();; -select 'rl_contender', value from t1; -rl_contender value -rl_contender old -select release_lock('b26162'); -release_lock('b26162') -1 -rl_acquirer value -rl_acquirer old -drop procedure p1; -drop table t1; -set session low_priority_updates=default; # Bug#13675. diff --git a/mysql-test/r/sp_notembedded.result b/mysql-test/r/sp_notembedded.result index 0b1fa565d28..277eea8570e 100644 --- a/mysql-test/r/sp_notembedded.result +++ b/mysql-test/r/sp_notembedded.result @@ -208,3 +208,26 @@ GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION drop user mysqltest_1@localhost; drop procedure 15298_1; drop procedure 15298_2; +drop table if exists t1; +drop procedure if exists p1; +create table t1 (value varchar(15)); +create procedure p1() update t1 set value='updated' where value='old'; +call p1(); +insert into t1 (value) values ("old"); +select get_lock('b26162',120); +get_lock('b26162',120) +1 +select 'rl_acquirer', value from t1 where get_lock('b26162',120);; +set session low_priority_updates=on; +call p1();; +select 'rl_contender', value from t1; +rl_contender value +rl_contender old +select release_lock('b26162'); +release_lock('b26162') +1 +rl_acquirer value +rl_acquirer old +drop procedure p1; +drop table t1; +set session low_priority_updates=default; diff --git a/mysql-test/t/sp.test b/mysql-test/t/sp.test index 1c8f1ca51c2..27e559f4463 100644 --- a/mysql-test/t/sp.test +++ b/mysql-test/t/sp.test @@ -7494,71 +7494,6 @@ DROP FUNCTION f1; DROP FUNCTION f2; DROP TABLE t1; -# -# Bug#29936 Stored Procedure DML ignores low_priority_updates setting -# - ---disable_warnings -drop table if exists t1; -drop procedure if exists p1; ---enable_warnings - -create table t1 (value varchar(15)); -create procedure p1() update t1 set value='updated' where value='old'; - -# load the procedure into sp cache and execute once -call p1(); - -insert into t1 (value) values ("old"); - -connect (rl_holder, localhost, root,,); -connect (rl_acquirer, localhost, root,,); -connect (rl_contender, localhost, root,,); -connect (rl_wait, localhost, root,,); - -connection rl_holder; -select get_lock('b26162',120); - -connection rl_acquirer; ---send select 'rl_acquirer', value from t1 where get_lock('b26162',120); - -# we must wait till this select opens and locks the tables -connection rl_wait; -let $wait_condition= - select count(*) = 1 from information_schema.processlist - where state = "User lock" and - info = "select 'rl_acquirer', value from t1 where get_lock('b26162',120)"; ---source include/wait_condition.inc - -connection default; -set session low_priority_updates=on; ---send call p1(); - -connection rl_wait; -let $wait_condition= - select count(*) = 1 from information_schema.processlist - where state = "Locked" and - info = "update t1 set value='updated' where value='old'"; ---source include/wait_condition.inc - -connection rl_contender; -select 'rl_contender', value from t1; - -connection rl_holder; -select release_lock('b26162'); - -connection rl_acquirer; ---reap -connection default; ---reap - -disconnect rl_holder; -disconnect rl_acquirer; -disconnect rl_wait; -drop procedure p1; -drop table t1; -set session low_priority_updates=default; - # # Bug#13675: DATETIME/DATE type in store proc param seems to be converted as # varbinary diff --git a/mysql-test/t/sp_notembedded.test b/mysql-test/t/sp_notembedded.test index 6335ad55606..b5037b469ae 100644 --- a/mysql-test/t/sp_notembedded.test +++ b/mysql-test/t/sp_notembedded.test @@ -287,3 +287,68 @@ connection default; drop user mysqltest_1@localhost; drop procedure 15298_1; drop procedure 15298_2; + +# +# Bug#29936 Stored Procedure DML ignores low_priority_updates setting +# + +--disable_warnings +drop table if exists t1; +drop procedure if exists p1; +--enable_warnings + +create table t1 (value varchar(15)); +create procedure p1() update t1 set value='updated' where value='old'; + +# load the procedure into sp cache and execute once +call p1(); + +insert into t1 (value) values ("old"); + +connect (rl_holder, localhost, root,,); +connect (rl_acquirer, localhost, root,,); +connect (rl_contender, localhost, root,,); +connect (rl_wait, localhost, root,,); + +connection rl_holder; +select get_lock('b26162',120); + +connection rl_acquirer; +--send select 'rl_acquirer', value from t1 where get_lock('b26162',120); + +# we must wait till this select opens and locks the tables +connection rl_wait; +let $wait_condition= + select count(*) = 1 from information_schema.processlist + where state = "User lock" and + info = "select 'rl_acquirer', value from t1 where get_lock('b26162',120)"; +--source include/wait_condition.inc + +connection default; +set session low_priority_updates=on; +--send call p1(); + +connection rl_wait; +let $wait_condition= + select count(*) = 1 from information_schema.processlist + where state = "Locked" and + info = "update t1 set value='updated' where value='old'"; +--source include/wait_condition.inc + +connection rl_contender; +select 'rl_contender', value from t1; + +connection rl_holder; +select release_lock('b26162'); + +connection rl_acquirer; +--reap +connection default; +--reap + +disconnect rl_holder; +disconnect rl_acquirer; +disconnect rl_wait; +drop procedure p1; +drop table t1; +set session low_priority_updates=default; From 712b9b00fb0820b8fa4d674373109151a87c2430 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 5 Sep 2007 12:14:43 -0600 Subject: [PATCH 191/194] Test events_logs_tests cleanup Fixed test failure under heavy load, in case truncate table is slow. mysql-test/r/events_logs_tests.result: Fixed test failure under heavy load, in case truncate table is slow. mysql-test/t/events_logs_tests.test: Fixed test failure under heavy load, in case truncate table is slow. --- mysql-test/r/events_logs_tests.result | 6 ++++-- mysql-test/t/events_logs_tests.test | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/mysql-test/r/events_logs_tests.result b/mysql-test/r/events_logs_tests.result index fb658b4a83b..b7faf56f466 100644 --- a/mysql-test/r/events_logs_tests.result +++ b/mysql-test/r/events_logs_tests.result @@ -52,7 +52,8 @@ do select 'events_logs_test' as inside_event, sleep(1.5); Nothing should be logged -select user_host, db, sql_text from mysql.slow_log where sql_text not like 'create event%'; +select user_host, db, sql_text from mysql.slow_log +where sql_text like 'select \'events_logs_test\'%'; user_host db sql_text set @@global.long_query_time=1; truncate mysql.slow_log; @@ -61,7 +62,8 @@ do select 'events_logs_test' as inside_event, sleep(1.5); Event sub-statement should be logged. -select user_host, db, sql_text from mysql.slow_log where sql_text not like 'create event%'; +select user_host, db, sql_text from mysql.slow_log +where sql_text like 'select \'events_logs_test\'%'; user_host db sql_text USER_HOST events_test select 'events_logs_test' as inside_event, sleep(1.5) drop database events_test; diff --git a/mysql-test/t/events_logs_tests.test b/mysql-test/t/events_logs_tests.test index b9ceec2ed82..3240dccbc76 100644 --- a/mysql-test/t/events_logs_tests.test +++ b/mysql-test/t/events_logs_tests.test @@ -61,7 +61,8 @@ create event ev_log_general on schedule at now() on completion not preserve --echo Nothing should be logged --echo --replace_column 1 USER_HOST -select user_host, db, sql_text from mysql.slow_log where sql_text not like 'create event%'; +select user_host, db, sql_text from mysql.slow_log + where sql_text like 'select \'events_logs_test\'%'; set @@global.long_query_time=1; truncate mysql.slow_log; create event ev_log_general on schedule at now() on completion not preserve @@ -72,7 +73,8 @@ create event ev_log_general on schedule at now() on completion not preserve --echo Event sub-statement should be logged. --echo --replace_column 1 USER_HOST -select user_host, db, sql_text from mysql.slow_log where sql_text not like 'create event%'; +select user_host, db, sql_text from mysql.slow_log + where sql_text like 'select \'events_logs_test\'%'; drop database events_test; set global event_scheduler=off; From ed34d91121208245afc6f0bd675b3aaa92b52628 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 6 Sep 2007 15:57:36 +0400 Subject: [PATCH 192/194] Make events.test more robust against timing issues. mysql-test/t/events.test: Wait until event scheduler thread reaches exactly the same state which later appears in the results of select from processlist. --- mysql-test/t/events.test | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mysql-test/t/events.test b/mysql-test/t/events.test index 20134765609..d1ca5f1b609 100644 --- a/mysql-test/t/events.test +++ b/mysql-test/t/events.test @@ -487,7 +487,8 @@ create event закачка21 on schedule every 10 hour do select get_lock("test --echo "Should have only 2 processes: the scheduler and the locked event" let $wait_condition= select count(*) = 2 from information_schema.processlist where ( (state like 'User lock%' AND info like 'select get_lock%') - OR (command='Daemon' AND user='event_scheduler')); + OR (command='Daemon' AND user='event_scheduler' AND + state = 'Waiting for next activation')); --source include/wait_condition.inc select /*3*/ user, host, db, command, state, info From 16c328056cf20e22c934f009d2a9ccabe445e7b5 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 6 Sep 2007 13:22:34 -0300 Subject: [PATCH 193/194] The test case for bug 28587 doesn't work with the embedded version, the first query is not running while we are doing wait queries on a second connection. mysql-test/r/insert_notembedded.result: Test case result for bug 28587 moved from insert_update.result mysql-test/r/insert_update.result: Remove test case result for bug 28587, moving to insert_notembedded.result mysql-test/t/insert_notembedded.test: Test case result for bug 28587, moved from insert_update.test mysql-test/t/insert_update.test: Remove test case for bug 28587, moving to insert_notembedded.test --- mysql-test/r/insert_notembedded.result | 19 ++++++++++++++ mysql-test/r/insert_update.result | 19 -------------- mysql-test/t/insert_notembedded.test | 35 ++++++++++++++++++++++++++ mysql-test/t/insert_update.test | 35 -------------------------- 4 files changed, 54 insertions(+), 54 deletions(-) diff --git a/mysql-test/r/insert_notembedded.result b/mysql-test/r/insert_notembedded.result index 816060b7ec9..ac69cb65972 100644 --- a/mysql-test/r/insert_notembedded.result +++ b/mysql-test/r/insert_notembedded.result @@ -105,3 +105,22 @@ DROP VIEW view_target2; DROP VIEW view_target3; DROP USER user20989@localhost; DROP DATABASE meow; +connection: default +set low_priority_updates=1; +drop table if exists t1; +create table t1 (a int, b int, unique key t1$a (a)); +lock table t1 read; +connection: update +set low_priority_updates=1; +show variables like 'low_priority_updates'; +Variable_name Value +low_priority_updates ON +insert into t1 values (1, 2) ON DUPLICATE KEY UPDATE b = 2;; +connection: select +select * from t1; +a b +connection: default +select * from t1; +a b +drop table t1; +set low_priority_updates=default; diff --git a/mysql-test/r/insert_update.result b/mysql-test/r/insert_update.result index 3aec9594d36..704cf444681 100644 --- a/mysql-test/r/insert_update.result +++ b/mysql-test/r/insert_update.result @@ -407,22 +407,3 @@ select if( @stamp1 = @stamp2, "correct", "wrong"); if( @stamp1 = @stamp2, "correct", "wrong") correct drop table t1; -connection: default -set low_priority_updates=1; -drop table if exists t1; -create table t1 (a int, b int, unique key t1$a (a)); -lock table t1 read; -connection: update -set low_priority_updates=1; -show variables like 'low_priority_updates'; -Variable_name Value -low_priority_updates ON -insert into t1 values (1, 2) ON DUPLICATE KEY UPDATE b = 2;; -connection: select -select * from t1; -a b -connection: default -select * from t1; -a b -drop table t1; -set low_priority_updates=default; diff --git a/mysql-test/t/insert_notembedded.test b/mysql-test/t/insert_notembedded.test index bdea72e9eca..24040f9c310 100644 --- a/mysql-test/t/insert_notembedded.test +++ b/mysql-test/t/insert_notembedded.test @@ -152,3 +152,38 @@ disconnect root; connection default; DROP DATABASE meow; + +# +# Bug#28587 SELECT is blocked by INSERT waiting on read lock, even with low_priority_updates +# +--echo connection: default +set low_priority_updates=1; +--disable_warnings +drop table if exists t1; +--enable_warnings +create table t1 (a int, b int, unique key t1$a (a)); +lock table t1 read; +connect (update,localhost,root,,); +connection update; +--echo connection: update +set low_priority_updates=1; +show variables like 'low_priority_updates'; +let $ID= `select connection_id()`; +--send insert into t1 values (1, 2) ON DUPLICATE KEY UPDATE b = 2; +connection default; +# we must wait till the insert opens and locks the table +let $wait_condition= + select count(*) = 1 from information_schema.processlist + where state = "Locked" and id = $ID; +--source include/wait_condition.inc +connect (select,localhost,root,,); +--echo connection: select +select * from t1; +connection default; +--echo connection: default +select * from t1; +connection default; +disconnect update; +disconnect select; +drop table t1; +set low_priority_updates=default; diff --git a/mysql-test/t/insert_update.test b/mysql-test/t/insert_update.test index aad241e031f..67f21731afe 100644 --- a/mysql-test/t/insert_update.test +++ b/mysql-test/t/insert_update.test @@ -306,38 +306,3 @@ insert into t1(f1) values(1) on duplicate key update f1=1; select @stamp2:=f2 from t1; select if( @stamp1 = @stamp2, "correct", "wrong"); drop table t1; - -# -# Bug#28587 SELECT is blocked by INSERT waiting on read lock, even with low_priority_updates -# ---echo connection: default -set low_priority_updates=1; ---disable_warnings -drop table if exists t1; ---enable_warnings -create table t1 (a int, b int, unique key t1$a (a)); -lock table t1 read; -connect (update,localhost,root,,); -connection update; ---echo connection: update -set low_priority_updates=1; -show variables like 'low_priority_updates'; -let $ID= `select connection_id()`; ---send insert into t1 values (1, 2) ON DUPLICATE KEY UPDATE b = 2; -connection default; -# we must wait till the insert opens and locks the table -let $wait_condition= - select count(*) = 1 from information_schema.processlist - where state = "Locked" and id = $ID; ---source include/wait_condition.inc -connect (select,localhost,root,,); ---echo connection: select -select * from t1; -connection default; ---echo connection: default -select * from t1; -connection default; -disconnect update; -disconnect select; -drop table t1; -set low_priority_updates=default; From 0e1cdf8d94a35c339c935ed00b2b63597bd27d47 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 6 Sep 2007 12:06:22 -0600 Subject: [PATCH 194/194] Test cleanup in rpl_binlog_grant: XID values are unpredictable --- mysql-test/suite/rpl/r/rpl_binlog_grant.result | 6 +++--- mysql-test/suite/rpl/t/rpl_binlog_grant.test | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/mysql-test/suite/rpl/r/rpl_binlog_grant.result b/mysql-test/suite/rpl/r/rpl_binlog_grant.result index 1692bcee21f..43a21913cf6 100644 --- a/mysql-test/suite/rpl/r/rpl_binlog_grant.result +++ b/mysql-test/suite/rpl/r/rpl_binlog_grant.result @@ -19,7 +19,7 @@ master-bin.000001 193 Query 1 272 create database d1 master-bin.000001 272 Query 1 370 use `d1`; create table t (s1 int) engine=innodb master-bin.000001 370 Query 1 436 use `d1`; BEGIN master-bin.000001 436 Query 1 521 use `d1`; insert into t values (1) -master-bin.000001 521 Xid 1 548 COMMIT /* xid=12 */ +master-bin.000001 521 Xid 1 548 COMMIT /* XID */ master-bin.000001 548 Query 1 633 use `d1`; grant select on t to x@y start transaction; insert into t values (2); @@ -40,11 +40,11 @@ master-bin.000001 193 Query 1 272 create database d1 master-bin.000001 272 Query 1 370 use `d1`; create table t (s1 int) engine=innodb master-bin.000001 370 Query 1 436 use `d1`; BEGIN master-bin.000001 436 Query 1 521 use `d1`; insert into t values (1) -master-bin.000001 521 Xid 1 548 COMMIT /* xid=12 */ +master-bin.000001 521 Xid 1 548 COMMIT /* XID */ master-bin.000001 548 Query 1 633 use `d1`; grant select on t to x@y master-bin.000001 633 Query 1 699 use `d1`; BEGIN master-bin.000001 699 Query 1 784 use `d1`; insert into t values (2) -master-bin.000001 784 Xid 1 811 COMMIT /* xid=18 */ +master-bin.000001 784 Xid 1 811 COMMIT /* XID */ master-bin.000001 811 Query 1 899 use `d1`; revoke select on t from x@y drop user x@y; drop database d1; diff --git a/mysql-test/suite/rpl/t/rpl_binlog_grant.test b/mysql-test/suite/rpl/t/rpl_binlog_grant.test index b6868f7ebf8..42af33c2e05 100644 --- a/mysql-test/suite/rpl/t/rpl_binlog_grant.test +++ b/mysql-test/suite/rpl/t/rpl_binlog_grant.test @@ -25,6 +25,7 @@ grant select on t to x@y; rollback; show grants for x@y; --replace_result $VERSION VERSION +--replace_regex /\/\* xid=.* \*\//\/* XID *\// show binlog events; start transaction; insert into t values (2); @@ -36,6 +37,7 @@ commit; select * from t; show grants for x@y; --replace_result $VERSION VERSION +--replace_regex /\/\* xid=.* \*\//\/* XID *\// show binlog events; drop user x@y; drop database d1;
Incident event format
SymbolSize
(bytes)
Size
(bytes)
Description